VirtualBox 和 CentOS 6,无法连接到 httpd

VirtualBox 和 CentOS 6,无法连接到 httpd

我正在尝试在 Windows 7 主机上使用 CentOS 6 Minimalist Install 和 VirtualBox 4.1.4r74291 在 VM 中构建 CI 服务器。

在你提问之前:

  • selinux 目前已被禁用(计划在问题解决后重新启用)
  • 我可以通过 ssh 进入它,也可以使用 git 来推送/拉取它
  • 我甚至可以使用 lynx 访问其中的 localhost:80 和 localhost:8080。(我安装了 512MB 内存,因此没有 GUI 可以执行任何操作。)
  • 我还可以 ping/lynx google.com 等等。

以下是一些命令输出:

ifconfig -a eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:2B:4E:3C
      inet addr:192.168.1.104  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::a00:27ff:fe2b:4e3c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:320629 errors:0 dropped:0 overruns:0 frame:0
      TX packets:171826 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:445888239 (425.2 MiB)  TX bytes:14540682 (13.8 MiB)

nmap localhost
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000080s latency).
    Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
    Not shown: 994 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    25/tcp   open  smtp
    80/tcp   open  http
    8009/tcp open  ajp13
    8080/tcp open  http-proxy
    9418/tcp open  git

    Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

iptables -vL
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
     315K  441M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  any    any     anywhere             anywhere
     6010  281K ACCEPT     all  --  lo     any     anywhere             anywhere
        4   208 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh
     8676  668K REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited

    Chain OUTPUT (policy ACCEPT 184K packets, 13M bytes)
     pkts bytes target     prot opt in     out     source               destination

netstat -aln | grep 80
    tcp        0      0 :::8009                     :::*                        LISTEN
    tcp        0      0 :::8080                     :::*                        LISTEN
    tcp        0      0 :::80                       :::*                        LISTEN
    tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN
    unix  2      [ ACC ]     STREAM     LISTENING     8093   public/cleanup
    unix  3      [ ]         STREAM     CONNECTED     8099
    unix  3      [ ]         STREAM     CONNECTED     8098
    unix  3      [ ]         STREAM     CONNECTED     8096
    unix  3      [ ]         STREAM     CONNECTED     8095
    unix  3      [ ]         STREAM     CONNECTED     8092
    unix  3      [ ]         STREAM     CONNECTED     8091
    unix  3      [ ]         STREAM     CONNECTED     8089
    unix  3      [ ]         STREAM     CONNECTED     8088
    unix  2      [ ]         DGRAM                    8054
    unix  2      [ ]         DGRAM                    8013

来自主持人:

telnet 192.168.1.104 80
    Could not open connection to the host, on port 80: Connect failed

因此,两个端口都是打开的,并且看起来防火墙允许从外部连接这些端口(但是,说实话,我只是猜测。我真的不知道如何读取输出iptables -L。)但是,每当我尝试从主机使用 Chrome 访问 192.168.1.104:(80|8080) 时,我都会得到臭名昭著的:

Oops! Google Chrome could not connect to 192.168.1.104

这是可能的,因为我以前在 Kubuntu 安装中(尽管如此,在 .1.103 上)已经这样做过,并且我试图移动到内存占用更小、安全性更高的虚拟机。

有什么建议吗?需要更多信息吗?我现在洗耳恭听。

编辑:

按照 Janne 的回答,httpd 现在正在监听192.168.1.104:80。因此,我无法再 lynx 到 localhost,并且执行wget 127.0.0.1会给我一个拒绝连接的错误。这是合适的,因为现在我必须 才能lynx/wget 192.168.1.104获得之前使用 127.0.0.1 获得的结果(分别是来自 Apache 的“它有效!”页面和 index.html 的下载。)也许还有另一个线索?

答案1

我没有在您的 iptable4s 中看到允许端口 80 上的连接的规则(除了 lo 上的全面允许)尝试打开端口 80

iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT

或者

iptables -I INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT

如果您想限制对 eth1 上的连接的访问​​。

答案2

这纯属瞎猜:我猜你的 Apache 正在听127.0.0.1而不是听192.168.1.104

如果netstat -tlnp返回 Apache 正在监听127.0.0.1:80,那么它根本不会响应 eth1 流量。

参见Listenhttpd.conf 中的指令。它应该显示192.168.1.104:80

编辑:嘿,这肯定与 iptables 有关。当您说“我可以使用 git”时,您的意思是您通过 ssh 使用 git 吗?

目前,您的 iptables INPUT 规则似乎只允许与 ssh 端口建立新连接,而不允许与端口 80 建立新连接。请尝试将其添加到您的 iptables 规则中:

iptables -I INPUT 1 -i eth1 -p tcp -d 0/0 --dport 80 -j ACCEPT

相关内容