Projet

Général

Profil

Wiki » Historique » Version 8

sacha, 26/12/2022 00:52

1 5 sacha
{{>toc}}
2
3 1 sacha
# DNS récursif Ouvert DoH DoT & HA
4
5
Aquilenet propose deux serveurs DNS ouverts cf https://www.aquilenet.fr/services/dns/
6 4 sacha
On a mis aussi un DNS ouvert sur l'IP 45.67.81.23 car facile à retenir, avec l'adresse de dns.aquilenet.fr (voir [http://dns.aquilenet.fr](http://dns.aquilenet.fr)) . Nous en avons profité pour ajouter [DoH](https://fr.wikipedia.org/wiki/DNS_over_HTTPS) et [DoT](https://fr.wikipedia.org/wiki/DNS_over_TLS) et d'avoir cette adresse en IP Virtuelle partagée entre Gaia et Hades.
7
Cette IP virtuelle est portée par Keepalived sur Hades le primaire et Gaia le secondaire. Si le démon Keepalived est arrêté sur Hades, l'ip bascule sur Gaia. Si on redémarre le démon sur Hades, ce dernier reprend l'IP: pratique pour les mises à jour, le service continue à fonctionner.
8 1 sacha
9 7 sacha
Une configuration spécifique pour l'ip de ce vlan a été fait sur les switches et les hyperviseurs, ce qui permet au final à Hades et Gaia d'avoir une seconde interface qui porte l'IP virtuelle, elle n'est pas abordée dans ce document.
10 6 sacha
11 3 sacha
## Configurations communes à Gaia et Hades
12 1 sacha
13 3 sacha
### Apache2
14 6 sacha
15
* /etc/apache2/ports.conf
16
17
Pour que l'ip 45.67.81.23 puisse répondre en http sur le port 80 et que les autres sites fonctionnent en 443 sur l'ip de d'hades/gaia
18
~~~
19
Listen 80
20
NameVirtualHost 185.233.100.2:443
21
NameVirtualHost [2a0c:e300::2]:443
22
<IfModule ssl_module>
23
        Listen 185.233.100.2:443
24
        Listen [2a0c:e300::2]:443
25
</IfModule>
26
27
<IfModule mod_gnutls.c>
28
        Listen 185.233.100.2:443
29
        Listen [2a0c:e300::2]:443
30
</IfModule>
31
~~~
32 1 sacha
33
* /etc/apache2/sites-enabled/dns.aquilenet.fr.conf 
34
~~~
35
<VirtualHost *:80>
36
        ServerAdmin webmaster@aquilenet.fr
37
        ServerName dns.aquilenet.fr
38
        DocumentRoot /srv/www/dns.aquilenet.fr 
39
40
        ErrorLog ${APACHE_LOG_DIR}/dns.aqln.error.log 
41
        LogLevel warn
42
        CustomLog ${APACHE_LOG_DIR}/dns.aqln.access.log combined
43
44
        Alias /.well-known/acme-challenge /srv/letsencrypt/challenges/dns.aquilenet.fr
45
        <Directory /srv/letsencrypt/challenges/dns.aquilenet.fr>
46
            Require all granted
47
        </Directory>
48
        <Directory />
49
                Options FollowSymLinks 
50
                AllowOverride None
51
                Require all granted
52
        </Directory>
53
</VirtualHost>
54
~~~
55
56 3 sacha
### Bind9
57 1 sacha
58
BIND 9.17.10 implémente DoH, au jour de l'installation il n'est disponible que dans les backports bullseye (A changer quand il sera dans main).
59
60
* /etc/bind/named.conf.options
61
62
 Dans la catégorie "options {"
63
~~~
64
        listen-on-v6 { 2a0c:e300::101; };
65
        listen-on { 185.233.100.101; 45.67.81.23; };
66
        # DOH
67
        listen-on port 443 tls local-tls http default { 45.67.81.23; };
68
        # DoT
69
        listen-on port 853 tls local-tls { 45.67.81.23; };
70
        recursion yes;
71
        dnssec-validation auto;
72
~~~
73
74
~~~
75
# DoH DoT
76
tls local-tls {
77
    key-file "/etc/letsencrypt/live/dns.aquilenet.fr/privkey.pem";
78
    cert-file "/etc/letsencrypt/live/dns.aquilenet.fr/fullchain.pem";
79
    dhparam-file "/etc/bind/dhparam.pem";
80
    protocols { TLSv1.2; TLSv1.3; };
81
    prefer-server-ciphers yes;
82
    session-tickets no;
83
};
84
~~~
85
86 3 sacha
### AppArmor
87 1 sacha
88
*  /etc/apparmor.d/local/usr.sbin.named
89
90
~~~
91
/etc/letsencrypt/** r,
92
~~~
93
appliquer avec: `apparmor_parser -r /etc/apparmor.d/usr.sbin.named`
94 7 sacha
95
### Iptables
96
97
~~~
98
# Web
99
-A INPUT -p tcp --dport 80 -j ACCEPT
100
-A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
101
~~~
102
~~~
103
-A INPUT -d 45.67.81.23 -p tcp -m tcp --dport 53 -j dns_limit
104
-A INPUT -d 45.67.81.23 -p udp -m udp --dport 53 -j dns_limit
105
-A INPUT -d 45.67.81.23 -p tcp -m tcp --dport 443 -j dns_limit
106
-A INPUT -d 45.67.81.23 -p tcp -m tcp --dport 853 -j dns_limit
107
~~~
108 3 sacha
109
## Configurations spécifiques
110
111
### Génération du certificat SSL sur Hades
112
113
~~~
114
certbot --apache --agree-tos --email sysop@aquilenet.fr -d dns.aquilenet.fr
115
chgrp bind /etc/letsencrypt/live/dns.aquilenet.fr/privkey.pem
116
chmod 0640 /etc/letsencrypt/live/dns.aquilenet.fr/privkey.pem
117
openssl dhparam -out /etc/bind/dhparam.pem 4096
118
~~~
119
120
Copie du certificat sur gaia
121
122
* /etc/letsencrypt/renewal-hooks/post/sync-cert.sh
123
~~~
124
#!/bin/bash
125
rsync -aPHSA /etc/letsencrypt/archive/dns.aquilenet.fr gaia:/etc/letsencrypt/archive/
126
~~~
127
128
### Keepalived
129
130
#### Hades Master
131
132
* /etc/keepalived/keepalived.conf
133
134
~~~
135
global_defs {
136
  notification_email {
137
    sysop@aquilenet.fr
138
  }
139
  notification_email_from vrrp-dns@aquilenet.fr.fr
140
  smtp_server localhost
141
  smtp_connect_timeout 30
142
}
143
144
vrrp_instance DNS {
145
  state MASTER 
146
  interface eth0
147
  virtual_router_id 101 
148
  priority 100
149
  advert_int 2
150
  smtp_alert
151
  unicast_src_ip 185.233.100.16 
152
  unicast_peer {
153
    185.233.100.2
154
  }
155
  virtual_ipaddress {
156
    45.67.81.23/32 dev eth1 scope global # VIP
157
  }
158
}
159
~~~
160
161
#### Gaia Slave
162
163
* /etc/keepalived/keepalived.conf
164
165
~~~
166
global_defs {
167
  notification_email {
168
    sysop@aquilenet.fr
169
  }
170
  notification_email_from vrrp-dns@aquilenet.fr.fr
171
  smtp_server localhost
172
  smtp_connect_timeout 30
173
}
174
175
vrrp_instance DNS {
176
  state BACKUP
177
  interface eth0
178
  virtual_router_id 101
179
  priority 50
180
  advert_int 2
181
  smtp_alert
182
  unicast_src_ip 185.233.100.2
183
  unicast_peer {
184
    185.233.100.16
185
  }
186
  virtual_ipaddress {
187
    45.67.81.23/32 dev eth1 scope global # VIP
188
  }
189
}
190
191 1 sacha
~~~
192 4 sacha
193
## Validation
194
195
* test du service
196
~~~
197
dig +https +short x.org @45.67.81.23      
198
131.252.210.176
199
dig +tls +short x.org @45.67.81.23      
200
131.252.210.176
201 8 sacha
dig +short dns.aquilenet.fr @45.67.81.23 
202
45.67.81.23
203 4 sacha
~~~
204
205
* bascule keepalived
206 8 sacha
207
sur hades: `systemctl stop keepalived`
208
sur gaia: `ip a |grep /32`doit donner "inet 45.67.81.23/32 scope global eth1"