Я провожу тестирование на своей виртуальной машине Linux с одним ником, я хочу использовать его как своего рода брандмауэр, который может блокировать трафик некоторых клиентов на основе MAC-адреса.
Сам клиент использует виртуальную машину в качестве шлюза по умолчанию (.254), сама виртуальная машина имеет (.1 фактический маршрутизатор) в качестве шлюза по умолчанию.
Это скрипт iptable, который я использую сейчас. У меня есть Интернет на моем клиенте, но .14 все еще подключается к Интернету, при использовании MAC-адреса ничего не блокируется.
Я что-то упускаю?
# Generated by iptables-save v1.4.14 on Sun Feb 23 12:16:26 2014
*filter
:INPUT ACCEPT [869:78983]
:FORWARD ACCEPT [1183:197765]
:OUTPUT ACCEPT [644:128360]
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# log iptables denied calls (access via 'dmesg' command)
-P FORWARD DROP
-F FORWARD
-A FORWARD -i eth0 -m mac --mac-source 64:20:0c:ac:f4:49 -j DROP
-A FORWARD -i eth0 -s 192.168.1.14 -j DROP
-A FORWARD -i eth0 -j ACCEPT
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
# Completed on Sun Feb 23 12:16:26 2014
Фильтрация MAC-адресов должна выполняться в цепочке PREROUTING, к тому времени, когда пакет достигает цепочки FORWARD, MAC-адрес уже перезаписан на адрес (внутреннего) моста iptables.
См. Пункт 9 http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html#section8 для более подробного объяснения.
Вы также очищаете цепочку FORWARD после установки политики по умолчанию (строка -F FORWARD), я сомневаюсь, что вы хотите это сделать (она восстанавливает политику по умолчанию ACCEPT).
Я не понимаю, почему «-A FORWARD -i eth0 -s 192.168.1.14 -j DROP» не блокирует исходный IP-адрес, но, в любом случае, вам не понадобится «-i eth0» там. Вы уверены, что 1.14 использует 254 как gw по умолчанию?
Также было бы полезно опубликовать вывод iptables -L -v
чтобы увидеть, что действительно загружено.
Вам нужно поместить эти правила на шлюз .254, который используется .14.
Если вам нужно заблокировать .14 на уровне .1 шлюза, вам необходимо убедиться, что пакеты достигают с MAC-адресом из .14, если пакеты пересылаются .254 через NAT, тогда эти пакеты будут переупакованы с .254 MAC-адрес.
Я рекомендую вам создать подсеть для клиента .14, который не сможет напрямую подключаться к шлюзу .1.