Почему эти правила iptables блокируют http

Я только что установил apache на новую установку CentOS 6.5. Я ввел IP-адрес в адресную строку браузера, и он не смог подключиться. Затем я отключил iptables и обновился, и на этот раз я смог подключиться.

Итак, очевидно, что iptables блокирует трафик http (порт 80).

Итак, я посмотрел на правила iptables (не тронутые после новой установки Centos, помните):

[root@centos ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

Я не эксперт по iptables, но мне показалось, что я понял его достаточно хорошо, чтобы устранять неполадки в таких простых вещах, как эта. Но я запутался, потому что 3-я строка в цепочке INPUT такова:

ACCEPT     all  --  anywhere             anywhere            

Что, по-видимому, говорит «для любого протокола, из любого источника, в любое место назначения, принять»

Поэтому я ожидал, что смогу подключиться к веб-сайту (tcp, порт 80). Но я не могу. Так что я, должно быть, что-то неправильно понял о том, как работает iptables, или о значении листинга.

Кто-нибудь может объяснить, почему приведенные выше правила не разрешают входящие http-соединения?


person Daniel Howard    schedule 10.07.2014    source источник


Ответы (1)


Я понял это сам. Неудивительно, что я был сбит с толку — список не показывает всю историю. Я попробовал еще раз, используя опцию -v (подробный).

[root@centos ~]# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
81194  118M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    7   364 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh 
   21  2394 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited 

В частности, теперь он также показывает ИНТЕРФЕЙС. Третье правило, которое я считал исключительно разрешительным, на самом деле вовсе не является разрешающим, потому что оно применяется только к внутреннему петлевому адресу системы.

Таким образом, HTTP-запрос извне будет получен через интерфейс Ethernet, а не через петлю, 3-е правило не применяется, поэтому единственным совпадением является окончательное правило REJECT.

Надеюсь, это поможет кому-то не быть таким запутанным, как я.

person Daniel Howard    schedule 10.07.2014