60

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

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

但是,从本地主机,我可以使用 telnet (80),甚至可以在其自身上使用 lynx,并且可以毫无问题地获得服务。从外面(我的房子、我的学校、当地的咖啡店等),telnet 在 22 上连接,但不是 80。

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

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

我相信我应该这样做。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   
4

11 回答 11

111

万一还没有解决。你的 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
于 2013-10-24T14:50:40.827 回答
28

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

由于 firewalld 是 iptables 的“包装器”,因此使用 antonio-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

于 2016-12-13T02:34:27.007 回答
6

SELinux 默认阻止 Apache(以及所有 Apache 模块)进行远程连接。

# setsebool -P httpd_can_network_connect=1
于 2012-11-26T05:26:27.607 回答
3

尝试在 iptables.config 表中进行以下设置

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

运行以下命令重启iptable服务

service iptables restart

将 httpd.config 文件更改为

Listen 192.170.2.1:80

重新启动apache。

现在试试。

于 2012-08-15T21:33:18.937 回答
2

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

于 2016-06-21T03:50:30.937 回答
1

这会起作用: -- 用于 REDHAT : 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
于 2014-03-09T20:37:01.037 回答
1

尝试禁用 iptables:service iptables stop

如果可行,请在防火墙规则中启用 TCP 端口 80:从 root 运行 system-config-selinux,并在防火墙上启用 TCP 端口 80 (HTTP)。

于 2012-05-23T23:38:54.380 回答
1

在 apache 配置文件(httpd.conf、apache2.conf、listen.conf、...)中搜索 LISTEN 指令,如果你看到 localhost 或 127.0.0.1,那么你需要用你的公共 ip 覆盖。

于 2012-05-23T23:31:33.163 回答
1

这就是我们从外部访问 apache 的方法:

sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
sudo service iptables restart
于 2016-03-23T01:55:58.243 回答
0

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

Listen 192.170.2.1:80

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

为 Apache 绑定文档

于 2012-05-23T23:34:07.580 回答
-1

禁用 SELinux

$ sudo setenforce 0
于 2012-09-17T15:24:30.430 回答