Назад | Перейти на главную страницу

debian VM отказывается от всего трафика, кроме http

У меня есть виртуальная машина с новой установкой Debian (wheezy), и я установил на нее node и mongo. Виртуальная машина использует мостовое сетевое соединение, поэтому я ожидал, что смогу указать браузеру моих хост-машин на IP-адрес виртуальной машины Debian (порт 1337 для моего примера узла или порт 28017 для моей страницы статуса mongo) и увидеть один из две службы (узел или монго). Однако мои запросы отклоняются.

Насколько я могу судить, Debian по умолчанию разрешает весь трафик, и вам нужно вручную настроить iptables для сброса трафика. Я проверил iptables, и он говорит, что он настроен на пропуск всего. Выглядит это так:

root@devbox:/home/jlewis# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

В качестве теста я установил nginx и смог без проблем попасть на целевую страницу nginx с моего хоста, поэтому очевидно, что http-трафик разрешен. Затем я настроил nginx для перенаправления всего восходящего трафика на mongo - никаких проблем, я смог увидеть страницу статуса. Затем я сделал то же самое для моего примера сервера узлов, и снова без проблем. Итак, http-трафик в порядке, но весь остальной трафик заблокирован.

Кто-нибудь знает, почему debian может отказываться от всего остального трафика, кроме iptables, настроенного на его сброс?

РЕДАКТИРОВАТЬ - вывод netstat -nltp:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:28017         0.0.0.0:*               LISTEN      1762/mongod     
tcp        0      0 0.0.0.0:51028           0.0.0.0:*               LISTEN      1541/rpc.statd  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2462/sshd       
tcp        0      0 127.0.0.1:1337          0.0.0.0:*               LISTEN      2794/node       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2274/exim4      
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1762/mongod     
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1510/rpcbind    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2189/nginx      
tcp6       0      0 :::22                   :::*                    LISTEN      2462/sshd       
tcp6       0      0 :::45335                :::*                    LISTEN      1541/rpc.statd  
tcp6       0      0 ::1:25                  :::*                    LISTEN      2274/exim4      
tcp6       0      0 :::111                  :::*                    LISTEN      1510/rpcbind    

Упомянутые вами порты 1337 и 28017 (а также 25) прослушиваются не на всех интерфейсах, а только на 127.0.0.1 или localhost. Таким образом, к ним нельзя получить доступ за пределами локальной машины. По соображениям безопасности обычно это то, что вам нужно.

Напротив, службы на портах 22, 80, 111, 45335 и 51028 привязаны к 0.0.0.0 или :: и, таким образом, доступны для всего мира.

Если вы действительно хотите, чтобы эти службы были доступны всему миру, вам придется настроить их как таковые, следуя их собственным соответствующим директивам конфигурации.

Я не могу (пока) комментировать, чтобы попросить разъяснений ... все еще работаю над своей репутацией, но вот оно:

Я могу представить следующие вещи, которые помогут вам узнать:

  • попробуйте убедиться, что процессы не только прослушивают localhost (netstat -nltp и / или nmap)
  • внимательно посмотрите на ошибку, которую вы получаете при попытке доступа к службам: теряются ли пакеты TCP SYN? (tcpdump) или вы вообще получаете ответ ICMP?

Это должно помочь вам получить больше информации и, возможно, уточнить вопрос.

[редактировать]

Как показывает вывод netstat и как описано в комментариях: прослушивание 127.0.0.1 означает, что они будут доступны только с локального хоста (как видно из виртуальной машины), и они должны быть привязаны либо к 0.0.0.0, либо к конкретному IP-адресу на виртуальной машине, который доступен с физического хоста.