Я хочу, чтобы iptables фильтровал только один интерфейс, eth0, который обращен к WAN. Как это может быть сделано? И я хочу, чтобы порты ftp и ssh были открыты на eth0.
Итак, для всех интерфейсов, кроме одного, вы хотите принимать весь трафик, а на eth0 вы хотите отбросить весь входящий трафик, кроме ftp и ssh.
Во-первых, мы могли бы установить политику приема всего трафика по умолчанию.
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Тогда мы сможем сбросить правила вашего брандмауэра.
iptables -F
Теперь мы можем сказать, что хотим разрешить входящий трафик на eth0, который является частью уже разрешенного нами соединения.
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Также мы хотим разрешить входящие ssh-соединения на eth0.
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
Но все остальное, поступающее на eth0, следует отбросить.
iptables -A INPUT -i eth0 -j DROP
Для чуть большей глубины см. эта вики-запись CentOS.
FTP сложнее, чем ssh, поскольку он может использовать случайный порт, см. этот предыдущий вопрос.
Что-то вроде этого должно сработать:
iptables -A INPUT -i eth1 -p all -j DROP
iptables -A INPUT -i eth0 -p all -j ACCEPT
Возможность указать интерфейс в правиле iptables: -i
, например: -i eth0
.
Это очень просто, когда вы делаете iptables
правило, вы должны указать интерфейс. Возможность указать сетевую карту, на которой iptables
должен работать -i
Следующие правила могут стать хорошим примером
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
Последнее правило - отклонить любой другой пакет, не соответствующий первым двум правилам. Все правила в iptables
выполняются в указанном порядке, поэтому правило отклонения пакетов всегда выполняется последним.