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-оберток, которые могут мешать хосту с внешними хостами, обращающимися к этому порту