Фильтрация и привязка IP по МАС адресу
Про то, как подключится к роутеру через телнет и как работать с текстовыми файлами я не буду писать, на форуме инфы должно быть полно, остановимся на основных моментах. Значится так.
Первое. Нам нужно будет подсунуть свой файл с привязками ip-mac DHCP серверу, роль которого на роутере исполняет dnsmasq. Если ассоциации положить в файл /usr/local/etc/ethers то прошивка автоматически добавит его содержимое к рабочему файлу /etc/ethers при составлении оного основываясь на настройках веб-интерфейса. Поэтому сей список будем вести именно в том файле.
Второе. Нужно сделать фильтрацию трафика по mac адресам. И как я понял при фильтрации не помешает привязка мака к ip адресу. Как я подозреваю mac фильтр используется для фильтрации неизвестных хостов и следовательно разумным будет использовать создать общий список ассоциаций MAC == IP, с которым работает DHCP сервер. А именно файл /etc/ethers. Для этого из инициализационного скрипта (post-firewall) будем менять таблицу файрвола с помощью команды iptables, основываясь на рабочий файл /etc/ethers.
В инициализационный скрипт /usr/local/post-firewall добавим следующие строки:
Code:
#!/bin/sh
#^^^^^ строка выше, указывающая на интерпретатор
# всегда должна быть первой в файле скрипта
# Создадим новую цепочку в файрволе с именем MAC_IP,
# куда будем добавлять наши правила
iptables -N MAC_IP
# Завернём в неё исходящий транзитный трафик
iptables -I FORWARD $(iptables -L FORWARD --lin | grep D,E | awk '{print $1+1}') -o ! br0 -j MAC_IP
# Пропишем, разрешающие транзитный трафик правила,
# основываясь на файл /etc/ethers
awk '{system("iptables -A MAC_IP -s "$2" -m mac --mac-source "$1" -j RETURN")}' < /etc/ethers
# Добавим правило, дропающее трафик от неизвестных хостов.
iptables -A MAC_IP -j DROP
Если под рукой нет подходящего текстового редактора то файл с сожержимым можно создать следующими командами:
Code:
mkdir -p /usr/local/sbin
cat << _EOF > /usr/local/sbin/post-firewall
#!/bin/sh
iptables -N MAC_IP
iptables -I FORWARD $(iptables -L FORWARD --lin | grep D,E | awk '{print $1+1}') -o ! br0 -j MAC_IP
awk '{system("iptables -A MAC_IP -s "$2" -m mac --mac-source "$1" -j RETURN")}' < /etc/ethers
iptables -A MAC_IP -j DROP
_EOF
После того, как будет создан файл скрипта /usr/local/sbin/post-firewall нужно не забыть дать ему права на исполнение с помощью команды chmod +x /usr/local/sbin/post-firewall
Вот. Теперь список ассоциаций MAC-IP нужно будет вести на роутере в текстовом файле /usr/local/etc/ethers в формате
мак_адрес_через_двоеточие [пробел] соответствующий_ip_адрес, например:
Code:
00:a9:40:0a:90:02 172.16.0.22
00:15:f2:7b:40:cc 172.16.0.33
00:15:f2:7a:87:4e 172.16.0.44
После того, как какой либо из файлов в папке /usr/local был исправлен, для того, чтобы записать изменения во flash роутера нужно не забыть дать команды:
flashfs save && flashfs commit && flashfs enabled
Да, и если файлы создавались в другой ОС то, прежде чем заливать на роутер нужно будет убедится, что файлы имеют перевод строки в формате *nix.