
В своей локальной сети я использую сервер PFSense с одним DHCP-сервером на нем.
Мне нужно заблокировать второй DHCP-сервер, появляющийся в моей локальной сети. Я думаю, что могу использовать брандмауэр PfSense, чтобы отклонить IP-адрес другого DHCP-сервера.
Что я должен делать?
решение1
К сожалению, вы не можете заблокировать второй DHCP в той же локальной сети (конечно, не на уровне брандмауэра, а смягчение этой проблемы с помощью высокопроизводительного корпоративного коммутационного оборудования — непростая задача); IP-запрос — это служба вещания, которая обычно работает на уровне локальной сети, и, как таковая, не существует служб маршрутизации, которые могли бы блокировать службы на уровне брандмауэра.
Например, брандмауэры не блокируют обмен данными между машинами, принадлежащими к одному сетевому блоку/локальной сети, однако они контролируют/обслуживают маршрутизацию, осуществляемую ими для обмена данными с другими сетями.
Протокол DHCP определяет, что какой бы ответ первым не пришел на станцию, запрашивающую IP, он будет принят. Таким образом, в зависимости от того, кто победит, рабочие станции будут случайным образом получать IP-адрес от официального или мошеннического IP-адреса.
Что можно сделать, так это смягчить последствия, то есть найти MAC-адрес оборудования-нарушителя и выполнить его поиск в коммутаторах или заблокировать этот MAC-адрес в коммутаторах/беспроводной точке доступа.
Чтобы это выяснить, у вас есть два возможных пути:
Вы идете к затронутой машине и пытаетесь узнать IP-адрес DHCP-сервера, который обслужил этот запрос. Или, если на то пошло, освободите IP-адрес и запросите его несколько раз.
Получив ответ для внешнего маршрутизатора, получите этот IP-адрес (например, с помощью ipconfig /all
клиента Windows), затем получите этот MAC-адрес, предположив, что IP-адрес мошеннического DHCP-сервера — 1.1.3.200:
$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
Или мой любимый способ, в Linux-боксе, вы используете tcpdump
для прослушивания пары DHCP-запросов (бокс имеет горизонтальный ползунок, чтобы увидеть весь текст)
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
Обратите внимание на строки, в которых указано DHCP Reply:
в этом примере DHCP-сервер — 1.1.3.254 и имеет MAC-адрес 00:0b:fc:07:04:00; второй имеет IP-адрес 1.1.3.200 и MAC-адрес 00:0b:fc:07:04:01 (6-я и 7-я строки вывода).
решение2
Я использовал DHCP-голодание (направленное конкретно на мошеннический DHCP-сервер) в течение более длительных периодов времени. Попробуйтеdhcdropилиdhcpstarv, или скрипт scapy. В конце концов я выбрал последний, потому что он более гибкий. И в scapy, и в dhcpstarv можно нацелиться на нарушающий сервер DHCP, не прерывая законную службу.
Некоторые маршрутизаторы и коммутаторы могут сбрасывать ссылки на хосты, которые нарушают набор правил. См.эта ветка поддержки Ciscoнапример.