Я строю небольшую офисную сеть с виртуальными машинами. Моя схема такова:
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.