apache не принимает входящие соединения извне localhost

Я загрузил сервер CentOS на rackspace и выполнил yum install httpd ' d. Тогда services httpd start. Значит, только голые кости.

я могу получить доступ к его IP-адресу удаленно через ssh (22) без проблем, поэтому нет проблем с DNS или чем-то еще (я думаю...), но когда я пытаюсь подключиться к порту 80 (через браузер или что-то) я получаю отказ в соединении.

из localhost, однако, я могу использовать telnet (80) или даже lynx на себе и получить обслуживание без проблем. Снаружи (мой дом, моя школа, кафе и т. д...), telnet подключается на 22, но не 80.

я использую netstat -tulpn (-tulpn часть, но это то, что интернет мне сказал...) и Смотри

tcp    0    0 :::80     :::*    LISTEN    -                   

как я считаю, я должен. The httpd.conf говорит Listen 80.

я services httpd restartмного раз.

честно говоря, я понятия не имею, что делать. Нет никакого способа, чтобы Rackspace имел брандмауэр на входящем порту 80 запросы. Я чувствую, что упускаю что-то глупое, но я загрузил сервер barebones дважды и сделал абсолютный минимум, чтобы заставить это функционировать, думая, что я испортил все с моим мастерством, но ни один не работал.

любая помощь очень ценится! (И извините за длинный скучный пост...)

редактировать Меня попросили опубликовать вывод 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 

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   

11 ответов


в случае, если еще не решено. Ваши iptables говорят:

состояние связано, установлено

что означает, что он пропускает только уже установленные соединения... это установлено вами, а не удаленными машинами. Тогда вы можете увидеть исключения из этого в следующих правилах:

state NEW tcp dpt:ssh

который считается только для ssh, поэтому вы должны добавить аналогичное правило / строку для http, что вы можете сделать следующим образом:

state NEW tcp dpt:80

что вы можете сделать, как это:

sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

(в этом случае я выбираю добавить новое правило в четвертую строку)

помните, что после редактирования файла вы должны сохранить его следующим образом:

sudo /etc/init.d/iptables save

CentOS 7 теперь использует firewalld по умолчанию. Но все ответы сосредоточены на iptables. Поэтому я хотел добавить ответ, связанный с firewalld.

поскольку выполнение firewalld-это "обертка" для iptables, используя Антонио-fornie ответ по-прежнему, кажется, работает, но я не смогла "сохранить", что новое правило. Поэтому я не смог подключиться к моему серверу apache, как только произошел перезапуск брандмауэра. К счастью, на самом деле гораздо проще сделать эквивалентное изменение с помощью команд firewalld. Первый проверьте, работает ли firewalld:

firewall-cmd --state

если он работает, ответ будет просто одной строкой, которая говорит "работает".

чтобы разрешить соединения http (порт 80) временно в общедоступной зоне:

sudo firewall-cmd --zone=public --add-service=http

вышеуказанное не будет "сохранено", в следующий раз, когда служба firewalld будет перезапущена, она вернется к правилам по умолчанию. Вы должны использовать это временное правило для проверки и убедиться, что оно решает проблему подключения, прежде чем двигаться дальше.

навсегда разрешить http-соединения в общедоступной зоне:

sudo firewall-cmd --zone=public --permanent --add-service=http

если вы выполняете команду "постоянный" без выполнения команды" временный", вам нужно перезапустить firewalld, чтобы получить новые правила по умолчанию (это может отличаться для систем, отличных от CentOS):

 sudo systemctl restart firewalld.service

если это не решило ваши проблемы с подключением, это может быть потому, что ваш интерфейс не находится в "общественной зоне". Следующая ссылка-отличный ресурс для изучения firewalld. Он идет более подробно, как проверить, назначение и настройка зон: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7


SELinux предотвращает Apache (и, следовательно, все модули Apache) от создания удаленных подключений по умолчанию.

# setsebool -P httpd_can_network_connect=1

попробуйте С ниже настройки в iptables.таблице config

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

выполните команду ниже, чтобы перезапустить службу iptable

service iptables restart

изменить httpd.файл конфигурации в

Listen 192.170.2.1:80

повторно запустите apache.

попробовать сейчас.


если вы используете RHEL / CentOS 7 (OP не был, но я думал, что поделюсь решением для моего случая), то вам нужно будет использовать firewalld вместо службы iptables, упомянутой в других ответах.

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

а затем проверьте, что он работает с:

firewall-cmd --permanent --zone=public --list-all

он должен перечислить 80/tcp под ports


Поиск директивы LISTEN в конфигурационных файлах apache (httpd.конф, apache2 не.конф, послушай.conf,...) и если вы видите localhost или 127.0.0.1, то вам нужно заменить ваш публичный IP.


попробуйте отключить iptables: service iptables stop

Если это работает, включите TCP-порт 80 в правила брандмауэра: запустите system-config-selinux из root и включите TCP-порт 80 (HTTP) на брандмауэре.


это будет работать: -- для REDHAT использование : кошка "/и т. д./В sysconfig/iptables в"

iptables -I  RH-Firewall-1-INPUT -s 192.168.1.3  -p tcp -m tcp --dport 80 -j ACCEPT

следовал по

sudo /etc/init.d/iptables save

это то, что сработало для нас, чтобы получить доступ к apache извне:

sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
sudo service iptables restart

установите apache в Список для определенного интерфейса и порта, как показано ниже:

Listen 192.170.2.1:80

также проверьте записи Iptables и TCP-оберток, которые могут мешать хосту с внешними хостами, обращающимися к этому порту

Привязка Документов Для Apache


Отключить SELinux

$ sudo setenforce 0