На моем рабочем месте у нас есть общедоступная сеть Wi-Fi, а также наша частная сеть Wi-Fi. Частная сторона имеет доступ к другим компьютерам, принтерам, серверам и доступ к Интернету. На общедоступной стороне пользователям необходимо пройти аутентификацию с помощью адаптивного портала, используя комбинацию имени пользователя и пароля с нашего сервера (только для личных устройств наших сотрудников).
Ключ просочился задолго до того, как я пришел на эту работу, и почти все вещи я убрал. У меня есть сценарии (написанные другими членами команды, а не мной!), Которые проходят через аренду DHCP в Debian Wheezy и выдают производителя, DNS-имя, IP-адрес и MAC-адрес всех устройств, с которыми взаимодействует DHCP-сервер. . С помощью этих скриптов я могу создать черный список MAC-адресов, и iptables заблокирует их для меня. Я обновляю /etc/blacklist.txt
, и когда iptables запускается, он выполняет iptables -A INPUT $if -m mac --mac-source $i -j DROP
(с участием $i
читается из файла).
Это предотвратит подключение их устройств к нашим сетевым ресурсам и Интернету. К сожалению, это не вступит в силу до тех пор, пока после устройство получило IP-адрес от isc-dhcp-server
. Так, моя проблема в том, как я могу предотвратить их даже получение назначенный им IP-адрес? Да, я знаю, что они могут просто назначить себе статический IP-адрес и обойти DHCP-сервер, но я все равно хочу iptables
чтобы заблокировать их на основе их (надеюсь, неизменяемого) MAC-адреса. Да, я знаю, что могу увеличить диапазон на моем DHCP-сервере, но я хочу, чтобы руководство осознало борьбу с управлением частными устройствами, занимающими наши работай ресурсы путем подключения и обхода нашего адаптивного портала.
Одно из решений (ну, частичное), которое кто-то придумал, заключалось в создании класса черной дыры в моем /etc/dhcp/dhcpd.conf
файл и заполните его MAC-адресами устройств, к которым я не хочу подключаться. Это сработает, но требует обновления MAC-адресов в нескольких местах, чего я не хочу. Я хочу иметь возможность обновлять MAC-адреса в одном файле, а затем, возможно, запустить скрипт, который добавит изменения в мой файл DHCP, и мой iptables
правила.
Использовать ebtables
вместо того iptables
для блокировки MAC-адресов на уровне 2:
ebtables -A INPUT -s 00:11:22:33:44:55 -j DROP
Если у вас есть доступ к этой настройке, и если это позволяет оборудование, более простым решением может быть настройка вашей точки (точек) доступа на отклонение MAC-адресов, которые вы хотите фильтровать, вместо их фильтрации «позже» с помощью iptables. Это также решит проблему назначения людям статического IP-адреса своему устройству, поскольку они могут просто не подключиться к сети, если они будут отфильтрованы на уровне AP. Конечно, это не решит проблему «нестатических» MAC-адресов ...
Насколько я знаю, это невозможно сделать, кроме как использовать что-то вроде etables, как было предложено, с дополнительной бухгалтерией.
Я видел эту проблему раньше, и решение, которое я нашел, было почти таким же, как то, что вы уже используете. Если вы заставляете скрипт запускаться каждые несколько минут, то время, в течение которого неавторизованное устройство может находиться в сети, будет минимальным, что может быть приемлемым компромиссом.
Вам также следует изучить возможность связывания беспроводной аутентификации с сервером LDAP, если вы уже используете что-то подобное, это должно быть легко. В противном случае как можно скорее включите LDAP или другую централизованную систему аутентификации (учетные записи локальных пользователей в большинстве случаев - плохая идея). Затем либо создайте общую гостевую учетную запись, либо гостевую учетную запись в каждом конкретном случае. Таким образом, даже если у пользователей есть беспроводной ключ, они все равно не смогут подключиться к беспроводной сети, пока не пройдут аутентификацию. Обычно это делается через веб-страницу, на которую беспроводной маршрутизатор перенаправляет трафик. Только после аутентификации будет создан маршрут, разрешающий трафик.
Хотя я думаю, используя ebtables
может быть ответом, это еще один уровень, который я не хотел добавлять в свою конфигурацию. Один из других технических специалистов помог мне создать сценарий для анализа черного списка IP-адресов и добавления их в новый пул, который не выдает никаких IP-адресов. Требуется обычный черный список (по одному MAC-адресу на строку), в который я тоже плюю iptables
, и просто создает новый пул.
В моем /etc/dhcp/dhcpd.conf
файла, я создаю новый класс в верхней части:
class "blacklist" {
match hardware;
}
В моих пулах с "частной стороной LAN" я добавляю следующее:
deny members of "blacklist";
... и в самом конце добавил:
include "/etc/dhcp/blacklist.conf";
Затем я создаю сценарий Python, как показано ниже:
#!/usr/bin/perl
my $if;
my @macs;
my $line = 0;
if ($ARGV[0]) {
$if = "-i $ARGV[0]";
}
while (<stdin>) {
$line++;
next if /^$/;
next if /^\s*#/;
chomp;
if (/^([a-f0-9]{2}((:|-)[a-f0-9]{2}){5})$/) {
push(@macs, $_);
}
else {
die("syntax error on line $line\n");
}
}
open(OUT, ">/etc/dhcp/blacklist.conf");
foreach my $i (@macs) {
$i =~ tr/-/:/;
print OUT "subclass \"blacklist\" 1:$i;\n";
}
close(OUT);
Я сохраняю это, затем добавляю бит Execute с помощью chmod +x /usr/local/sbin/dhcpd-macblock.py
и задайте задание cron, которое каждый час загружает черный список в скрипт:
cat /etc/blacklist.txt | dhcpd-macblock.py
Каждый час он проходит, создавая новый файл со всеми заблокированными MAC-адресами, которые мне не нужны, и они даже не получают резервирования DHCP, и мои места постепенно освобождаются.