Changement total de l'infra réseau
This commit is contained in:
@@ -4,24 +4,8 @@ Vous trouverez ici toute la documentation relative au fonctionnement et à la co
|
||||
Cela comprend les deux HAProxy, le serveur DNS et le proxy pour l'accès à internet des contenants.
|
||||
|
||||
## Réseau
|
||||
Les services DMZ devront avoir les interfaces réseau suivantes :
|
||||
Les services DMZ devront avoir l'interface réseau suivante :
|
||||
- Bridge Interne VLAN 10 (DMZ)
|
||||
- Bridge Admin VLAN 100 (ADMIN)
|
||||
|
||||
Pour HAProxy
|
||||
- Bridge Interne VLAN 20 (PROXY)
|
||||
- Bridge Interne VLAN 40 (CTF)
|
||||
|
||||
Pour Bind9
|
||||
- Bridge Interne VLAN 20 (PROXY)
|
||||
- Bridge Interne VLAN 30 (INT)
|
||||
- Bridge Interne VLAN 40 (CTF)
|
||||
|
||||
Pour Squid
|
||||
- Bridge Interne VLAN 20 (PROXY)
|
||||
- Bridge Interne VLAN 30 (INT)
|
||||
- Bridge Interne VLAN 40 (CTF)
|
||||
- Bridge Interne VLAN 50 (DIRTY)
|
||||
|
||||
# Table des matières
|
||||
1. [HAProxy](haproxy)
|
||||
|
||||
@@ -8,18 +8,15 @@ On conseille généralement de ne pas faire les deux sur un même serveur. En ef
|
||||
|
||||
## Le conteneur
|
||||
Numéro 107 (Beta)
|
||||
#### Trois interfaces
|
||||
- eth0 : vmbr1 / VLAN 10 / IP 10.0.0.253 / GW 10.0.0.254
|
||||
- eth1 : vmbr1 / VLAN 20 / IP 10.0.1.253 / GW 10.0.1.254
|
||||
- eth2 : vmbr1 / VLAN 30 / IP 10.0.2.253 / GW 10.0.2.254
|
||||
- eth3 : vmbr2 / VLAN 100 / IP 10.1.0.107 / GW 10.1.0.254
|
||||
|
||||
#### Interface réseau
|
||||
- eth0 : vmbr1 / VLAN 20 / IP 10.0.1.253 / GW 10.0.1.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";
|
||||
};
|
||||
```
|
||||
|
||||
@@ -77,45 +74,65 @@ logging {
|
||||
```
|
||||
|
||||
## Gestion par vue
|
||||
Pour savoir depuis quelle zone de notre réseau la requête est faites nous allons utiliser les vues de bind9 ainsi le serveur pourra renvoyer une IP différente en fonction de la zone.
|
||||
|
||||
Le serveur aura une pâte sur chaque zone comme décrit ci-dessous :
|
||||
- DMZ -> 10.0.0.253
|
||||
- PROXY -> 10.0.1.253
|
||||
- INT -> 10.0.2.253
|
||||
Pour savoir depuis quelle zone de notre réseau la requête est faites nous allons utiliser les vues de bind9 ainsi le serveur pourra renvoyer une IP différente en fonction de la zone. Bind choisi la zone du client en fonction de l'adresse IP source.
|
||||
|
||||
On définit deux zones DNS, une première, **front**, qui regroupe les zones DMZ et PROXY et une seconde, **back** qui regroupe les zones PROXY et INT.
|
||||
On définit quatres zones DNS, une première, **front**, pour la zones DMZ, une seconde, **proxy** pour la zone PROXY, une troisième **back** pour la zone Interne et une quatrième **admin** qui regroupe toutes les zones.
|
||||
|
||||
### /etc/bind/named.conf
|
||||
```
|
||||
include "/etc/bind/named.conf.options";
|
||||
|
||||
acl front {
|
||||
127.0.0.1;
|
||||
acl proxy {
|
||||
10.0.0.0/24;
|
||||
};
|
||||
acl back {
|
||||
acl proxy {
|
||||
127.0.0.1;
|
||||
10.0.1.0/24;
|
||||
};
|
||||
acl back {
|
||||
10.0.2.0/24;
|
||||
};
|
||||
acl admin {
|
||||
10.1.0.0/24;
|
||||
};
|
||||
|
||||
view "internalfront" {
|
||||
recursion yes;
|
||||
match-clients {front;};
|
||||
allow-query {front;};
|
||||
allow-recursion {front;};
|
||||
allow-query-cache {front;};
|
||||
match-clients {proxy;};
|
||||
allow-query {proxy;};
|
||||
allow-recursion {proxy;};
|
||||
allow-query-cache {proxy;};
|
||||
include "/etc/bind/named.conf.default-zones";
|
||||
include "/etc/bind/zones.rfc1918";
|
||||
zone "krhacken.org" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.front";
|
||||
file "/etc/bind/zones/db.krhacken.org.proxy";
|
||||
};
|
||||
zone "0.0.10.in-addr.arpa" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.intrafront.rev";
|
||||
};
|
||||
};
|
||||
view "internalproxy" {
|
||||
recursion yes;
|
||||
match-clients {proxy;};
|
||||
allow-query {proxy;};
|
||||
allow-recursion {proxy;};
|
||||
allow-query-cache {proxy;};
|
||||
include "/etc/bind/named.conf.default-zones";
|
||||
include "/etc/bind/zones.rfc1918";
|
||||
zone "krhacken.org" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.proxy";
|
||||
};
|
||||
zone "1.0.10.in-addr.arpa" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.intrafront.rev";
|
||||
file "/etc/bind/zones/db.krhacken.org.intraproxy.rev";
|
||||
};
|
||||
};
|
||||
view "internalback" {
|
||||
@@ -131,105 +148,256 @@ view "internalback" {
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.back";
|
||||
};
|
||||
zone "1.1.10.in-addr.arpa" {
|
||||
zone "2.0.10.in-addr.arpa" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.intraback.rev";
|
||||
};
|
||||
};
|
||||
view "internaladmin" {
|
||||
recursion yes;
|
||||
match-clients {admin;};
|
||||
allow-query {admin;};
|
||||
allow-recursion {admin;};
|
||||
allow-query-cache {admin;};
|
||||
include "/etc/bind/named.conf.default-zones";
|
||||
include "/etc/bind/zones.rfc1918";
|
||||
zone "krhacken.org" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.admin";
|
||||
};
|
||||
zone "0.1.10.in-addr.arpa" {
|
||||
notify no;
|
||||
type master;
|
||||
file "/etc/bind/zones/db.krhacken.org.intraadmin.rev";
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
## Les serveurs récursif-cache
|
||||
|
||||
Voici les trois fichiers pour la configuration pour les forward DNS.
|
||||
|
||||
Pour la zone **front** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.front
|
||||
```
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. dnsmaster.krhacken.org. (
|
||||
2015010101 ; Serial
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org. (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
IN NS dns.krhacken.org. ;Nom du serveur
|
||||
alpha.fw IN A 10.0.0.1
|
||||
beta.fw IN A 10.0.0.2
|
||||
vip.fw IN A 10.0.0.3
|
||||
alpha.haproxy IN A 10.0.0.4
|
||||
beta.haproxy IN A 10.0.0.5
|
||||
vip.haproxy IN A 10.0.0.6
|
||||
proxyint IN A 10.0.0.7
|
||||
mail IN A 10.0.0.10
|
||||
dns IN A 10.0.0.253
|
||||
alpha.nginx IN A 10.0.1.3
|
||||
beta.nginx IN A 10.0.1.4
|
||||
IN NS dns.krhacken.org.
|
||||
alpha.pve IN A 10.0.0.1
|
||||
beta.pve IN A 10.0.0.2
|
||||
alpha.fw IN A 10.0.0.3
|
||||
beta.fw IN A 10.0.0.4
|
||||
alpha.haproxy IN A 10.0.0.5
|
||||
beta.haproxy IN A 10.0.0.6
|
||||
vip.haproxy IN A 10.0.0.7
|
||||
proxy IN A 10.0.0.252
|
||||
dns IN A 10.0.1.253
|
||||
vip.fw IN A 10.0.1.254
|
||||
```
|
||||
|
||||
Pour la zone **proxy** :
|
||||
```
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org. (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
IN NS dns.krhacken.org.
|
||||
alpha.nginx IN A 10.0.1.1
|
||||
beta.nginx IN A 10.0.1.2
|
||||
mail IN A 10.0.1.5
|
||||
alpha.fw IN A 10.0.1.252
|
||||
beta.fw IN A 10.0.1.253
|
||||
vip.fw IN A 10.0.1.254
|
||||
```
|
||||
|
||||
Pour la zones **back** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.back
|
||||
```
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. dnsmaster.krhacken.org. (
|
||||
2015010101 ; Serial
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org. (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
IN NS dns.krhacken.org.
|
||||
IN A 10.0.2.7
|
||||
alpha.ldap IN A 10.0.2.1
|
||||
beta.ldap IN A 10.0.2.2
|
||||
vip.ldap IN A 10.0.2.3
|
||||
mail IN A 10.0.2.4
|
||||
back.mail IN A 10.0.2.5
|
||||
ldapui IN A 10.0.2.6
|
||||
wiki IN A 10.0.2.8
|
||||
cloud IN A 10.0.2.10
|
||||
git IN A 10.0.2.11
|
||||
keyserver IN A 10.0.2.12
|
||||
pass IN A 10.0.2.13
|
||||
alpha.fw IN A 10.0.2.252
|
||||
beta.fw IN A 10.0.2.253
|
||||
vip.fw IN A 10.0.2.254
|
||||
```
|
||||
|
||||
Pour la zone **admin** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.admin
|
||||
```
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
IN NS dns.krhacken.org. ;Nom du serveur
|
||||
alpha.haproxy IN A 10.0.1.1
|
||||
beta.haproxy IN A 10.0.1.2
|
||||
alpha.ldap IN A 10.0.2.1
|
||||
beta.ldap IN A 10.0.2.2
|
||||
vip.ldap IN A 10.0.2.3
|
||||
alpha.nginx IN A 10.0.2.4
|
||||
beta.nginx IN A 10.0.2.5
|
||||
dns IN A 10.0.2.253
|
||||
proxyint IN A 10.0.2.254
|
||||
master.haproxy IN A 10.0.0.6
|
||||
slave.haproxy IN A 10.0.0.7
|
||||
proxy IN A 10.0.0.252
|
||||
master.nginx IN A 10.0.1.3
|
||||
slave.nginx IN A 10.0.1.4
|
||||
dns IN A 10.0.0.253
|
||||
ldap IN A 10.0.2.1
|
||||
mail IN A 10.0.2.10
|
||||
ldapui IN A 10.0.2.15
|
||||
nextcloud IN A 10.0.2.20
|
||||
gitea IN A 10.0.2.21
|
||||
rocketchat IN A 10.0.2.30
|
||||
drone IN A 10.0.2.14
|
||||
ctf.nginx IN A 10.0.3.4
|
||||
club.ctfd IN A 10.0.3.10
|
||||
ct.snt IN A 10.0.3.50
|
||||
blog IN A 10.0.2.50
|
||||
grafana IN A 10.1.0.252
|
||||
ansible IN A 10.1.0.253
|
||||
opn IN A 10.0.0.254
|
||||
vm.snt IN A 10.0.3.10
|
||||
```
|
||||
|
||||
INT
|
||||
## Les serveurs d’autorité
|
||||
|
||||
Voici les trois fichiers pour la configuration pour les reverses DNS.
|
||||
|
||||
Pour la zone **front** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.intrafront.rev
|
||||
```
|
||||
REV
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. dnsmaster.krhacken.org. (
|
||||
2015021102 ; Serial
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org. (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
@ IN NS dns.krhacken.org.
|
||||
253 IN PTR dns.krhacken.org.
|
||||
1 IN PTR alpha.fw.krhacken.org.
|
||||
2 IN PTR beta.fw.krhacken.org.
|
||||
3 IN PTR vip.fw.krhacken.org.
|
||||
4 IN PTR alpha.haproxy.krhacken.org.
|
||||
5 IN PTR beta.haproxy.krhacken.org.
|
||||
6 IN PTR vip.haproxy.krhacken.org.
|
||||
7 IN PTR proxyint.krhacken.org.
|
||||
10 IN PTR mail.krhacken.org.
|
||||
3 IN PTR alpha.nginx.krhacken.org.
|
||||
4 IN PTR beta.nginx.krhacken.org.
|
||||
1 IN PTR alpha.pve.krhacken.org.
|
||||
2 IN PTR beta.pve.krhacken.org.
|
||||
3 IN PTR alpha.fw.krhacken.org.
|
||||
4 IN PTR beta.fw.krhacken.org.
|
||||
5 IN PTR alpha.haproxy.krhacken.org.
|
||||
6 IN PTR beta.haproxy.krhacken.org.
|
||||
7 IN PTR vip.haproxy.krhacken.org.
|
||||
252 IN PTR proxy.krhacken.org.
|
||||
254 IN PTR vip.fw.krhacken.org.
|
||||
```
|
||||
|
||||
Pour la zone **proxy** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.intraproxy.rev
|
||||
```
|
||||
REV
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org. (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
@ IN NS dns.krhacken.org.
|
||||
1 IN PTR alpha.nginx.krhacken.org.
|
||||
2 IN PTR beta.nginx.krhacken.org.
|
||||
5 IN PTR mail.krhacken.org.
|
||||
252 IN PTR alpha.haproxy.krhacken.org.
|
||||
253 IN PTR beta.haproxy.krhacken.org.
|
||||
254 IN PTR vip.fw.krhacken.org.
|
||||
```
|
||||
|
||||
Pour la zone **back** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.intraback.rev
|
||||
```
|
||||
REV
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. dnsmaster.krhacken.org. (
|
||||
2015021102 ; Serial
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org. (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
@ IN NS dns.krhacken.org.
|
||||
253 IN PTR dns.krhacken.org.
|
||||
1 IN PTR alpha.haproxy.krhacken.org.
|
||||
2 IN PTR beta.haproxy.krhacken.org.
|
||||
1 IN PTR alpha.ldap.krhacken.org.
|
||||
2 IN PTR beta.ldap.krhacken.org.
|
||||
3 IN PTR vip.ldap.krhacken.org.
|
||||
4 IN PTR alpha.nginx.krhacken.org.
|
||||
5 IN PTR beta.nginx.krhacken.org.
|
||||
254 IN PTR proxyint.krhacken.org.
|
||||
4 IN PTR mail.krhacken.org.
|
||||
5 IN PTR back.mail.krhacken.org.
|
||||
6 IN PTR ldapui.krhacken.org.
|
||||
7 IN PTR krhacken.org.
|
||||
8 IN PTR wiki.krhacken.org.
|
||||
10 IN PTR cloud.krhacken.org.
|
||||
11 IN PTR git.krhacken.org.
|
||||
12 IN PTR keyserver.krhacken.org.
|
||||
13 IN PTR pass.krhacken.org.
|
||||
252 IN PTR alpha.fw.krhacken.org.
|
||||
253 IN PTR beta.fw.krhacken.org.
|
||||
254 IN PTR vip.fw.krhacken.org.
|
||||
```
|
||||
|
||||
Pour la zone **admin** :
|
||||
|
||||
### /etc/bind/zones/db.krhacken.org.intraadmin.rev
|
||||
```
|
||||
$TTL 10800
|
||||
@ IN SOA dns.krhacken.org. r.krhacken.org (
|
||||
2020050101 ; Serial
|
||||
5400 ; Refresh
|
||||
2700 ; Retry
|
||||
2419200 ; Expire
|
||||
300 ) ; Negative TTL
|
||||
@ IN NS dns.krhacken.org.
|
||||
6 IN PTR master.haproxy.krhacken.org.
|
||||
7 IN PTR slave.haproxy.krhacken.org.
|
||||
252 IN PTR proxy.krhacken.org.
|
||||
3 IN PTR master.nginx.krhacken.org.
|
||||
4 IN PTR slave.nginx.krhacken.org.
|
||||
253 IN PTR dns.krhacken.org.
|
||||
1 IN PTR ldap.krhacken.org.
|
||||
10 IN PTR mail.krhacken.org.
|
||||
15 IN PTR ldapui.krhacken.org.
|
||||
20 IN PTR nextcloud.krhacken.org.
|
||||
21 IN PTR gitea.krhacken.org.
|
||||
30 IN PTR rocketchat.krhacken.org.
|
||||
14 IN PTR drone.krhacken.org.
|
||||
4 IN PTR ctf.nginx.krhacken.org.
|
||||
10 IN PTR club.ctfd.krhacken.org.
|
||||
50 IN PTR ct.snt.krhacken.org.
|
||||
50 IN PTR blog.krhacken.org.
|
||||
252 IN PTR grafana.krhacken.org.
|
||||
253 IN PTR ansible.krhacken.org.
|
||||
254 IN PTR opn.krhacken.org.
|
||||
10 IN PTR vm.snt.krhacken.org.
|
||||
```
|
||||
|
||||
Redémarrage de bind9
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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/*
|
||||
|
||||
@@ -13,16 +13,11 @@ Au niveau des ressources allouées :
|
||||
- 1 Coeur
|
||||
- 1Gb de RAM
|
||||
- 1Gb de SWAP
|
||||
- 24Gb de Stockage
|
||||
- 16Gb de Stockage
|
||||
|
||||
Au niveau des interfaces réseaux :
|
||||
Firewall toujours désactiver.
|
||||
Interface réseau :
|
||||
- eth0: vmbr1 / VLAN: 10 / IP: 10.0.0.252/24 / GW: 10.0.0.254
|
||||
- eth1: vmbr1 / VLAN: 20 / IP: 10.0.1.252/24
|
||||
- eth2: vmbr1 / VLAN: 30 / IP: 10.0.2.252/24
|
||||
- eth3: vmbr1 / VLAN: 40 / IP: 10.0.3.252/24
|
||||
- eth4: vmbr1 / VLAN: 50 / IP: 10.0.4.252/24
|
||||
- eth5: vmbr2 / VLAN: 100 / IP: 10.1.0.104/24 / GW: 10.1.0.254
|
||||
|
||||
|
||||
Dans les options activé le démarrage automatique.
|
||||
|
||||
@@ -41,7 +36,7 @@ Allow HTTP tunnel throutgt Apt-Cacher NG? -> No
|
||||
### /etc/apt-cacher-ng/acng.conf
|
||||
```
|
||||
Port: 9999
|
||||
BindAddress: 10.0.1.252 10.0.2.252 10.0.3.252 10.0.4.252 10.1.0.104
|
||||
BindAddress: 10.0.0.252
|
||||
PassThroughPattern: ^(.*):443$
|
||||
```
|
||||
```
|
||||
@@ -68,11 +63,8 @@ apt-get install -y squid3 ca-certificates
|
||||
#acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
|
||||
#acl localnet src fc00::/7 # RFC 4193 local private network range
|
||||
#acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
|
||||
acl localnet src 10.0.1.0/24 # Zone Proxy
|
||||
acl localnet src 10.0.2.0/24 # Zone Int
|
||||
acl localnet src 10.0.3.0/24 # Zone CTF
|
||||
acl localnet src 10.0.4.0/24 # Zone Dirty
|
||||
acl localnet src 10.1.0.0/24 # Zone Admin
|
||||
|
||||
acl localnet src 10.0.0.0/8 # L'ensemble des zones
|
||||
|
||||
[...]
|
||||
|
||||
@@ -90,20 +82,15 @@ Squid est maintenant accessible depuis le port 3128 du proxy interne uniquement
|
||||
|
||||
Les outils principaux sont WGET et APT-GET on va donc les reliées au Proxy Interne.
|
||||
|
||||
Le proxy interne sera accessible uniquement depuis les zones PROXY, INT, CTF et DIRTY voilà l'ip du proxy en fonction de la zone :
|
||||
- PROXY (VLAN 20) -> 10.0.1.252
|
||||
- INT (VLAN 30) -> 10.0.2.252
|
||||
- CTF (VLAN 40) -> 10.0.3.252
|
||||
- DIRTY (VLAN 50) -> 10.0.4.252
|
||||
- ADMIN (VLAN 100) -> 10.1.0.104
|
||||
Le proxy interne sera accessible depuis toutes les zones à l'adresse 10.0.0.252.
|
||||
|
||||
### WGET
|
||||
Les requêtes passerons désormais par le proxy interne sur le port 3128 pour les requêtes http et https. Seul le root aura accès au proxy.
|
||||
|
||||
#### /root/.wgetrc
|
||||
```
|
||||
http_proxy = http://<ip_proxy_zone>:3128/
|
||||
https_proxy = http://<ip_proxy_zone>:3128/
|
||||
http_proxy = http://10.0.0.252:3128/
|
||||
https_proxy = http://10.0.0.252:3128/
|
||||
use_proxy = on
|
||||
```
|
||||
WGET doit maintenant fonctionner.
|
||||
@@ -114,7 +101,7 @@ On va maintenant faire passer apt-get par le proxy apt qui est sur le port 9999
|
||||
#### /etc/apt/apt.conf.d/01proxy
|
||||
```
|
||||
Acquire::http {
|
||||
Proxy "http://<ip_proxy_zone>:9999";
|
||||
Proxy "http://10.0.0.252:9999";
|
||||
};
|
||||
```
|
||||
APT-GET doit maintenant fonctionner.
|
||||
@@ -127,7 +114,15 @@ Les requêtes passerons désormais par le proxy interne sur le port 3128 pour le
|
||||
#### /root/.gitconfig
|
||||
```
|
||||
[http]
|
||||
proxy = http://<ip_proxy_zone>:3128
|
||||
proxy = http://10.0.0.252:3128
|
||||
[https]
|
||||
proxy = https://<ip_proxy_zone>:3128
|
||||
proxy = https://10.0.0.252:3128
|
||||
```
|
||||
|
||||
### Toutes requêtes HTTP
|
||||
Pour faire passer toute les requêtes HTTP par le proxy exécuter les commandes suivantes.
|
||||
|
||||
```
|
||||
export http_proxy=http://10.0.0.252:3128
|
||||
export https_proxy=$http_proxy
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user