Linux apache不接受来自本地主机外部的传入连接

Linux apache不接受来自本地主机外部的传入连接,linux,apache,webserver,centos,Linux,Apache,Webserver,Centos,我已经在rackspace上启动了CentOS服务器并执行了yum-install-httpd'd。然后服务httpd启动。所以,只是赤裸裸的 我可以通过ssh远程访问它的IP地址(22)并没有问题,所以DNS或任何东西都并没有问题(我想…),但当我尝试在端口80上连接(通过浏览器或其他方式)时,连接被拒绝 然而,从localhost,我可以使用telnet(80),甚至lynx本身,并且可以毫无问题地得到服务。从外面(我的房子,我的学校,当地的咖啡馆等),telnet连接22,但不是80 我使

我已经在rackspace上启动了CentOS服务器并执行了
yum-install-httpd
'd。然后
服务httpd启动
。所以,只是赤裸裸的

我可以通过ssh远程访问它的IP地址(22)并没有问题,所以DNS或任何东西都并没有问题(我想…),但当我尝试在端口80上连接(通过浏览器或其他方式)时,连接被拒绝

然而,从localhost,我可以使用telnet(80),甚至lynx本身,并且可以毫无问题地得到服务。从外面(我的房子,我的学校,当地的咖啡馆等),telnet连接22,但不是80


我使用
netstat-tulpn
(在apache配置文件(httpd.conf,apache2.conf,LISTEN.conf,…)中搜索LISTEN指令,如果您看到localhost或127.0.0.1,则需要使用公共ip覆盖。

将apache设置为列出特定接口和端口,如下所示:

Listen 192.170.2.1:80
还要检查Iptables和TCP Wrappers条目,这些条目可能会干扰主机上访问该端口的外部主机


尝试禁用iptables:服务iptables停止

如果这样做有效,请将TCP端口80启用到防火墙规则:
从根目录运行系统配置selinux,并在防火墙上启用TCP端口80(HTTP)。

尝试iptables.config表中的以下设置

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
运行以下命令重新启动iptable服务

service iptables restart
将httpd.config文件更改为

Listen 192.170.2.1:80
重新启动apache

现在试试。

禁用SELinux

$ sudo setenforce 0
默认情况下,SELinux阻止Apache(以及所有Apache模块)进行远程连接

# setsebool -P httpd_can_network_connect=1

如果问题尚未解决,您的iptable会显示:

与国家有关,已建立

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

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
你可以这样做:

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
(在本例中,我选择在第四行添加新规则)

请记住,编辑文件后,应按如下方式保存:

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
这将有助于: --红帽 使用:cat“/etc/sysconfig/iptables”

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

如果您使用的是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

现在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
sudo firewall-cmd --zone=public --permanent --add-service=http
上述内容将不会“保存”,下次重新启动firewalld服务时,它将返回默认规则。您应该使用此临时规则进行测试,并确保它在继续之前解决了您的连接问题

要在公用区域上永久允许http连接,请执行以下操作:

sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=http
如果执行“永久”命令而不同时执行“临时”命令,则需要重新启动firewalld以获取新的默认规则(对于非CentOS系统,这可能有所不同):


如果这还没有解决您的连接问题,可能是因为您的接口不在“公共区域”。以下链接是学习firewalld的一个很好的资源。它详细介绍了如何检查、分配和配置区域:

谢谢您的回复!我禁用了iptables,但它仍然无法工作…:(还有其他想法吗?已经尝试禁用selinux了吗?尝试:setEnforce0。您是否读取了/var/log/messages syslog文件或/var/log/httpd/error\u log httpd erro log?为什么要责怪Apache(Tomcat)?必须有一些防火墙或iptable设置正在端口80上丢弃外部数据包。我不认为Apache会达到那个级别来过滤数据包,最好让底层操作系统提供的网络实用程序来完成这项工作。或者它会这样做吗?哦,我明白了!绑定文档,tomcat提供了这些选项。最好仔细查看它以找到其详细信息。对于O、 我将其设置为“Listen 5.95.203.157”,然后运行“service httpd restart”和99)无法分配请求的地址:make_sock:无法绑定到地址5.95.203.157:80没有可用的侦听套接字,正在关闭。知道这可能意味着什么吗?该地址分配给该主机上的接口了吗?我检查了httpd.conf,其中没有任何可疑之处(同样,使用默认的一切来限制我的错误)。但我找不到apache2文件夹…奇怪。我不知道这是怎么回事吗?它通常在/etc/?中,而且“yum-install-httpd”不应该处理它吗?奇怪…谢谢,这救了我两天的头痛谢谢!!似乎对于CentOS 6.5(64位),默认情况下安装了防火墙…先生,您是人类的真正英雄和救世主,是文明在最黑暗时代的最后希望。谢谢!!11,顺便说一句,保存命令不起作用(找不到命令):(在Fedora中,使用sudo/sbin/iptables save保存iptables中的更改您可以添加这样的端口
firewall cmd--zone=public--add port=12345/tcp