IT Share you

apache가 localhost 외부에서 들어오는 연결을 수락하지 않습니다.

shareyou 2020. 12. 14. 21:06
반응형

apache가 localhost 외부에서 들어오는 연결을 수락하지 않습니다.


랙 공간에서 CentOS 서버를 부팅하고 yum install httpd'd. 그런 다음 services httpd start. 그래서, 그저 베어 본들.

ssh를 통해 원격으로 IP 주소에 액세스 할 수 있습니다 (22). DNS 나 다른 것에는 문제가 없습니다 (제 생각에 ...).하지만 80 번 포트 (브라우저 등을 통해)에 연결하려고하면 연결이 거부되었습니다.

그러나 localhost에서는 telnet (80) 또는 lynx 자체를 사용하여 문제없이 서비스를받을 수 있습니다. 외부 (내 집, 학교, 지역 커피 숍 등)에서 텔넷은 22 개로 연결되지만 80 개는 연결되지 않습니다.

나는 netstat -tulpn(<-거짓말하지 않을거야, -tulpn부분을 이해하지 못하지만 인터넷이 나에게하라고 말한 것입니다 ...)보고보고

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

내가해야한다고 믿는대로. httpd.conf말한다 Listen 80.

나는 services httpd restart여러 번했다.

솔직히 어떻게해야할지 모르겠어요. 랙 공간에 들어오는 포트 80 요청에 방화벽이있는 방법은 없습니다. 나는 내가 어리석은 것을 놓치고 있다고 느낀다.하지만 나는 지금 베어 본 서버를 두 번 부팅했고, 내가 땜질로 일을 망쳤다 고 생각하지만 작동하지 않았다고 생각하기 위해 최소한의 작업을 수행했습니다.

어떤 도움이라도 대단히 감사합니다! (긴 바람이 부는 게시물에 대해 죄송합니다 ...)

편집 결과를 게시하라는 요청을 받았습니다 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   

아직 해결되지 않은 경우. 귀하의 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의 "래퍼"이므로 antonio-fornie의 대답을 사용하는 것은 여전히 ​​작동하는 것처럼 보이지만 새 규칙을 "저장"할 수 없습니다. 그래서 방화벽이 다시 시작 되 자마자 아파치 서버에 연결할 수 없었습니다. 다행히 실제로는 firewalld 명령을 사용하여 동등한 변경을 수행하는 것이 훨씬 더 간단합니다. 먼저 firewalld가 실행 중인지 확인하십시오.

firewall-cmd --state

If it is running the response will simply be one line that says "running".

To allow http (port 80) connections temporarily on the public zone:

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

The above will not be "saved", next time the firewalld service is restarted it'll go back to default rules. You should use this temporary rule to test and make sure it solves your connection issue before moving on.

To permanently allow http connections on the public zone:

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

If you do the "permanent" command without doing the "temporary" command as well, you'll need to restart firewalld to get your new default rules (this might be different for non CentOS systems):

 sudo systemctl restart firewalld.service

If this hasn't solved your connection issues it may be because your interface isn't in the "public zone". The following link is a great resource for learning about firewalld. It goes over in detail how to check, assign, and configure zones: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7


SELinux prevents Apache (and therefore all Apache modules) from making remote connections by default.

# setsebool -P httpd_can_network_connect=1

Try with below setting in iptables.config table

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

Run the below command to restart the iptable service

service iptables restart

change the httpd.config file to

Listen 192.170.2.1:80

re-start the apache.

Try now.


If you are using RHEL/CentOS 7 (the OP was not, but I thought I'd share the solution for my case), then you will need to use firewalld instead of the iptables service mentioned in other answers.

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

And then check that it is running with:

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

It should list 80/tcp under ports


Search for LISTEN directive in the apache config files (httpd.conf, apache2.conf, listen.conf,...) and if you see localhost, or 127.0.0.1, then you need to overwrite with your public ip.


Try disabling iptables: service iptables stop

If this works, enable TCP port 80 to your firewall rules: run system-config-selinux from root, and enable TCP port 80 (HTTP) on your firewall.


this would work: -- for 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

followed by

sudo /etc/init.d/iptables save

this is what worked for us to get the apache accessible from outside:

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

Set apache to list to a specific interface and port something like below:

Listen 192.170.2.1:80

Also check for Iptables and TCP Wrappers entries that might be interfering on the host with outside hosts accessing that port

Binding Docs For Apache


Disable SELinux

$ sudo setenforce 0

참고URL : https://stackoverflow.com/questions/10729247/apache-not-accepting-incoming-connections-from-outside-of-localhost

반응형