Подтвердить что ты не робот

Apache не принимает входящие соединения из-за пределов локального хоста

Я загрузил сервер 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    -                   

как мне кажется. httpd.conf говорит Listen 80.

У меня services httpd restart 'd много раз.

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

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

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

Ответ 1

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

состояние RELATED, ESTABLISHED

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

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

Ответ 2

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

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

firewall-cmd --state

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

Чтобы временно разрешить соединения 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

Ответ 3

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

# setsebool -P httpd_can_network_connect=1

Ответ 4

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

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

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

service iptables restart

измените файл httpd.config на

Listen 192.170.2.1:80

перезапустите apache.

Попробуйте сейчас.

Ответ 5

Найдите директиву LISTEN в конфигурационных файлах apache (httpd.conf, apache2.conf, listen.conf,...), и если вы видите localhost или 127.0.0.1, вам необходимо перезаписать свой общедоступный ip.

Ответ 6

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

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

Ответ 7

это сработает: - для REDHAT use: cat "/etc/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

Ответ 8

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

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

Ответ 9

Установите apache для отображения на конкретный интерфейс и введите что-то вроде ниже:

Listen 192.170.2.1:80

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

Связывание документов для Apache

Ответ 10

Если вы используете 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

Ответ 11

Отключить SELinux

$ sudo setenforce 0