Подтвердить что ты не робот

Iptables FORWARD и INPUT

У меня есть домашняя сеть с ПК Linux, в которой все запущены iptables. Я думаю, что легче подключить локальную сеть к шлюзу/брандмауэру Linux, поэтому я поставил компьютер (с помощью fedora, no gui) между моим маршрутизатором и локальной сетью и настроенными iptables. Здесь нет проблем, INPUT разрешает только dns http (и некоторые локальные вещи), пересылка работает нормально: LAN подключается к Интернету.

Но мой вопрос: делает FORWARD все извне или только порты, которые я настроил с помощью INPUT? В FORWARD и INPUT работают вместе или они разделены?

Это мои iptables:

*nat
:PREROUTING ACCEPT [16:1336]
:INPUT ACCEPT [14:840]
:OUTPUT ACCEPT [30:2116]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o p1p1 -j MASQUERADE
COMMIT
# Completed on Tue Oct 16 09:55:31 2012
# Generated by iptables-save v1.4.14 on Tue Oct 16 09:55:31 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [91:9888]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p UDP --dport 53 -j ACCEPT
-A INPUT -p TCP --dport 53 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i p1p1 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i p1p1 -p tcp -m multiport --dports 20,21,443 -j DROP
-A INPUT -i p1p1 -p tcp --dport 5000:5100 -j DROP
-A INPUT -i p1p1 -p icmp -m icmp --icmp-type 8 -j DROP
-A FORWARD -s 192.168.2.0/24 -j ACCEPT
-A FORWARD -d 192.168.2.0/24 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A OUTPUT -j LOG --log-prefix "denied out: "

COMMIT

p1p1 (.1.x) - мой внешний nic, p3p1 (.2.x) является внутренним.

4b9b3361

Ответ 1

RedHat имеет отличный документ об iptables (немного длинный), но тема для обложки сложна и есть так много разные варианты использования, которые я не вижу, как этого избежать.

iptables kernel routing

Вот глава о правила FORWARD и NAT. Как сказано:

Например, если вы хотите перенаправлять входящие HTTP-запросы на свой выделенный HTTP-сервер Apache по адресу 172.31.0.23, используйте следующую команду: как пользователь root:

~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 172.31.0.23:80

Вот что происходит:

  • ваш linux-шлюз получает пакет с вашего маршрутизатора. Заголовок пакета имеет:
    • source: x.x.x.x:y (IP-адрес отправителя из Интернета и порт источника, используемый для передачи пакетов)
    • назначение: 192.168.1.1:80 (при условии, что ваш IP-адрес шлюза linux на внешнем сетевом адаптере, т.е. p1p1)
  • ваш linux-шлюз применяет цепочку PREROUTING, чтобы найти соответствие. Предполагая, что вы набрали то, что указано выше, пакет соответствует правилу, а затем вызывает (переходы -j) в функцию DNAT (адресный сетевой адрес), который изменяет назначение заголовка пакета от начального 192.168.1.1:80 до 172.31.0.23:80.
  • тогда пакет прибывает в Решение о маршрутизации. Назначение пакета теперь 172.31.0.23:80.
    • Ваш linux-шлюз спрашивает себя: это для меня (192.168.1.1:80)? Нет, поэтому я не отправит его в цепочку INPUT.
    • = > Я отправлю его в цепочку FORWARD.
  • поскольку вы установили правила в FORWARD все в своей локальной сети (таблица filter chain FORWARD), пакет должен быть перенаправлен на ваш локальный HTTP-сервер Apache (например).

Надеюсь, что это поможет понять немного больше о том, как работает внутренняя маршрутизация с помощью iptables.

Ответ 2

INPUT, FORWARD и OUTPUT являются отдельными. Пакет попадет только в одну из трех цепей.

Если пункт назначения находится на этом сервере, он попадает в цепочку INPUT. Если его источник находится на этом сервере, он обращается к OUTPUT. Если его источником и пунктом назначения являются и другие машины, они маршрутизируются через сервер и затем попадают в цепочку FORWARD.

Ответ 3

поскольку у вас есть определенная политика запрета FORWARD: FORWARD DROP [0: 0] со следующими правилами, вы включаете FORWARD только для определенных подсетей: -A FORWARD -s 192.168.2.0/24 -j ПРИНЯТЬ -A FORWARD -d 192.168.2.0/24 -j ПРИНЯТЬ Таким образом, INPUT и OUTPUT связаны только для "серверных" IP