Changement total de l'infra réseau

This commit is contained in:
Pierre Coimbra
2020-05-02 13:55:38 +02:00
parent c32b5f161c
commit 6df6fca32b
36 changed files with 473 additions and 608 deletions

View File

@@ -5,7 +5,7 @@ Faire les commandes dans `/home/hasync/ssl`
## Création du premier certificat client
### Création du certificat serveur
```
```shell
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
```
@@ -24,7 +24,7 @@ Email Address []:contact@krhacken.org
### Création de la clé et du CSR du client
```
```shell
openssl req -newkey rsa:2048 -nodes -keyout client.key -out client.csr
```
@@ -45,7 +45,7 @@ A challenge password []:
An optional company name []:
```
```
```shell
openssl x509 -req -days 3650 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
openssl req -newkey rsa:2048 -nodes -keyout haproxy.key -out haproxy.csr
```
@@ -69,18 +69,18 @@ A challenge password []:
An optional company name []:
```
```
```shell
openssl x509 -req -days 365 -in haproxy.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out haproxy.crt
```
### Création du certificat pour le navigateur
```
```shell
openssl pkcs12 -export -out haproxy_user.pfx -inkey haproxy.key -in haproxy.crt -certfile ca.crt
```
## Génération d'un second certificat
```
```shell
openssl req -newkey rsa:2048 -nodes -keyout haproxy2.key -out haproxy2.csr
```
### Spécification du certificat Client
@@ -103,7 +103,7 @@ An optional company name []:
### Certificat pour le navigateur
```
```shell
openssl x509 -req -days 365 -in haproxy2.csr -CA ca.crt -CAkey ca.key -set_serial 03 -out haproxy2.crt
openssl pkcs12 -export -out haproxy_user2.pfx -inkey haproxy2.key -in haproxy2.crt -certfile ca.crt
```
@@ -112,7 +112,7 @@ Il faut maintenant que vous ajoutiez ce certificat à vos certificats Firefox
### Copie des certificats
On copie le certificat pour HAProxy
```
```shell
cp ca.crt /home/hasync/pve.crt
scp ca.crt root@10.0.0.7:/home/hasync/pve.crt
```

View File

@@ -6,22 +6,19 @@ Cela consiste en la gestion des flux post firewall.
Deux conteneurs Debian 10 identiques, un sur Alpha l'autre sur Bêta avec deux interfaces :
Numéro 102 (Alpha)
#### Trois interfaces
- eth0 : vmbr1 / VLAN 10 / IP 10.0.0.6 / GW 10.0.0.254
- eth1 : vmbr1 / VLAN 20 / IP 10.0.1.1 / GW 10.0.1.254
- eth2 : vmbr2 / VLAN 100 / IP 10.1.0.102 / GW 10.1.0.254
#### Interface réseau
- eth0 : vmbr1 / VLAN 10 / IP 10.0.0.5 / GW 10.0.0.254
Numéro 103 (Beta)
#### Trois interfaces
- eth0 : vmbr1 / VLAN 10 / IP 10.0.0.7 / GW 10.0.0.254
- eth1 : vmbr1 / VLAN 20 / IP 10.0.1.2 / GW 10.0.1.254
- eth2 : vmbr2 / VLAN 100 / IP 10.1.0.103 / GW 10.1.0.254
#### Interface réseau
- eth0 : vmbr1 / VLAN 10 / IP 10.0.0.6 / GW 10.0.0.254
### Le proxy
#### /etc/apt/apt.conf.d/01proxy
```
Acquire::http {
Proxy "http://10.0.2.252:9999";
Proxy "http://10.0.0.252:9999";
};
```
@@ -50,8 +47,8 @@ Voici les choix techniques faits afin de répondre à ces objectifs :
Afin de pouvoir faire des scp de manière automatique entre les deux conteneurs, il faut mettre en place une connexion ssh par clé en root entre les deux conteneurs.
Le procédé est le même, en voici les variantes :
- Sur Alpha le conteneur HAProxy aura comme IP 10.0.0.6
- Sur Beta le conteneur HAProxy aura comme IP 10.0.0.7
- Sur Alpha le conteneur HAProxy aura comme IP 10.0.0.5
- Sur Beta le conteneur HAProxy aura comme IP 10.0.0.6
### /etc/ssh/sshd_config
Remplacer la ligne concernée par
@@ -68,9 +65,9 @@ Utilisateur crée par le playbook Ansible
adduser hasync
ssh-keygen -o -a 100 -t ed25519 -f /root/.ssh/id_ed25519
Alpha : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.0.7
Alpha : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.0.6
Beta : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.0.6
Beta : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.0.5
```
### /etc/ssh/sshd_config
@@ -88,18 +85,18 @@ Il est maintenant possible de se connecter par clé entre les conteneurs
## Installation et configuration de HAProxy sur chaque node
Le procédé est le même, en voici les variantes :
- Sur Alpha le conteneur HAProxy aura comme IP 10.0.0.6
- Sur Beta le conteneur HAProxy aura comme IP 10.0.0.7
- Sur Alpha le conteneur HAProxy aura comme IP 10.0.0.5
- Sur Beta le conteneur HAProxy aura comme IP 10.0.0.6
### Installation
Faite par le playbook Ansible
```
```shell
apt-get update
apt-get install -y haproxy hatop certbot nginx psmisc
systemctl enable haproxy
systemctl enable nginx
```
```
```shell
rm /etc/nginx/sites-enabled/default
rm /etc/nginx/sites-available/default
rm /etc/letsencrypt/live/README
@@ -255,21 +252,21 @@ server {
ln -s /etc/nginx/sites-available/letsencrypt.conf /etc/nginx/sites-enabled/
```
### Démarrage des services
```
```shell
systemctl restart nginx.service
systemctl restart haproxy.service
```
## Mise en place de la haute disponibilité du load balanceur
Voilà la configuration que nous allons mettre en place :
- Sur Alpha le conteneur HAProxy aura comme IP 10.0.0.6
- Sur Beta le conteneur HAProxy aura comme IP 10.0.0.7
- L'IP virtuelle 10.0.0.8 sera attribuée en fonction de la disponibilité des load balanceur
- Sur Alpha le conteneur HAProxy aura comme IP 10.0.0.5
- Sur Beta le conteneur HAProxy aura comme IP 10.0.0.6
- L'IP virtuelle 10.0.0.7 sera attribuée en fonction de la disponibilité des load balanceur
- La node Alpha sera le master et la node Beta sera le Slave
### Installation (commune au deux nodes)
Faites par le playbook Ansible.
```
```shell
apt-get install -y keepalived
systemctl enable keepalived.service
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
@@ -293,7 +290,7 @@ vrrp_instance VI_1 {
virtual_router_id 51
priority 101 # 101 on master, 100 on backup
virtual_ipaddress {
10.0.0.8 # the virtual IP
10.0.0.7 # the virtual IP
}
track_script {
chk_haproxy
@@ -320,7 +317,7 @@ vrrp_instance VI_1 {
virtual_router_id 51
priority 100 # 101 on master, 100 on backup
virtual_ipaddress {
10.0.0.8 # the virtual IP
10.0.0.7 # the virtual IP
}
track_script {
chk_haproxy
@@ -332,7 +329,7 @@ systemctl restart keepalived
```
#### Vérification
Le retour de cette commande doit montrer l'adresse IP 10.0.0.8 sur Alpha
Le retour de cette commande doit montrer l'adresse IP 10.0.0.7 sur Alpha
```
ip a | grep -e inet.*eth0
```
@@ -346,17 +343,17 @@ certbot certonly --webroot -w /home/hasync/letsencrypt-requests/ -d sub.krhacken
```
Voici un script pour mettre en place les certificats Let's Encrypt au bon endroit qui s'occupe de propager les certificats sur l'autre conteneur (depuis Alpha vers Beta). Disponible dans `/root/install-certs.sh` si créer avec Ansible.
```
```bash
#!/bin/bash
if [ "$(ip a | grep -c "10.0.0.8")" -ge 1 ]; then
if [ "$(ip a | grep -c "10.0.0.7")" -ge 1 ]; then
ct_ip=$(ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1 | head -n 1 | tail -c2)
if [ $ct_ip = 6 ]
then
other_ip=10.0.0.7
other_ip=10.0.0.6
fi
if [ $ct_ip = 7 ]
then
other_ip=10.0.0.6
other_ip=10.0.0.5
fi
rm -f /etc/letsencrypt/live/README
rm -rf /etc/ssl/letsencrypt/*
@@ -375,17 +372,17 @@ Pour une question de simplicité d'administration, les certificats Let's Encrypt
### /home/hasync/renew.sh
Voilà un script d'automatisation à mettre sur les deux conteneurs. Déjà présent si installer avec Ansible.
```
```bash
#!/bin/bash
if [ "$(ip a | grep -c "10.0.0.8")" -ge 1 ]; then
if [ "$(ip a | grep -c "10.0.0.7")" -ge 1 ]; then
ct_ip=$(ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1 | head -n 1 | tail -c2)
if [ $ct_ip = 6 ]
then
other_ip=10.0.0.7
other_ip=10.0.0.6
fi
if [ $ct_ip = 7 ]
then
other_ip=10.0.0.6
other_ip=10.0.0.5
fi
certbot renew
rm -rf /etc/ssl/letsencrypt/*