6

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

Есть ли что-то в следующем, что может быть причиной проблемы?

РЕДАКТИРОВАТЬ: Если я остановлю 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

2 ответа2

7

Выходные данные 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 .

РЕДАКТИРОВАТЬ: ОП заметил, что новые правила теряются после перезапуска iptables .

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

# /sbin/service iptables save

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

0

Я не владелец 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/Port_forwarding

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .