CentOS 6 - iptables предотвращает веб-доступ через порт 80

CentOS 6 - iptables предотвращает веб-доступ через порт 80

Я настраиваю новый веб-сервер с CentOS 6.2 и не могу подключиться через веб. Все выглядит настроенным правильно httpd.confи Apache работает, поэтому я предполагаю, что это проблема iptables.

Есть ли что-либо из перечисленного ниже, что может быть причиной проблемы?

EDIT: Если я остановлю iptables, я смогу нормально подключиться, так что, должно быть, нужно что-то подправить ниже. Я уже запустил iptables -A INPUT -p tcp --dport 80 -j ACCEPT, сохранил и перезапустил iptables, но ничего не изменилось

# iptables -L
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
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

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

Следующий совет в ответе ниже:

[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov  8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

Дальнейшее редактирование: iptables-save ничего не показал, так как я запустил его после того, как остановил iptables! Итак, вот вывод:

# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 14:39:10 2012

решение1

В iptables-saveвыходных данных показана дополнительная информация для правила 3, не показанного рядом iptables -L:

Из iptables -Lвывода можно было бы подумать, чтовсетрафик принимается:

ACCEPT     all  --  anywhere             anywhere

но iptables-saveпоказывает:

-A INPUT -i lo -j ACCEPT

что означает, что он iptablesдействительно принимает весь трафик... но только с интерфейса обратной связи ( lo).

Вот почему HTTP-трафик никогда не достигает вашего веб-сервера: единственный разрешенный трафик — это установленные соединения в правиле 1, ICMP (например ping) в правиле 2: -A INPUT -p icmp -j ACCEPTи SSH в правиле 4 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT:.

Тогда все отвергается в правиле 5: -A INPUT -j REJECT --reject-with icmp-host-prohibited.

То есть весь HTTP-трафик отклоняется еще до достижения правила 6:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Исправлятьудалить правило 6 ( -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT):

iptables -D INPUT 6

и вставьте его (опция -I) как правило 5:

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

или импортируйте это:

# Generated by iptables-save v1.4.6 on Thu Nov  8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 16:46:28 2012

сохранив его в файл и выполнив iptables-restore < file.

EDIT: OP заметил, что новые правила теряются после перезапуска iptables.

Как объяснено здесь:http://wiki.centos.org/HowTos/Network/IPTables, каждый раз, когда мы обновляем правила, нам нужно их сохранять, поэтому выполните это:

# /sbin/service iptables save

чтобы сделать изменения постоянными. Теперь измененные правила будут загружены iptables.

решение2

Я не мастер iptables, но у меня настроено так, что я использовал отдельную пользовательскую цепочку для открытия портов:

iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT

Обязательно сохраните

iptables-save > /etc/iptables/iptables.rules

Загружать

iptables-restore < /etc/iptables/iptables.rules

^^ если демон не загружает его для вас. Я вижу, что вы сказали, что уже запустили метод, описанный выше (только для цепочки INPUT, которая, я думаю, не имеет значения), так что это заставляет меня думать, что вы, возможно, не сохраняете и не перезагружаете правильно. Ваш демон iptables работает правильно? Убедитесь, что после запуска вышеуказанных команд и использования iptables -L вы видите недавно добавленную цепочку и правило.


В ответ на ваши дальнейшие проблемы. iptables-save > location_of_rules Я не уверен, где это в CentOS. Но проверьте, есть ли там новая цепочка, используя iptables -L

Я также рекомендую проверить, не доступен ли ваш сайт. Для этого перейдите в веб-браузер (на компьютере) и введите URL http: //127.0.0.1/ <-Без пробела между : и // Если сайт доступен, то проблема в вашем маршрутизаторе. Вам нужно выполнить переадресацию портов, чтобы открыть порт в вашем брандмауэре.http://en.wikipedia.org/wiki/Переадресация_портов

Связанный контент