Sur mon autre fil, je parlais de choses intéressantes sur la politique et les états d'iptables , maintenant j'aimerais mieux comprendre comment fonctionne DHCP et comment iptables le comprend.
ETH0 est connecté à mon commutateur principal qui reçoit l'IP dynamique de mon routeur pour accéder non seulement à Internet mais aussi à mon réseau externe.
ETH1 est la carte interne qui est connectée à un commutateur interne où les clients X reçoivent leur IPS de ce serveur
Le réseau ETH1 est 192.168.1.0/255.255.255.0 où l'adresse IP du serveur est 192.168.1.254.
D'après ce que j'ai compris, dhcp est un protocole bootp, donc même si vous avez vos politiques de pare-feu pour tout supprimer, votre réseau recevrait toujours le DHCP, ce qui, dans les tests que j'ai faits, semblait être vrai.
Depuis tcpdump:
root@test:~# tcpdump -i eth1 port 67 or 68
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:34:03.943928 IP 192.168.1.2.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:29:52:8b (oui Unknown), length 303
11:34:03.957647 IP 192.168.1.254.bootps > 192.168.1.2.bootpc: BOOTP/DHCP, Reply, length 300
11:34:06.492153 IP 192.168.1.2.bootpc > 192.168.1.254.bootps: BOOTP/DHCP, Request from 00:0c:29:29:52:8b (oui Unknown), length 303
11:34:06.506593 IP 192.168.1.254.bootps > 192.168.1.2.bootpc: BOOTP/DHCP, Reply, length 300
J'ai créé une règle de journal simple pour voir ce que fait iptables:
root@test:~# tail -f /var/log/syslog
Oct 15 11:30:58 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9527 PROTO=UDP SPT=68 DPT=67 LEN=311
Oct 15 11:31:43 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9529 PROTO=UDP SPT=68 DPT=67 LEN=311
Oct 15 11:33:32 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9531 PROTO=UDP SPT=68 DPT=67 LEN=311
Oct 15 11:34:03 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9533 PROTO=UDP SPT=68 DPT=67 LEN=311
Voici mes règles iptables au momment:
# deny all traffic
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Use stateful inspection feature to only allow incoming connections
# related to connections I have already established myself
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# allow all traffic on lo interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
Donc, même avec la POLITIQUE par défaut pour supprimer tout, j'obtiens toujours le DHCP sur mon réseau alors qu'il faut beaucoup plus de temps pour renouveler une IP et autres.
Si j'ajoute la règle de suivi à mon pare-feu:
$IPT -I OUTPUT -o $INTIF -p udp --dport 67:68 --sport 67:68 -j ACCEPT
Il faudra beaucoup moins de temps pour mettre à jour n'importe quel DHCP client.
Compte tenu de ce qui précède:
- pourquoi faut-il en effet plus de temps pour le mettre à jour alors qu'il n'était pas bloqué?
- est-il possible de supprimer le serveur DHCP du tout sans l'éteindre?
- est-il possible d'accepter le serveur dhcp dans iptables avec le BOOTP? comment cela se fait-il?
Si vous connaissez de bons liens, cela ne me dérangerait pas d'en prendre beaucoup :)
Are you monitoring the network interface in promiscuous mode
j'apprends encore ...