In meinem anderen Thread habe ich über einige interessante Dinge über die Richtlinien und Zustände von iptables gesprochen . Jetzt möchte ich mehr darüber erfahren, wie DHCP funktioniert und wie iptables es versteht.
Die ETH0 ist mit meinem Haupt-Switch verbunden, der die dynamische IP von meinem Router empfängt, um nicht nur Internetzugang, sondern auch Zugang zu meinem äußeren Netzwerk zu erhalten.
ETH1 ist die interne Karte, die mit einem internen Switch verbunden ist, über den X-Clients ihr IPS von diesem Server erhalten
Das ETH1-Netzwerk ist 192.168.1.0/255.255.255.0, wobei die Server-IP 192.168.1.254 lautet.
Soweit ich verstanden habe, ist dhcp ein Bootp-Protokoll. Selbst wenn Sie Ihre Firewall-Richtlinien haben, um alles zu DROPEN, würde Ihr Netzwerk dennoch DHCP erhalten, was in den von mir durchgeführten Tests als wahr erschien.
Von 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
Ich habe eine einfache Protokollregel erstellt, um zu sehen, was iptables tut:
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
Hier sind meine Iptables-Regeln im Moment:
# 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
Selbst mit der Standardrichtlinie, alles zu löschen, erhalte ich immer noch das DHCP in meinem Netzwerk, während das Erneuern einer IP und dergleichen viel länger dauert.
Wenn ich meiner Firewall die folgende Regel hinzufüge:
$IPT -I OUTPUT -o $INTIF -p udp --dport 67:68 --sport 67:68 -j ACCEPT
Es wird viel weniger Zeit dauern, um einen Client-DHCP zu aktualisieren.
In Anbetracht des oben Gesagten:
- Warum dauert es tatsächlich länger, es zu aktualisieren, obwohl es nicht blockiert wird?
- Ist es möglich, den DHCP-Server überhaupt zu DROPEN, ohne ihn auszuschalten?
- Ist es möglich, den DHCP-Server in iptables mit dem BOOTP zu AKZEPTIEREN? wie geht das
Wenn du gute Links kennst, würde es mir nichts ausmachen, viel zu nehmen :)
Are you monitoring the network interface in promiscuous mode
ich noch lerne ...