LINUX.ORG.RU
решено ФорумAdmin

[iptables] mac filtering, squid, nat

 


0

0

Необходимо раздать интернет на основании MAC-адресов. При этом HTTP-трафик заворачивать на squid, а остальной пропускать через NAT. Дело в том, что MAC-адресов достаточно много и не хотелось бы их дублировать. Возможно ли какое-то красивое решение?

На данный момент приходится дублировать адреса в таблице NAT цепочки PREROUTING и в таблице FILTER цепочки FORWARD.

iptables -t filter -A FORWARD -p tcp -m mac --mac-source 00:1c:fc:9a:94:fa -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp -m mac --mac-source 00:1c:fc:9a:94:fa -m tcp --dport 80 -j REDIRECT --to-ports 3128


Ответ на: комментарий от val-amart

Что в таком случае лучше использовать для обработки списка маков? awk? Пример бы не помешал.

zorgan
() автор топика

Легко. Выделяй пакеты по макам и маркируй их в mangle/PREROUTING, а в nat/PREROUTING и filter/FORWARD отлавливай их по маркировке.

iptables -t mangle -N check_mac
iptables -t mangle -A check_mac -m mac --mac-source 00:1c:fc:9a:94:fa -j MARK --set-mark 1
...
iptables -t mangle -I PREROUTING -p tcp -j check_mac
iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -m mark --mark 1 -j REDIRECT --to-ports 3128
iptables -I FORWARD -m mark --mark 1 -j ACCEPT

Также советую фильтр по маркировке добавить в filter/INPUT, чтобы всякие на проксю не шлялись.

Впрочем, лично мне более изящным кажется решение на базе stateful-маркировок.

nnz ★★★★
()
Ответ на: комментарий от zorgan
MACS="00:1c:fc:9a:94:fa 00:1c:fc:9a:94:fb 00:1c:fc:9a:94:fc ..."

for mac in $MACS; do
 iptables ... -m mac --mac-source $mac ...
done
markevichus ★★★
()

Поробуйте использовать ipset macipmap для выделения трафика от разрешенных хостов, потому что если MAC-адресов достаточно много то куча правил затормозит ваш роутер. Вообще неплохо бы просто прибить ип к макам на коммутаторах заюзав DHCP snooping, а на шлюзе ориентироваться только на ip адреса.

ventilator ★★★
()
Ответ на: комментарий от ventilator

>ipset macipmap

В данном случаем может и не подойти, так как оно работает только в том случае, если айпишники гвоздями прибиты к макам. Проверять маки отдельно там нельзя. (Ключ matchunset к делу не относится, он разрешает проверку адресов на соответствие рабочему диапазону безотносительно мака.)

если MAC-адресов достаточно много то куча правил затормозит ваш роутер


netfilter очень неплохо вылизан по скорости, поэтому, чтобы создать ощутимые задержки, нужны тысячи или десятки тысяч правил (в зависимости от железа). Сомневаюсь, что в сети ТС'а найдется столько уникальных маков.

nnz ★★★★
()

Всем спасибо. Воспользовался советом nnz и markevichus.

Фильтруемых маков несколько десятков, не более.

zorgan
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.