
Я настраиваю новый веб-сервер с 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/Переадресация_портов