WIP: refonte documentation

This commit is contained in:
Adrien Bourmault 2022-12-19 16:20:35 +01:00
parent 8c4ec33a81
commit 7dc4af5760
No known key found for this signature in database
GPG Key ID: 6EB408FE0ACEC664
26 changed files with 46 additions and 3868 deletions

Binary file not shown.

View File

@ -1,118 +0,0 @@
# Machine virtuelle AUDIO
## Système
### Matériel virtuel
CPU : 1
RAM : 957384 KB
Stockage de masse : 50 Gio
Swap : désactivé
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Mail Transfer Agent : `postfix`
### Caractéristiques notables
Domaine : dns.libre-en-communs.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.186
Adresse ipv6 publique : 2001:910:1021::186
## Serveur web (installation basique)
Installation d'un service nginx pour :
- la gestion des certificats SSL ;
- l'installation d'une page d'information sur comment se connecter au Mumble ;
- la possible installation d'un service client web pour Mumble ;
- l'éventuel déploiement de StatoolInfos ;
- …
Installer les paquets :
```
apt-get install nginx python3-certbot-nginx
```
Ouvrir les ports http (80) et https (443) :
```
ufw allow 'Nginx HTTP'
ufw allow 'Nginx HTTPS'
```
Configurer a minima le site web dans `/etc/nginx/sites-available/audio.a-lec.org` :
```
server
{
listen 80;
listen [::]:80;
server_name audio.a-lec.org;
access_log /var/log/nginx/audio.a-lec.org-access.log;
error_log /var/log/nginx/audio.a-lec.org-error.log;
}
```
Activer la configuration :
```
cd /etc/nginx/sites-enabled/
ln -s ../sites-available/audio.a-lec.org
```
Vérifier que c'est bon et recharger :
```
nginx -t && systemctl reload nginx
```
Configurer le certificat SSl :
```
certbot --nginx
```
Mettre beau le fichier `/etc/nginx/sites-enabled/audio.a-lec.org` :
```
server
{
listen 80;
listen [::]:80;
server_name audio.a-lec.org;
access_log /var/log/nginx/audio.a-lec.org-access.log;
error_log /var/log/nginx/audio.a-lec.org-error.log;
return 302 https://$host$request_uri;
}
server
{
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
server_name audio.a-lec.org;
access_log /var/log/nginx/audio.a-lec.org-access.log;
error_log /var/log/nginx/audio.a-lec.org-error.log;
ssl_certificate /etc/letsencrypt/live/audio.a-lec.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/audio.a-lec.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
root /var/www/audio.a-lec.org;
location = /
{
index index.xhtml;
}
}
```
Vérifier que c'est bon et recharger :
```
nginx -t && systemctl reload nginx
```

View File

@ -1,33 +0,0 @@
## Machine virtuelle DNS
Cette machine est le serveur DNS autorité de l'association.
### Matériel virtuel
CPU : xxx
RAM : xxx Mio
Stockage de masse : 10 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
DNS : `bind`
Mail Transfer Agent : `postfix`
### Caractéristiques notables
Domaine : dns.libre-en-communs.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.242
Adresse ipv6 publique : 2001:910:1021::242
### Configuration système de fichier partagé en écriture
#### /etc/fstab (extrait)
<details>
/vm_sharedfs /opt/vm_sharedfs 9p trans=virtio,version=9p2000.L,rw 0 0
</details>

View File

@ -1,328 +0,0 @@
## Machine virtuelle GENERIC
#### (c'est-à-dire le modèle de toutes les machines virtuelles)
...
### Matériel virtuel
CPU : 1
RAM : 1000 Mio
Stockage de masse : 50 Gio (fichier `sparse` i.e les zéros ne sont pas écrits sur le disque)
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Mail Transfer Agent : `postfix`
### Caractéristiques notables
Domaine : dns.libre-en-communs.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.4
Adresse ipv6 publique : 2001:910:1021::4
### Configuration réseau
#### /etc/network/interfaces
<details>
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp1s0
iface enp1s0 inet static
address 192.168.1.4/32
broadcast 192.168.255.255
gateway 192.168.0.1
netmask 255.255.0.0
iface enp1s0 inet6 static
address 2001:910:1021::4/128
gateway 2001:910:1021::
</details>
### Configuration SSH
#### /etc/ssh/sshd_config
<details>
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
PrintMotd no
AcceptEnv LANG LC_* GIT_*
Subsystem sftp /usr/lib/openssh/sftp-server
Match Group ssh-login
PasswordAuthentication yes
</details>
#### /etc/hosts.allow
sshd: 192.168.1.0/24, [2001:910:1021::]/48
#### /etc/hosts.deny
sshd: ALL
### Pare-feu
Installation :
```
apt-get install ufw
```
Ouvrir le port SSH :
```
ufw allow SSH
ufw enable
systemclt enable ufw
```
### Configuration SUDO
#### /etc/sudoers
<details>
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults env_keep += "GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL"
Defaults mail_badpass, insults
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
</details>
### Configuration MTA
#### /etc/postfix/transport
a-lec.org :
* discard:
#### /etc/postfix/virtual
@localhost admin@a-lec.org
@generic.a-lec.org admin@a-lec.org
### Configuration système de fichier partagé
#### /etc/fstab (extrait)
<details>
tmpfs /tmp tmpfs mode=1777,nosuid,nodev 0 0
</details>
### Configurations bashrc
#### /etc/skel/.bashrc (et /home/admin666/.bashrc)
<details>
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\H: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
#alias l='ls -CF'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
</details>
#### /root/.bashrc
<details>
# ~/.bashrc: executed by bash(1) for non-login shells.
# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
PS1='\[\033[01;32m\]=(^-^)=${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# umask 022
# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
</details>

View File

@ -1,117 +0,0 @@
## Machine virtuelle GESTION
Cette machine est destinée à accueillir le logiciel de comptabilité et gestion des membres de l'association.
### Matériel virtuel
CPU : 4
RAM : 3000 Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Compta et gestion des membres : `garradin`
Mail Transfer Agent : `postfix`
### Caractéristiques notables
Domaine : gestion.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.236
Adresse ipv6 publique : 2001:910:1021::236
### Configuration serveur web (nginx)
<details>
server {
server_name coffre.a-lec.org;
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
# Allow large attachments
client_max_body_size 128M;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8000;
}
listen 443 ssl http2 proxy_protocol; # managed by Certbot
listen [::]:443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/coffre.a-lec.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/coffre.a-lec.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = coffre.a-lec.org) {
return 302 https://$host$request_uri;
} # managed by Certbot
server_name coffre.a-lec.org;
listen 80;
return 404; # managed by Certbot
}
server {
root /usr/share/garradin/www; # Remplacer par le chemin adéquat vers le dossier public de garradin (ici c'est le défaut du paquet Debian)
server_name gestion.a-lec.org; # Remplacer par votre nom de domaine
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
location / {
try_files $uri $uri/ /_route.php?$query_string;
index index.php /_route.php;
}
location ~ \.php {
try_files $uri $uri/ /_route.php?$query_string;
include fastcgi.conf;
#fastcgi_pass 127.0.0.1:9000; # Si vous utilisez PHP-FPM (ou autre) en mode TCP et non sur une socket
fastcgi_pass unix:/var/run/php/php7.4-garradin.sock; # Si vous utilisez PHP-FPM en mode socket
}
listen 443 ssl proxy_protocol; # managed by Certbot
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/gestion.a-lec.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/gestion.a-lec.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = gestion.a-lec.org) {
return 302 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name gestion.a-lec.org;
return 404; # managed by Certbot
}
</details>

View File

@ -1,96 +0,0 @@
## Machine virtuelle GIT
Cette machine est destinée à accueillir la forge logicielle de l'association, qui permet à différents projets de bénéficier d'un outil de travail supportant des fonctions avancées (comme la CI et les hooks avancés), mais également à l'association de publier différents documents nécessaire à son activité.
### Matériel virtuel
CPU : 2
RAM : 4096 Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Forge logicielle : `gitlab-ce`
Mail Transfer Agent : `postfix`
### Caractéristiques notables
Domaine : git.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.131
Adresse ipv6 publique : 2001:910:1021::131
### Configuration serveur web (nginx)
<details>
# GITLAB
upstream gitlab-workhorse {
# On GitLab versions before 13.5, the location is
# `/var/opt/gitlab/gitlab-workhorse/socket`. Change the following line
# accordingly.
server unix:/var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0;
}
## Redirects all HTTP traffic to the HTTPS host
server {
## Either remove "default_server" from the listen line below,
## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab
## to be served if you visit any address that your server responds to, eg.
## the ip address of the server (http://x.x.x.x/)
listen 0.0.0.0:80;
listen [::]:80 ipv6only=on default_server;
server_name git.a-lec.org; ## Replace this with something like gitlab.example.com
server_tokens off; ## Don't show the nginx version number, a security best practice
return 302 https://git.a-lec.org$request_uri;
access_log /var/log/nginx/gitlab_access.log;
error_log /var/log/nginx/gitlab_error.log;
}
## HTTPS host
server {
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
listen 0.0.0.0:443 ssl proxy_protocol;
listen [::]:443 ipv6only=on ssl default_server;
server_name git.a-lec.org; ## Replace this with something like gitlab.example.com
server_tokens off; ## Don't show the nginx version number, a security best practice
root /opt/gitlab/embedded/service/gitlab-rails/public;
ssl_certificate /etc/letsencrypt/live/git.a-lec.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.a-lec.org/privkey.pem;
## [Optional] Enable HTTP Strict Transport Security
## HSTS is a feature improving protection against MITM attacks
## For more information see: https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
## Individual nginx logs for this GitLab vhost
access_log /var/log/nginx/gitlab_access.log;
error_log /var/log/nginx/gitlab_error.log;
location / {
client_max_body_size 0;
gzip off;
## https://github.com/gitlabhq/gitlabhq/issues/694
## Some requests take more than 30 seconds.
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://gitlab-workhorse;
}
}
</details>

View File

@ -1,163 +0,0 @@
## Machine virtuelle MAIL
Cette machine est destinée à accueillir le serveur d'envoi, réception et consultation de courriel de l'association.
### Matériel virtuel
CPU : 2
RAM : 1000 Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Serveur IMAP (et authentification) : `courier`
Mail Transfer Agent : `postfix`
Webmail : `roundcube` (**upstream**)
Serveur http : `nginx`
### Caractéristiques notables
Domaine : mail.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.201
Adresse ipv6 publique : 2001:910:1021::201
### Configuration MTA
<details>
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
\# Debian specific: Specifying a file name will cause the first
\# line of that file to be used as the name. The Debian default
\# is /etc/mailname.
\#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
\# appending .domain is the MUA's job.
append_dot_mydomain = no
\# Uncomment the next line to generate "delayed mail" warnings
\#delay_warning_time = 4h
readme_directory = no
\# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
\# fresh installs.
compatibility_level = 2
\# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.a-lec.org/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.a-lec.org/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_protocols=!SSLv2,!SSLv3
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_cert_file=/etc/letsencrypt/live/mail.a-lec.org/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/mail.a-lec.org/privkey.pem
smtp_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
\# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
\# information on enabling SSL in the smtp client.
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
myhostname = mail.a-lec.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, a-lec.org, mail.a-lec.org, localhost, os-k.eu
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.169.1.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
home_mailbox = Maildir/
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_command =
\## DKIM
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sock
\## Ralentissement pour les serveurs problématiques
transport_maps = hash:/etc/postfix/transport
slow_destination_concurrency_limit = 3
slow_destination_rate_delay = 3s
maximal_queue_lifetime = 1d
\## Forwarding pour mails du bureau
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
message_size_limit = 524288000
smtp_helo_name = $mydomain
</details>
### Configuration serveur web (nginx)
<details>
server {
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
listen 443 ssl proxy_protocol;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/mail.a-lec.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mail.a-lec.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# Add index.php to the list if you are using PHP
root /var/www/html/roundcube;
server_name mail.a-lec.org;
client_max_body_size 100M;
# Add index.php to the list if you are using PHP
index index.html index.htm index.php;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?q=$uri&$args;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ^~ /data {
deny all;
}
}
</details>

View File

@ -1,130 +0,0 @@
## Machine virtuelle TOOT
Cette machine est destinée à accueillir l'instance Mastodon de l'association.
### Matériel virtuel
CPU : 3
RAM : 2048 Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Mail Transfer Agent : `postfix`
Base do donnée : PostgreSQL
Serveur Web: NGINX
### Caractéristiques notables
Domaine : toot.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.173
Adresse ipv6 publique : 2001:910:1021::173
### Comptes
Administrateur: admin
Modérateurs: neox, echolib
Ouverture de compte: tout membre de l'association
### Visibilité
Instance publique
### Configuration serveur web (nginx)
<details>
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name toot.a-lec.org;
return 302 https://$host$request_uri;
}
server {
listen 443 ssl proxy_protocol default_server;
listen [::]:443 ssl http2 default_server;
server_name toot.a-lec.org;
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
ssl_certificate /etc/letsencrypt/live/toot.a-lec.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/toot.a-lec.org/privkey.pem;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
keepalive_timeout 70;
sendfile on;
client_max_body_size 0;
root /home/mastodon/live/public;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
add_header Strict-Transport-Security "max-age=31536000";
location / {
try_files $uri @proxy;
}
location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
add_header Cache-Control "public, max-age=31536000, immutable";
try_files $uri @proxy;
}
location @proxy {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy "";
proxy_pass_header Server;
proxy_pass http://127.0.0.1:3000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
location /api/v1/streaming {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy "";
proxy_pass http://127.0.0.1:4000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
error_page 500 501 502 503 504 /500.html;
}
</details>

View File

@ -1,25 +0,0 @@
## Machine virtuelle TOOTEST
Cette machine est destinée à accueillir l'instance Mastodon de test.
### Matériel virtuel
CPU : x
RAM : xxx Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Mail Transfer Agent : `postfix`
Base do donnée : PostgreSQL
Serveur Web: NGINX
### Caractéristiques notables
Domaine : toot.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.232
Adresse ipv6 publique : 2001:910:1021::232

View File

@ -1,117 +0,0 @@
## Machine virtuelle WWW
Cette machine est destinée à accueillir le site web de l'association
### Matériel virtuel
CPU : 1
RAM : 1000 Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Mail Transfer Agent : `postfix`
Serveur http : `nginx`
Gestionnaire FastCGI : `php-fpm` version 7.4
### Caractéristiques notables
Domaine : www.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.188
Adresse ipv6 publique : 2001:910:1021::188
### Configuration du serveur web (nginx)
<details>
server {
set_real_ip_from 192.169.1.1;
real_ip_header proxy_protocol;
# SSL configuration
#
listen 443 ssl proxy_protocol default_server;
listen [::]:443 ssl default_server;
root /var/www/html;
ssl_certificate /etc/letsencrypt/live/www.a-lec.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.a-lec.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# Add index.php to the list if you are using PHP
index index.html index.htm index.php;
server_name www.a-lec.org;
location /.well-known/host-meta {
default_type 'application/xrd+xml';
add_header Access-Control-Allow-Origin '*' always;
}
location /.well-known/host-meta.json {
default_type 'application/jrd+json';
add_header Access-Control-Allow-Origin '*' always;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ $uri.html $uri/index.php?q=$uri&$args =404;
}
ssi on;
ssi_last_modified on;
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
listen [::]:80;
server_name www.a-lec.org;
return 302 https://www.a-lec.org$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name a-lec.org;
return 302 https://www.a-lec.org$request_uri;
}
server {
listen 443 ssl proxy_protocol;
listen [::]:443 ssl;
server_name a-lec.org;
return 302 https://www.a-lec.org$request_uri;
ssl_certificate /etc/letsencrypt/live/a-lec.org-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/a-lec.org-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
</details>

View File

@ -1,24 +0,0 @@
## Machine virtuelle XMPP
Cette machine est destinée à accueillir le service XMPP
### Matériel virtuel
CPU : 1
RAM : 1000 Mio
Stockage de masse : 50 Gio
### Logiciel
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `git`, `tig`, `screen`
Mail Transfer Agent : `postfix`
Serveur XMPP : `ejabberd`
### Caractéristiques notables
Domaine : xmpp.a-lec.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 interne : 192.168.1.211
Adresse ipv6 publique : 2001:910:1021::211

View File

@ -1,50 +0,0 @@
## Accès aux serveurs physiques de l'infrastructure
### Configuration SSH côté infra
Pour un administrateur d'infrastructure, l'accès aux serveurs de l'infra se fait sur le compte sudoer `admin666` via le compte `cominfra`, authentifié par clé SSH.
Pour qu'un nouvel administrateur puisse accéder aux serveurs, il faut :
- Sur `mother`, ajouter la clé publique (ssh) du nouvel admin dans `/home/cominfra/.ssh/authorized_keys` et `/home/admin666/.ssh/authorized_keys`
- Sur `aunt`, ajouter la clé publique (ssh) du nouvel admin dans `/home/cominfra/.ssh/authorized_keys` et `/home/admin666/.ssh/authorized_keys`
### Configuration SSH client
host mother.libre-en-communs.org
User cominfra
Port 222
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
host mother666.libre-en-communs.org
User admin666
Hostname mother.libre-en-communs.org
Port 222
ProxyCommand ssh -q -W %h:%p mother.libre-en-communs.org
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
host aunt.libre-en-communs.org
User cominfra
Port 223
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
host aunt666.libre-en-communs.org
User admin666
Hostname aunt.libre-en-communs.org
Port 223
ProxyCommand ssh -q -W %h:%p aunt.libre-en-communs.org
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
### Procédure de connexion avec config dans ~/.ssh/config
Le nouvel admin n'a plus qu'à utiliser `ssh mother666.libre-en-communs.org` pour accéder au serveur `mother`
### Procédure de connexion sans config
Le nouvel admin peut utiliser `ssh -i 'CLE_PRIV' -J cominfra@mother.libre-en-communs.org:222 admin666@localhost -p 222` pour accéder au serveur `mother`
### Accès aux machines virtuelles
Si besoin, l'administrateur d'infrastructure peut accéder aux machines virtuelles qui tournent sur les serveurs, et ce depuis le compte `admin666` de n'importe quel serveur. Il suffira d'utiliser la commande `ssh <nom de machine>`.
Par exemple, pour accéder à la machine `dns` : `ssh dns`

View File

@ -1,76 +0,0 @@
## Accès aux machines virtuelles de l'infrastructure
### Configuration SSH côté infra
En règle générale, l'accès aux machines virtuelles ne se fait pas directement. Il faut passer par `mother` ou `aunt`.
Pour qu'un nouvel administrateur puisse accéder à des machines, il faut :
- Sur `mother` ou `aunt`, ajouter la clé publique (ssh) du nouvel admin dans `/home/cominfra/.ssh/authorized_keys`
- Sur chaque machine virtuelle concernée, ajouter la clé publique (ssh) du nouvel admin dans `/home/admin666/.ssh/authorized_keys`
Note : en IPV6, la connexion directe peut être possible. A voir au cas par cas.
**Attention** : les noms de machines virtuelles de Chalec contiennent ".chalec.org" en suffixe.
### Configuration SSH client
Soit en passant par `mother`
host mother.libre-en-communs.org
User cominfra
Port 222
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
match host *.a-lec.org
User admin666
Hostname %h
Port 22
ProxyJump mother.libre-en-communs.org
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
host *.chalec.org
User admin666
Port 22
ProxyJump mother.libre-en-communs.org
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
Ou bien en passant par `aunt`
host aunt.libre-en-communs.org
User cominfra
Port 223
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
match host *.a-lec.org
User admin666
Hostname %h
Port 22
ProxyJump aunt.libre-en-communs.org
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
host *.chalec.org
User admin666
Port 22
ProxyJump aunt.libre-en-communs.org
SendEnv GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
Pour fixer les variables Git directement dans la conf, ajouter un `SetEnv` avant `SendEnv` :
```
SetEnv GIT_AUTHOR_NAME="Moi" GIT_AUTHOR_EMAIL="moncourriel"
```
Note : avoir les deux configurations peut être utile en cas de panne de l'un ou l'autre des serveurs.
### Procédure de connexion avec config dans ~/.ssh/config
Le nouvel admin n'a plus qu'à utiliser `ssh NOM_DE_VM.a-lec.org` pour accéder à la machine virtuelle
### Procédure de connexion sans config
Le nouvel admin peut utiliser au choix :
- `ssh -i 'CLE_PRIV' -J cominfra@mother.libre-en-communs.org:222 admin666@NOM_DE_VM.a-lec.org -p 22`
- `ssh -i 'CLE_PRIV' -J cominfra@aunt.libre-en-communs.org:223 admin666@NOM_DE_VM.a-lec.org -p 22`

View File

@ -1,40 +0,0 @@
# Création d'une nouvelle machine physique
Le but est d'intégrer une nouvelle machine physique dans le SI.
Configurer la machine :
- installer une Debian stable ;
- premier compte : admin666,
- la mettre à jour ;
Remplacer le noyau par Linux-libre-lts :
- TODO
Installer les paquets de base :
```
sudo apt install etckeeper mollyguard tig lm-sensors fancontrol screen emacs-nox vrms needrestart iotop htop curl ncdu iptraf tig unzip
```
Mettre l'IPV6 statique à l'image de l'IPV4 choisie :
- éditer ̀`/etc/network/interfaces`.
Nommer la machine :
```
sudo hostnamectl set-hostname NOM
```
Configurer le courriel :
- TODO
Configuration du routage :
- aller sur https://routeur.libre-en-communs.org/cgi-bin/luci/admin/network/dhcp
- onglet Static Leases, bouton Add :
- Hostname : nom de PM en domaine,
- MAC : dispo sur la machine,
- IPv4 : choisir entre :
- un 192.168.0.x pour infra générale (si pas un service que des commissions vont utiliser),
- un 192.168.1.x pour infra,
- un 192.168.2.x pour Chalec,
- valider les changements.

View File

@ -1,43 +0,0 @@
# Création d'une nouvelle machine virtuelle
- Creation de la VM par clonage de generic ou generic.chalec.org
- Aller sur https://routeur.libre-en-communs.org/cgi-bin/luci/admin/network/dhcp
+ Onglet Static Leases, bouton Add
- Hostname : nom de VM en domaine
- MAC : dispo dans virt-manager
- IPv4 : choisir entre :
+ un 192.168.0.x pour infra générale
+ un 192.168.1.x pour infra
+ un 192.168.2.x pour chalec
+ Valider les changements
- sudo virsh console NOM_DE_VM
+ login = admin666
+ sudo nano /etc/network/interfaces
- Changer l'IPv6 statique à l'image de l'IPv4 choisie
- Changer les hostnames (chaque nano signifie qu'il faut remplacer le generic ou generic.chalec.org par NOM_DE_VM)
+ sudo hostnamectl set-hostname NOM_DE_VM
+ sudo nano /etc/postfix/virtual && sudo postmap /etc/postfix/virtual
+ sudo nano /etc/mailname
+ sudo nano /etc/postfix/main.cf && sudo postfix reload
+ sudo reboot

View File

@ -1,30 +0,0 @@
# Migration de machines virtuelles entre machines physiques
Il y a plusieurs méthodes de migration de machines virtuelles en mother et aunt
## Migration "normale" d'une machine par son nom
Pour migrer une machine de mother à aunt :
/opt/sharedfs/outils/migrate_to_aunt.sh NOM_DE_VM
Pour migrer une machine de aunt à mother :
/opt/sharedfs/outils/migrate_to_mother.sh NOM_DE_VM
## Migration "normale" d'un groupe de machine par nombre
Pour migrer X machines de mother vers aunt :
/opt/sharedfs/outils/migrate_many_to_aunt.sh X
Pour migrer X machines de aunt vers mother :
/opt/sharedfs/outils/migrate_many_to_mother.sh X
## Migration d'urgence (P2P) de aunt vers mother (sans DRBD)
Pour migrer une machine de aunt vers mother lorsque DRBD ne fonctionne pas :
/opt/sharedfs/outils/migrate_to_mother_p2p.sh NOM_DE_VM

View File

@ -1,45 +0,0 @@
# Redémarrages de machines physiques
## Annoncer le downtime
Il faut annoncer le downtime sur isengard (cf [la procédure dédiée](supervision.md#activation-dun-downtime)).
## Migrer les machines virtuelles présentes sur l'hôte physique vers un autre hôte
Utiliser les instructions de la [procédure dédiée](migration_vm.md).
## Lancer le redémarrage
Lancer le redémarrage avec :
sudo systemctl start kexec.target
*Ne pas utiliser la commande reboot sauf nécessité absolue*
*Ne pas utiliser la commande shutdown sauf nécessité absolue*
## Vérifier l'état de DRBD après redémarrage
Avec la commande :
sudo cat /proc/drbd
Et vérifier que l'état est _cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate_
## Monter la partition DRBD
Avec la commande :
sudo mount /opt/sharedfs
## Vérifier le bon fonctionnement
Avec :
sudo systemctl status
en vérifiant que le statut est _running_ et qu'aucun job n'est en fail.
## Migrer les machines virtuelles depuis l'autre hôte vers le présent hôte physique à présent prêt
Utiliser les instructions de la [procédure dédiée](migration_vm.md).

View File

@ -1,22 +0,0 @@
# Redémarrages de machines virtuelles
## Annoncer le downtime
Il faut annoncer le downtime sur isengard (cf [la procédure dédiée](supervision.md#activation-dun-downtime)).
## Lancer le redémarrage
Lancer le redémarrage avec :
sudo reboot
`mollyguard` va demander de confirmer le nom d'hôte de la machine à redémarrer.
## Vérifier le bon fonctionnement après redémarrage
Avec :
sudo systemctl status
en vérifiant que le statut est _running_ et qu'aucun job n'est en fail.

View File

@ -1,40 +0,0 @@
# Gestion des sauvegardes l'infrastructure
Pour les sauvegardes, nous utilisons au sein de notre infrastructure les logiciels suivants :
- rsync pour les machines physiques
- [virt-backup](https://pypi.org/project/virt-backup/) pour les machines virtuelles
- les [scripts d'administration](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale)
Les sauvegardes sont configurées comme indiqués dans le [dépôt dédié](https://git.a-lec.org/a-lec/commissions/infrastructure/sauvegardes)
## Sauvegarde des machines virtuelles
Sur une des machines physiques (ex: mother ou aunt).
### Lister les sauvegardes
Pour lister le résumé des sauvegardes :
sudo virt-backup list
Pour lister les sauvegardes d'une machine particulière :
sudo virt-backup list -D NOM_DE_VM
### Pour réaliser une sauvegarde de toutes les machines d'un hôte physique
Il n'est pas possible de réaliser une sauvegarde d'une machine isolée.
sudo virt-backup backup
### Pour restorer une sauvegarde
Nous avons un script spécial pour restaurer une sauvegarde :
sudo /opt/sharedfs/restore.sh NOM_DE_VM DATE_DE_SAUVEGARDE NOM_DE_DISQUE CHEMIN_CIBLE
### Nettoyer les sauvegardes
sudo virt-backup clean

View File

@ -1,210 +0,0 @@
# Installation de la supervision sur une machine virtuelle
## Générer un ticket sur isengard.libre-en-communs.org
sudo icinga2 pki ticket --cn NOM_DE_DOMAINE_DE_VM
On obtient un ticket à noter dans l'issue. Il sera redemandé plus tard.
## En SSH sur la machine virtuelle, installer l'agent de supervision
sudo apt install icinga2 monitoring-plugins monitoring-plugins-contrib
## Modifier la configuration de la sonde de mémoire vive (pour corriger un bug)
<details>
<summary>/usr/share/icinga2/include/plugins-contrib.d/operating-system.conf</summary>
object CheckCommand "mem" {
command = [ PluginContribDir + "/check_memory" ]
arguments = {
"-u" = {
set_if = "$mem_used$"
description = "Check USED memory"
}
"-f" = {
set_if = "$mem_free$"
description = "Check FREE memory"
}
"-C" = {
set_if = "$mem_cache$"
description = "Count OS caches as FREE memory"
}
"-w" = {
value = "$mem_warning$"
description = "Percent free/used when to warn"
}
"-c" = {
value = "$mem_critical$"
description = "Percent free/used when critical"
}
}
vars.mem_used = false
vars.mem_free = false
vars.mem_cache = false
}
</details>
## Connecter notre agent au serveur de supervision
sudo icinga2 node wizard
<details>
<summary>On réalise la configuration interactive suivante:</summary>
Welcome to the Icinga 2 Setup Wizard!
We will guide you through all required configuration details.
Please specify if this is an agent/satellite setup ('n' installs a master setup) [Y/n]:
Starting the Agent/Satellite setup routine...
Please specify the common name (CN) [NOM_DE_DOMAINE_DE_VM]:
Please specify the parent endpoint(s) (master or satellite) where this node should connect to:
Master/Satellite Common Name (CN from your master/satellite node): isengard.libre-en-communs.org
Do you want to establish a connection to the parent node from this node? [Y/n]:
Please specify the master/satellite connection information:
Master/Satellite endpoint host (IP address or FQDN): isengard.libre-en-communs.org
Master/Satellite endpoint port [5665]:
Add more master/satellite endpoints? [y/N]:
Parent certificate information:
Version: 3
Subject: CN = isengard.libre-en-communs.org
Issuer: CN = Icinga CA
Valid From: Dec 9 14:36:07 2021 GMT
Valid Until: Dec 5 14:36:07 2036 GMT
Serial: c4:3f:53:b2:cf:09:f7:b5:2e:88:39:03:e9:96:c8:fc:99:a1:ca:3a
Signature Algorithm: sha256WithRSAEncryption
Subject Alt Names: isengard.libre-en-communs.org
Fingerprint: 54 78 22 83 24 22 3A A7 FD 00 01 E4 10 67 71 B6 CA 3E A2 71 93 63 F8 64 29 E9 45 1F D1 35 A9 95
Is this information correct? [y/N]: y
Please specify the request ticket generated on your Icinga 2 master (optional).
(Hint: # icinga2 pki ticket --cn 'NOM_DE_DOMAINE_DE_VM'): INSERER_NUMERO_DE_TICKET_ICI
Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
Accept config from parent node? [y/N]: y
Accept commands from parent node? [y/N]: y
Reconfiguring Icinga...
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
Local zone name [NOM_DE_DOMAINE_DE_VM]:
Parent zone name [master]:
Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]:
Do you want to disable the inclusion of the conf.d directory [Y/n]:
Disabling the inclusion of the conf.d directory...
Done.
Now restart your Icinga 2 daemon to finish the installation!
</details>
## Créer le fichier de zone pour la nouvelle machine dans isengard.libre-en-communs.org
<details>
<summary>/etc/icinga2/zones.d/master/NOM_DE_DOMAINE_DE_VM.conf</summary>
object Endpoint "NOM_DE_DOMAINE_DE_VM" {
}
object Zone "NOM_DE_DOMAINE_DE_VM" {
endpoints = [ "NOM_DE_DOMAINE_DE_VM" ]
parent = "master"
}
object Host "NOM_DE_DOMAINE_DE_VM" {
import "generic-host"
address = "NOM_DE_DOMAINE_DE_VM"
address6 = "NOM_DE_DOMAINE_DE_VM"
vars.os = "GNU/Linux"
vars.client_endpoint = name
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
}
</details>
# Interface web d'Isengard
Site web : https://isengard.libre-en-communs.org/
## Activation d'un downtime
Downtimer :
- Menu gauche > Overview > Hosts
- sélectionner la vm visée
- partie droite > Schedule downtime
- Comment : mettre la raison du downtime, exemple : reboot noyal
- End time : par défaut 1h
- All services : coché
- Child Hosts : Schedule triggered downtime for all child hosts (/!\ utile ?)
- cliquer sur Schedule downtime
## Ajout d'une entrée de menu pour ses vm
Ajout :
- Menu gauche > Overview > Hosts ;
- sélectionner les vm désirées (Ctrl + clique gauche)
- partie droite > menu > chevron bas (à droite de History) > Add to menu
- Name : mettre le nom qui apparaîtra dans le menu
- Target : Single Column
- cliquer Save Changes
## Ajout d'une entrée de menu ses services
Ajout :
- Menu gauche > Overview > Services ;
- cliquer sur l'icone filtre à droite de la zone de recherche
- première case : Host (Case insensitive)
- deuxième case : =
- troisième case : le nom de votre vm, exemple : audio.chalec.org
- cliquer sur + et sélectionner OR
- recommencer autant de fois que voulu
- cliquer sur Apply
- menu du haut > chevron bas (à droite de Service) > Add to menu
- Name : mettre le nom qui apparaîtra dans le menu
- Target : Single Column
- cliquer Save Changes
## Éditer une entrée personnalisée de menu
Pour éditer une entrée personnalisée du menu :
- Menu gauche > vous@a-lec.org > My account > Navigation
- dans la liste, cliquer sur l'entrée à éditer.
## Supprimer une entrée de menu personnalisée
Pour supprimer une entrée personnalisée du menu :
- Menu gauche > vous@a-lec.org > My account > Navigation
- dans la liste, cliquer sur l'entrée à éditer
- cliquer sur l'icone croix rouge ;
## Downtime de tous ses services en 2 clics
Prérequis : avoir créer une entrée personnalisée du menu pour ses vm.
Downtimer ses services :
- Menu gauche > entrée personnalisée de vos vm
- cliquer sur « Schedule downtimes »
- …

View File

@ -1,65 +1,62 @@
# Documentation de l'infrastructure logicielle et matérielle # Documentation de l'infrastructure logicielle et matérielle
### Documentation des serveurs et routeurs L'infrastructure informatique de Libre en Communs est répartie sur différents
sites dans le but d'éviter une centralisation trop importante. Ce travail de
décentralisation étant encore en cours, la présente documentation évolue encore.
- Serveur [mother](Serveurs/mother.md) Cette documentation est publiée sous licence libre (GNU FDL) à l'exception du
manuel de la carte-mère sur laquelle est basée notre infrastructure,
l'[**ASUS KGPE-D16**](divers/manuel_Asus_KGPN_D16.pdf).
- Serveur [aunt](Serveurs/aunt.md) ## Localisation de l'infrastructure
- Routeur [routeur](Serveurs/routeur.md) Les sites de l'infrastructure sont les lieux où Libre en Communs dispose de
machines physiques. Nous faisons une distinction entre _sites principaux_ et
_sites annexes_. Ces sites sont nommés selon leur localisation grossière.
### Documentation des machines virtuelles <img src="images/image_carte_infra.png" width="100%">
- Configuration de base de toutes les machines : [generic](Machines virtuelles/generic.md) ### Sites principaux
- Machine [dns](Machines virtuelles/dns.md) Les sites principaux sont :
- [Le Parc]() ;
- [Fontainebleau]().
- Machine [gestion](Machines virtuelles/gestion.md) Un site principal doit répondre à certains prérequis :
- il dispose d'au moins une baie au format _rack 19 pouces_ ;
- il accueille des machines physiques principales avec du [matériel éligible]() ;
- il comporte un routeur **nommé d'après le nom du site** (Par exemple, à
Fontainebleau, le routeur se nomme `fontainebleau`) ;
- il permet un accès à Internet fibré (FTTH) via une ligne dédiée souscrite auprès
d'un opérateur de la [FFDN]() ;
- il dispose d'un compteur électrique pour mesurer la consommation globale des
dispositifs.
- Machine [git](Machines virtuelles/git.md) ### Sites annexes
- Machine [mail](Machines virtuelles/mail.md) Les sites annexes sont :
- [Gisors]().
- Machine [toot](Machines virtuelles/toot.md) Un site annexe est un lieu pouvant accueillir des machines physiques simples
(format tour, par exemple).
- Machine [tootest](Machines virtuelles/tootest.md) Un site annexe n'est utilisable que pour des opérations non critiques et annexes
de l'infrastructure (ou secondaires/redondantes). Les conditions prérequises pour
un tel site sont plus souples mais il n'en demeure pas moins que les machines physiques
doivent être [éligibles]() et l'accès internet éthiquement acceptable.
- Machine [www](Machines virtuelles/www.md) ## Documentation générique
- Machine [xmpp](Machines virtuelles/xmpp.md) La gestion de l'infrastructure demande certaines opérations génériques qui ne
pas d'un site particulier. C'est notamment le cas pour les procédures
d'administration.
- Machine [audio](Machines virtuelles/audio.md) Parmi ces procédures :
- [Accès aux serveurs physiques](procédures/acces_serveurs.md)
### Documentation des procédures - [Accès aux machines virtuelles](procédures/acces_vm.md)
- [Création de machines virtuelles](procédures/création_vm.md)
- [Accès aux serveurs physiques](Procédures/acces_serveurs.md) - [Mise en place de la supervision](procédures/supervision.md)
- [Migration des machines virtuelles](procédures/migration_vm.md)
- [Accès aux machines virtuelles](Procédures/acces_vm.md) - [Redémarrage des machines virtuelles](procédures/reboot_vm.md)
- [Redémarrage des machines physiques](procédures/reboot_physique.md)
- [Création de machines virtuelles](Procédures/création_vm.md) - [Gestion des sauvegardes](procédures/sauvegardes.md)
- [Mise en place de la supervision](Procédures/supervision.md)
- [Migration des machines virtuelles](Procédures/migration_vm.md)
- [Redémarrage des machines virtuelles](Procédures/reboot_vm.md)
- [Redémarrage des machines physiques](Procédures/reboot_physique.md)
- [Gestion des sauvegardes](Procédures/sauvegardes.md)
### Divers
- [Manuel des cartes-mères Asus KGPE-D16](Divers/manuel_Asus_KGPN_D16.pdf)
## Vue d'ensemble
<img src="images/image0.png" width="100%">
## Infrastructure critique
<img src="images/vm_critiques.png" width="100%">
## Schéma de stockage
<img src="images/stockage.png" width="100%">

View File

View File

@ -1,32 +0,0 @@
# Plan de nommage des routeurs
# Étude
À l'origine :
- routeur sur le site La Varenne
- routeur2 sur le site Fontainebleau
Cible :
- 1 routeur sur le site Le Parc
- 1 routeur sur le site Fontainebleau
- 1 routeur sur le site Gisors
Propositions :
- simpliste :
- routeur, routeur1, routeur2
- noms de nains de Tolkien (petits mais puissants et robustes) :
- bifur (La Varenne), bofur (Fontainebleau), balin (Gisors)
- ??? (LaVarenne/LeParc), fili (Fontainebleau), gimli (Gisors)
- géographiques (coutumier) :
- lavarenne, fontainebleau, gisors, leparc
- géographiques abrégés sur 4 lettres :
- lava, font, giso, lepa
- géographique sur 3 lettre + numéro du département
- lep94, fon77
Notes :
- assertion que 1 seul routeur par site ;
- assertion que 1 seul site par ville ;
- éviter les abréviations.
# Le choix
Choix de suivre la solution coutimière et pratique du nom géographique : lavarenne, fontainebleau, gisors, leparc…

View File

@ -1,204 +0,0 @@
# Serveur physique `aunt` : serveur-mère de l'infrastructure de Libre en Communs
`aunt` est un serveur physique hébergé au local de l'association.
Avec `mother` elles forment le centre névralgique de l'infrastructure de l'association.
### Matériel
Carte mère : 1 × Asus KGPN-D16 Rev 1.03G
CPU : 2 × AMD Opteron 6282SE
RAM : *(à compléter) *
Alimentation : *(à compléter)*
Onduleur : 1 × EATON Ellipse PRO 1200 VA
Casier : 1 × Inter-Tech IPC 4U-4129-N SSI-EEB (Rack)
Stockage de masse : 2 × Samsung SSD 870 QVO 4To
### Logiciel
Micro-programme : Coreboot 4.6 + SeaBIOS, sans blob privateur
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Virtualisation : QEMU/KVM (`libvirt`)
Gestion du onduleur : NUT/UPS
Audit des paquets mensuel : `vrms`
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `tig`, `lm-sensors`, `fancontrol`, `screen`
Mail Transfer Agent : `postfix`
Réplication de stockage (vm) : `drbd`, `ocfs2`
### Caractéristiques notables
Domaine : aunt.libre-en-communs.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 locale : 192.168.1.206
Adresse ipv6 publique : 2001:910:1021::3
#### Configuration réseau
##### /etc/network/interfaces
<details>
# Connexion avec la machine mother
allow-hotplug ens10
iface ens10 inet static
address 192.169.254.3
post-up /usr/bin/ip link set ens10 mtu 9000
# Connexion avec le routeur (bridge sur ens10 avec les VM présentes)
allow-hotplug ens9
auto br0
iface br0 inet dhcp
bridge_ports ens9
iface br0 inet6 static
bridge_ports ens9
address 2001:910:1021::3/128
gateway 2001:910:1021::1
bridge_stp off # désactivation du Spanning Tree Protocol
bridge_waitport 0 # suppression du délai avant que le port soit disponible pour le bridge
bridge_fd 0 # suppression de délai avant que le forwarding du bridge soit établi
</details>
### Configuration SSH
#### /etc/ssh/sshd_config
<details>
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Port 223
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
PubkeyAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding no
PrintMotd no
TCPKeepAlive yes
PermitTunnel yes
AcceptEnv LANG LC_* GIT_*
Subsystem sftp /usr/lib/openssh/sftp-server
Match Group ssh-pubkey
PubkeyAuthentication yes
Match Group ssh-login
PasswordAuthentication yes
PubkeyAuthentication yes
Match Address 127.0.0.*
PubkeyAuthentication yes
Match Address 192.169.254.2
PubkeyAuthentication yes
</details>
### Configuration DRBD
#### /etc/drbd.d/drbd1.res
<details>
resource drbd1 {
meta-disk internal;
device /dev/drbd1;
startup {
wfc-timeout 20;
become-primary-on both;
}
net {
verify-alg sha256;
allow-two-primaries yes;
max-buffers 10k;
max-epoch-size 10k;
unplug-watermark 32;
sndbuf-size 0;
rcvbuf-size 0;
}
disk {
on-io-error detach;
#no-disk-flushes;
#no-disk-barrier;
c-plan-ahead 10;
c-fill-target 150M;
c-min-rate 10k;
c-max-rate 500M;
}
on mother { # hostname must match `uname -n` output
disk /dev/md1; # Logical Volume on the provided host
address 192.169.254.2:7789; # IP Address to be used to connect to the node with port
}
on aunt { # hostname must match `uname -n` output
disk /dev/md1; # Logical Volume on the provided host
address 192.169.254.3:7789; # IP Address to be used to connect to the node with port
}
}
</details>
#### /etc/ocfs2/cluster.conf
<details>
cluster:
name = sharedfs
heartbeat_mode = local
node_count = 2
node:
cluster = sharedfs
number = 0
ip_port = 7777
ip_address = 192.169.254.3
name = aunt
node:
cluster = sharedfs
number = 1
ip_port = 7777
ip_address = 192.169.254.2
name = mother
</details>
### Configuration MTA
#### /etc/postfix/transport
a-lec.org :
* discard:
#### /etc/postfix/virtual
@localhost admin@a-lec.org
@aunt.libre-en-communs.org admin@a-lec.org

View File

@ -1,203 +0,0 @@
# Serveur physique `mother` : serveur-mère de l'infrastructure de Libre en Communs
`mother` est un serveur physique hébergé au local de l'association.
Avec `aunt` elles forment le centre névralgique de l'infrastructure de l'association.
### Matériel
Carte mère : 1 × Asus KGPN-D16 Rev 1.03G
CPU : 2 × AMD Opteron 6282SE
RAM : 4 × Crucial RDIMM 16Go CT2K16G3ERSLD4160B
Alimentation : 1 × FSP Twins PRO 500W (500W ATX12V / EPS12V 80PLUS Gold)
Onduleur : 1 × EATON Ellipse PRO 1600 VA
Casier : 1 × Inter-Tech IPC 4U-4129-N SSI-EEB (Rack)
Stockage de masse : 2 × Samsung SSD 870 QVO 2To
### Logiciel
Micro-programme : Coreboot 4.6 + SeaBIOS, sans blob privateur
Système d'exploitation : Debian GNU/Linux-libre 11 (Bullseye)
Noyau : Linux-libre LTS (`linux-libre-lts` des dépôts https://linux-libre.fsfla.org)
Virtualisation : QEMU/KVM (`libvirt`)
Gestion du onduleur : NUT/UPS
Audit des paquets mensuel : `vrms`
Sécurités de la maintenance : `etckeeper`, `mollyguard`, `tig`, `lm-sensors`, `fancontrol`, `screen`
Mail Transfer Agent : `postfix`
Réplication de stockage (vm) : `drbd`, `ocfs2`
### Caractéristiques notables
Domaine : mother.libre-en-communs.org
Adresse ipv4 publique : 80.67.176.33
Adresse ipv4 locale : 192.168.1.108
Adresse ipv6 publique : 2001:910:1021::2
#### Configuration réseau
##### /etc/network/interfaces
<details>
# Connexion avec la machine aunt
allow-hotplug ens9
iface ens9 inet static
address 192.169.254.2
post-up /usr/bin/ip link set ens9 mtu 9000
# Connexion avec le routeur (bridge sur ens10 avec les VM présentes)
allow-hotplug ens10
auto br0
iface br0 inet dhcp
bridge_ports ens10
iface br0 inet6 static
bridge_ports ens10
address 2001:910:1021::2/128
gateway 2001:910:1021::1
bridge_stp off # désactivation du Spanning Tree Protocol
bridge_waitport 0 # suppression du délai avant que le port soit disponible pour le bridge
bridge_fd 0 # suppression de délai avant que le forwarding du bridge soit établi
</details>
### Configuration SSH
#### /etc/ssh/sshd_config
<details>
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Port 222
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
PubkeyAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding no
PrintMotd no
TCPKeepAlive yes
PermitTunnel yes
AcceptEnv LANG LC_* GIT_*
Subsystem sftp /usr/lib/openssh/sftp-server
Match Group ssh-pubkey
PubkeyAuthentication yes
Match Group ssh-login
PasswordAuthentication yes
PubkeyAuthentication yes
Match Address 127.0.0.*
PubkeyAuthentication yes
Match Address 192.169.254.3
PubkeyAuthentication yes
</details>
### Configuration DRBD
#### /etc/drbd.d/drbd1.res
<details>
resource drbd1 {
meta-disk internal;
device /dev/drbd1;
startup {
wfc-timeout 20;
become-primary-on both;
}
net {
verify-alg sha256;
allow-two-primaries yes;
max-buffers 10k;
max-epoch-size 10k;
unplug-watermark 32;
sndbuf-size 0;
rcvbuf-size 0;
}
disk {
on-io-error detach;
#no-disk-flushes;
#no-disk-barrier;
c-plan-ahead 10;
c-fill-target 150M;
c-min-rate 10k;
c-max-rate 500M;
}
on mother { # hostname must match `uname -n` output
disk /dev/md1; # Logical Volume on the provided host
address 192.169.254.2:7789; # IP Address to be used to connect to the node with port
}
on aunt { # hostname must match `uname -n` output
disk /dev/md1; # Logical Volume on the provided host
address 192.169.254.3:7789; # IP Address to be used to connect to the node with port
}
}
</details>
#### /etc/ocfs2/cluster.conf
<details>
cluster:
name = sharedfs
heartbeat_mode = local
node_count = 2
node:
cluster = sharedfs
number = 0
ip_port = 7777
ip_address = 192.169.254.3
name = aunt
node:
cluster = sharedfs
number = 1
ip_port = 7777
ip_address = 192.169.254.2
name = mother
</details>
### Configuration MTA
#### /etc/postfix/transport
a-lec.org :
* discard:
#### /etc/postfix/virtual
@localhost admin@a-lec.org
@mother.libre-en-communs.org admin@a-lec.org

File diff suppressed because it is too large Load Diff