Назад | Перейти на главную страницу

Iptables: фильтрация только одного интерфейса на маршрутизаторе с несколькими интерфейсами

Ниже приведены мои правила брандмауэра. eth1 это интерфейс WAN, а все остальные - интерфейсы LAN. Я хочу фильтровать INPUT и FORWARD цепочки только на eth1 (Интерфейс WAN). Все другие интерфейсы не нуждаются в брандмауэре. Мой пример кода ниже работает нормально. Но я чувствую, что мне не нужно иметь так много правил, чтобы включить фильтрацию на eth1. Итак, как я могу включить фильтрацию только на eth1 всего с несколькими правилами iptables?

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A INPUT -i tap0 -j ACCEPT
iptables -A INPUT -i eth5 -j ACCEPT
iptables -A INPUT -i eth5.20 -j ACCEPT
iptables -A INPUT -i eth5.21 -j ACCEPT
iptables -A INPUT -i eth5.22 -j ACCEPT
iptables -A INPUT -i eth5.23 -j ACCEPT
iptables -A INPUT -i eth5.24 -j ACCEPT
iptables -A INPUT -i eth5.25 -j ACCEPT

iptables -A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -i br0 -j ACCEPT
iptables -A IFORWARD -i tap0 -j ACCEPT
iptables -A FORWARD -i eth5 -j ACCEPT
iptables -A FORWARD -i eth5.20 -j ACCEPT
iptables -A FORWARD -i eth5.21 -j ACCEPT
iptables -A FORWARD -i eth5.22 -j ACCEPT
iptables -A FORWARD -i eth5.23 -j ACCEPT
iptables -A FORWARD -i eth5.24 -j ACCEPT
iptables -A FORWARD -i eth5.25 -j ACCEPT

iptables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Webserver Ports
iptables -A INPUT -i eth1 -p tcp --match multiport --dports 80,443 -j ACCEPT

# NAT for my local network
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source my.pub.ip.add

# ICMP Protection
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -i eth1 -p icmp -m icmp -m limit --limit 1/second -j ACCEPT

iptables -A INPUT -i eth1 -j DROP
iptables -A FORWARD -i eth1 -j DROP

Вы всегда можете сделать что-то подобное в верхней части каждой встроенной цепочки:

iptables -I INPUT -i eth1 -j eth1chain
iptables -I INPUT -i eth1 -j DROP

Затем ударите любые правила, которые вы хотите eth1chain разрешить движение (можно не ставить -i eth1 в эти цепочки тоже!) и оставьте для политики в основной цепочке значение ПРИНЯТЬ.

Однако я бы не рекомендовал это. Вам действительно лучше использовать политику запрета по умолчанию и указывать только тот трафик, который вам действительно нужен. Использование достойного инструмента управления брандмауэром вместо написания команд iptables напрямую может значительно помочь в этой работе.