iptables и сетевое взаимодействие в целом сложнее, чем вы думаете.
Допустим, вы делаете это только в надежде включить весь исходящий трафик из внутреннего eth1, как в первой строке:
-A FORWARD -i eth1 -p tcp -j ACCEPT -P FORWARD DROP
Это нарушает то, что все соединения и трафик являются двусторонними . FORWARD обрабатывает весь трафик, который не предназначен для маршрутизатора (INPUT) или получен из маршрутизатора (OUTPUT). Таким образом, FORWARD получает как ваше исходящее соединение, инициирующее tcp-трафик (что позволяет ваше правило), так и все ответы, пытающиеся подтвердить это соединение и передать трафик обратно (который, поскольку вы отбрасываете все остальное, что не соответствует, потребует нового правила для разрешать).
Здесь iptables становится очень сложным, очень быстрым, потому что настраивать правило для каждого потенциального пакета в обоих направлениях - это безумие. Это начинает становиться проще, если первое правило всегда разрешает трафик через установленные соединения с использованием -m state --state ESTABLISHED, как вы начали использовать over в своем другом вопросе, решающем проблему NAT . Это позволит вам просто написать правила для соединений, которые вы хотите разрешить запускать. Также может быть полезно отсортировать входящие и исходящие соединения в их собственные правила (если вы не беспокоитесь только об исходящих), как показано ниже:
#setup -N outbound -N inbound #design -A FORWARD -m state --state ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o eth1 -j inbound -A FORWARD -i eth1 -o eth0 -j outbound -P FORWARD DROP #allow outgoing web access -A outbound -p tcp -m tcp --dport 80,443 -j ACCEPT #and nothing else -A outbound DROP #etc....