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

NAT, iptables и проблемные порты

Я строю небольшую офисную сеть с виртуальными машинами. Моя схема такова:

NAT работает, и компьютер B может получить доступ к Интернету через шлюз A. Я перенаправил некоторые входящие порты с A на B (например, если A получает запрос на порт 80, он автоматически отправляется на Apache компьютера B).

Дело в том, что я не очень понимаю, как открывать / закрывать порты для Компьютера Б с Компьютера А. Я знаю, как закрыть порт:

iptables -A INPUT -p tcp --dport 80 -j DROP

И он откажется от всех входящих (не выходных) подключений к порту 80. Однако это работает для основного интерфейса eth0. Я попытался, например, сбросить входящие и исходящие соединения для компьютера B, порт 80:

iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j DROP
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j DROP

Но это не работает. И я не могу понять, что делаю не так. Есть подсказка?

Первая строка должна быть со словом sport (исходный порт - 80). А также будьте осторожны при использовании -A. Это добавит правило в цепочку (добавьте правило в конце). Правила в цепочках оцениваются от первого до последнего, если соответствует одно правило, остальные больше не оцениваются. Поэтому, если вы хотите быть уверенным, используйте -I (вставьте в начало цепочки):

iptables -I FORWARD -i eth1 -o eth0 -p tcp --sport 80 -j DROP
iptables -I FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j DROP

Я считаю, что вам не хватало директивы OUTPUT.

Пожалуйста, попробуйте это:

iptables -A OUTPUT -p tcp --dport 80 -j DROP

Это приведет к отключению всего исходящего трафика на порту 80.