apache不接受来自localhost外部的传入连接

Phi*_*ldo 57 linux apache webserver centos

我在rackspace上启动了一个CentOS服务器并执行了yum install httpd'd.然后services httpd start.所以,只是准系统.

我可以通过ssh(22)远程访问其IP地址没问题,所以DNS或任何东西都没问题(我认为......),但是当我尝试连接端口80(通过浏览器或其他东西)时,我得到了拒绝连接.

但是,从localhost,我可以使用telnet(80),甚至可以使用lynx,并且可以毫无问题地使用它.从外面(我的房子,我的学校,当地的咖啡店等),telnet连接22,但不是80.

我用netstat -tulpn(< - 我不会撒谎,我不明白这-tulpn部分,但这就是互联网告诉我要做的......)并且看到

tcp    0    0 :::80     :::*    LISTEN    -                   
Run Code Online (Sandbox Code Playgroud)

因为我相信我应该.该httpd.confListen 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   
Run Code Online (Sandbox Code Playgroud)

ant*_*nie 108

如果还没有解决.你的iptables说:

州相关,已建立

这意味着它只允许传递已经建立的连接......这是由您建立的,而不是由远程机器建立的.然后,您可以在下一个规则中看到此例外情况:

state NEW tcp dpt:ssh
Run Code Online (Sandbox Code Playgroud)

这仅适用于ssh,因此您应该为http添加类似的规则/行,您可以这样做:

state NEW tcp dpt:80
Run Code Online (Sandbox Code Playgroud)

您可以这样做:

sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,我选择在第四行添加新规则)

请记住,在编辑文件后,您应该像这样保存:

sudo /etc/init.d/iptables save
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这节省了我2天的头痛 (5认同)
  • 谢谢 !!似乎对于CentOS 6.5(64位),默认安装防火墙...... (4认同)
  • 在Fedora中,使用sudo/sbin/iptables-save来保存iptables中的更改 (4认同)
  • 很棒的答案...就像一个靶心...... +1 (3认同)

Jos*_*osh 18

现在,CentOS 7默认使用firewalld.但所有答案都集中在iptables上.所以我想添加一个与firewalld相关的答案.

由于firewalld是iptables的"包装器",使用antonio-fornie的答案似乎仍然有效,但我无法"保存"这个新规则.因此,一旦重启防火墙,我就无法连接到我的apache服务器.幸运的是,使用firewalld命令进行等效更改实际上要简单得多.首先检查firewalld是否正在运行:

firewall-cmd --state
Run Code Online (Sandbox Code Playgroud)

如果它正在运行,响应将只是一行"运行".

要在公共区域上临时允许http(端口80)连接:

sudo firewall-cmd --zone=public --add-service=http
Run Code Online (Sandbox Code Playgroud)

以上不会被"保存",下次重新启动firewalld服务时,它将返回默认规则.您应该使用此临时规则进行测试,并确保它在继续之前解决您的连接问题.

要永久允许公共区域上的http连接:

sudo firewall-cmd --zone=public --permanent --add-service=http
Run Code Online (Sandbox Code Playgroud)

如果你在没有执行"临时"命令的情况下执行"永久"命令,则需要重新启动firewalld以获取新的默认规则(对于非CentOS系统,这可能会有所不同):

 sudo systemctl restart firewalld.service
Run Code Online (Sandbox Code Playgroud)

如果这还没有解决您的连接问题,可能是因为您的界面不在"公共区域".以下链接是了解firewalld的重要资源.它详细介绍了如何检查,分配和配置区域:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7


小智 5

SELinux默认阻止Apache(因此所有Apache模块)进行远程连接.

# setsebool -P httpd_can_network_connect=1
Run Code Online (Sandbox Code Playgroud)