Назад | Перейти на главную страницу

хост недоступен через http, подозревается проблема с iptables

Я пытаюсь перенастроить httpd свой виртуальный частный сервер, но не могу получить к нему доступ. curl на самом сервере работает, но при попытке подключиться к серверу с помощью chrome на другом компьютере появляется сообщение об ошибке «Этот сайт слишком долго отвечал».

У моего vps есть centos 7, но, как ни странно, на нем установлены iptables, а не firewalld.

это содержимое моего файла / etc / sysconfig / iptables, нужно ли мне что-то менять, чтобы разрешить http на 80-м порту и https на 443?

# Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019
*raw
:PREROUTING ACCEPT [654:52805]
:OUTPUT ACCEPT [577:72088]
COMMIT
# Completed on Wed Mar 27 19:30:55 2019
# Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019
*mangle
:PREROUTING ACCEPT [654:52805]
:INPUT ACCEPT [654:52805]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [577:72088]
:POSTROUTING ACCEPT [577:72088]
COMMIT
# Completed on Wed Mar 27 19:30:55 2019
# Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [44:9111]
-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 multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Mar 27 19:30:55 2019
# Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019
*nat
:PREROUTING ACCEPT [392:22692]
:POSTROUTING ACCEPT [14:1008]
:OUTPUT ACCEPT [14:1008]
COMMIT
# Completed on Wed Mar 27 19:30:55 2019

Похоже, ваше правило «разрешить» стоит после правила «отклонить». Эта часть:

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Вам нужно переместить это разрешающее правило на одну строчку вверх.

Для устранения неполадок вы можете сделать следующее:

sudo watch -n1 -d iptables -t filter -L INPUT -nvx --line-numbers

Вы увидите что-то вроде этого:

Every 1.0s: iptables -t filter -L INPUT -nvx                                                         localhost: Mon Apr  1 14:08:04 2019

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1          12      956 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2           0        0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
3           3      281 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4           1       90 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
5           0        0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443 ctstate NEW,ESTABLISHED

Теперь посмотрите, сколько пакетов проходит через каждое правило, и посмотрите, какой из них вырастет при запуске теста. Это может быть ваш намек.

Чтобы исправить это, вы можете изменить правила онлайн. Например, добавьте это последнее правило как правило номер 4, а затем удалите последнее правило.

С выходными данными выше вы хотите вставить «разрешающее правило» как правило номер 4.

$ sudo iptables -I INPUT 4 -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Теперь проверьте правила еще раз

$ sudo iptables -L INPUT -n --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443 ctstate NEW,ESTABLISHED
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443 ctstate NEW,ESTABLISHED

А теперь удалите последнее правило, которое устарело.

$ sudo iptables -D INPUT 6

Еще раз проверьте свой вывод.

$ sudo iptables -t filter -L INPUT --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443 ctstate NEW,ESTABLISHED
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Честно говоря, я не вижу, чтобы правила по умолчанию часто "ОТКЛОНЯЛИ". Более распространенным является «DROP», и вы можете установить его как политику по умолчанию. Например,

$ sudo iptables -t filter -P INPUT DROP

Затем вы можете полностью удалить правило "отклонить"

$ sudo iptables -t filter -D INPUT -j REJECT --reject-with icmp-host-prohibited
$ sudo iptables -L INPUT -n
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443 ctstate NEW,ESTABLISHED

Теперь убедитесь, какая у вас ОС, но, вероятно, вы сможете sudo service iptables save чтобы сохранить изменения времени выполнения в /etc/sysconfig/iptables.