pfsense: Blockieren eines zweiten DHCP-Servers

pfsense: Blockieren eines zweiten DHCP-Servers

In meinem LAN verwende ich einen PFSense-Server mit einem DHCP-Server darauf.

Ich muss einen zweiten DHCP-Server blockieren, der in meinem LAN angezeigt wird. Ich glaube, ich kann die PfSense-Firewall verwenden, um die IP-Adresse des anderen DHCP-Servers abzulehnen.

Was soll ich machen?

Antwort1

Leider können Sie einen zweiten DHCP-Dienst im selben LAN nicht blockieren (sicherlich nicht auf Firewall-Ebene, und die Abschwächung mit High-End-Switching-Geräten für Unternehmen ist kein einfaches Thema). Eine IP-Anforderung ist ein Broadcast-Dienst, der normalerweise auf LAN-Ebene ausgeführt wird. Daher gibt es keine Routing-Dienste, um Dienste auf Firewall-Ebene zu blockieren.

Firewalls blockieren beispielsweise keine Gespräche zwischen Maschinen, die zum selben Netzblock/LAN gehören, sie steuern jedoch die Kommunikation mit anderen Netzwerken und führen Routing-Dienste darüber durch.

Das DHCP-Protokoll legt fest, dass die Antwort, die zuerst bei einer Station eintrifft, die eine IP-Adresse anfordert, als akzeptierte Antwort gilt. Je nachdem, wer gewinnt, erhalten die Arbeitsstationen also nach dem Zufallsprinzip eine IP-Adresse von der offiziellen oder der Rogue-IP-Adresse.

Was getan werden kann, ist eine Schadensbegrenzung, d. h. das Ermitteln der MAC-Adresse des angreifenden Geräts und die Suche danach in Ihren Switches oder das Blockieren dieser MAC-Adresse in Ihren Switches/Wireless-APs.

Um das herauszufinden, haben Sie zwei Möglichkeiten:

Sie gehen zu einem betroffenen Rechner und versuchen, die IP-Adresse des DHCP-Servers herauszufinden, der diese Anfrage bedient hat. Oder geben Sie die IP-Adresse frei und fragen Sie mehrmals danach.

Sobald Sie eine Antwort für den fremden Router haben, holen Sie sich dessen IP-Adresse (zum Beispiel ipconfig /allin einem Windows-Client) und dann die MAC-Adresse. Gehen Sie dann davon aus, dass die IP-Adresse des Rogue-DHCP 1.1.3.200 ist:

$ping -c1 1.1.3.200 
PING 1.1.3.200 (1.1.3.200) 56(84) bytes of data.
64 bytes from 1.1.3.200: icmp_seq=1 ttl=255 time=0.273 ms

--- 1.1.3.200 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.273/0.273/0.273/0.000 ms
$arp -a 1.1.3.200
xxxx.local (1.1.3.200) at 00:0b:fc:07:04:01 [ether] on eth0

Oder meine bevorzugte Methode: In einer Linux-Box warten Sie tcpdumpauf einige DHCP-Anfragen (die Box verfügt über einen horizontalen Schieberegler, um den gesamten Text anzuzeigen).

sudo tcpdump -n -c 10 -e port 68
09:23:57.298176 00:21:97:c6:76:fc > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.2.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:21:97:c6:76:fc, length 300
09:23:59.034798 00:19:21:3c:2c:22 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.116.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:19:21:3c:2c:22, length 300
09:24:00.191144 64:00:6a:09:58:16 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.142.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 64:00:6a:09:58:16, length 300
09:24:07.325291 6c:62:6d:d0:20:f4 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.2.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 6c:62:6d:d0:20:f4, length 300
09:24:31.500826 00:23:24:06:e8:0b > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 363: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:23:24:06:e8:0b, length 321
09:24:31.502554 00:0b:fc:07:04:00 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.254.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 300
09:24:31.502812 00:0b:fc:07:04:01 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.200.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 300
09:24:32.098505 00:0f:fe:fd:6c:27 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.10.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0f:fe:fd:6c:27, length 300
09:24:49.340908 64:00:6a:09:05:6d > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.174.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 64:00:6a:09:05:6d, length 300
09:24:53.444891 ac:16:2d:08:44:1b > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 1.1.3.170.68 > 255.255.255.255.67: BOOTP/DHCP, Request from ac:16:2d:08:44:1b, length 300

Achten Sie auf die Zeilen mit „DHCP-Antwort“:
In diesem Beispiel ist der DHCP-Server 1.1.3.254 und hat die MAC-Adresse 00:0b:fc:07:04:00; der zweite hat die IP-Adresse 1.1.3.200 und die MAC-Adresse 00:0b:fc:07:04:01 (6. und 7. Zeile der Ausgabe).

Antwort2

Ich habe DHCP Starvation (speziell auf den Rogue-DHCP-Server) über längere Zeiträume verwendet. Versuchen Siedhcdropoderdhcpstarvoder ein Scapy-Skript. Ich habe mich letztendlich für Letzteres entschieden, weil es flexibler war. Sowohl in Scapy als auch in dhcpstarv ist es möglich, den fehlerhaften DHCP-Server anzusprechen, ohne einen legitimen Dienst zu unterbrechen.

Einige Router und Switches können Verbindungen zu Hosts abbrechen, die gegen bestimmte Regeln verstoßen. Siehedieser Cisco-Support-ThreadZum Beispiel.

verwandte Informationen