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

Linux iptables не работает

Я обновил свои iptables в Ubuntu 10.04, но, похоже, это не влияет на открытые порты.

Когда я бегу iptables --listпоявится следующая строка

Chain INPUT (policy DROP)
target   prot opt source              destination
ACCEPT   all  --  anywhere            anywhere         tcp dpt:smtp

Однако, когда я пытаюсь выполнить сканирование порта, чтобы увидеть, открыт ли порт 25, он отвечает как закрытый. Может ли что-то еще вверх по течению блокировать порт? Или мне нужно что-то сделать, чтобы «перезапустить» брандмауэр после изменения таблиц IP?

Linux Noob здесь, если он не совсем проходит ...

Если netstat -tapnl | grep 25 не возвращает что-то вроде 0: 0: 0: 0:25 (или конкретный IP-адрес, который вы запрашиваете), это означает, что ничего не прослушивает этот порт в IPTables, это не проблема - или, по крайней мере, не только проблема.

Предыдущее предположение, что у вас нет службы, прослушивающей порт 25, наиболее вероятно.

Другое предложение - проверить и правила, и интерфейсы. Например, запустите:

iptables -L -v

также покажет интерфейсы. Следовательно, могут быть разные правила для разных интерфейсов (особенно для интерфейса lo, который обычно будет ACCEPT для всего трафика).

Некоторые дистрибутивы Linux (в первую очередь я смотрю на свою установку RHEL) устанавливают sendmail для прослушивания только на локальном хосте. Поэтому, если бы я выполнял сканирование портов с другого компьютера, он вернулся бы как закрытый.

Кроме того, некоторые интернет-провайдеры (здесь я смотрю на своего Cox) блокируют входящие 25. Так что, если я сканировал с веб-сканера, такого как GRC's Shields Up, он вернется, как если бы я установил его на DROP вместо accept. Они делают это как способ борьбы со спамом во всем Интернете. У вашего интернет-провайдера может быть политика для отправки обратно сообщения о закрытии порта вместо того, чтобы позволить вам ответить на него.

Вероятно, он отвечает как закрытый, потому что у вас нет службы, прослушивающей этот порт.

Просто чтобы предоставить немного больше информации об использовании netstat. Параметр командной строки -p (как предложено выше) заставит netstat отобразить программу, связанную с сокетом / портом. В этом случае exim должен появиться в выводе, указывая, что он отвечает за соединение через порт 25. Но есть немного тонкая деталь об использовании этой опции. Из-за безопасности netstat покажет вам имена программ только для ваших приложений. Так что, если вы еще не проводите тестирование как root, netstat не покажет вам, какое приложение владеет портом 25. В общем, не следует привыкать бегать с root-правами, но в этом случае это полезный шаг.

Еще одна деталь, отчасти связанная с этим, - использование telnet. Это приложение часто упускают из виду. Очень быстрый тест, чтобы увидеть, делает ли что-либо порт 25, - просто подключиться к нему через telnet (это отлично работает для любого количества других служебных портов). Попробуйте подключиться по telnet к localhost, 127.0.0.1, вашему IP и имени хоста. Причина, по которой я указываю на это, заключается в том, что exim вполне мог работать и, возможно, каким-то образом открыл порт 25, но если что-то сломалось в exim (скажем, кто-то неправильно испортил файл конфигурации), использование netstat не будет говорю вам порт 25 не говорит. И быстрый телнет будет.

Если вы хотите почувствовать unixy old school, вы можете использовать nc для той же цели. Или, если вы предпочитаете подход кувалды, посмотрите справочную страницу для nmap (на самом деле я не рекомендую смотреть эту справочную страницу для нового пользователя, хотя nmap ужасно сложен). А для большего удовольствия попробуйте подключиться к ssh-порту через telnet, это поучительно.

Пытаться

$ lsof -i :25

Если вы не получаете никаких результатов, значит, у вас нет почтового сервера (или какой-либо службы, работающей на этом порту).

Помню, у меня была похожая проблема с postfix. Хотя postfix был запущен, сканирование портов не показало, что порт 25 открыт. Проблема заключалась в том, что в файле была прокомментирована следующая строка

/etc/postfix/master.cf

smtp      inet  n       -       -       -       -       smtpd

раскомментируйте это.

Chain INPUT (policy DROP)
target   prot opt source              destination
ACCEPT   all  --  anywhere            anywhere         tcp dpt:smtp

Какие подключения должны быть разрешены? Что уже разрешено?

  • SYN - входящий, разрешенный
  • SYN / ACK - Outbound, проверьте цепочку OUTPUT -> ACCEPT?
  • ACK - входящий, разрешенный
  • Соединение данных - не работает на порту 25. Это означает, что для разрешения этого трафика мы должны создать правило, которое также принимает СВЯЗАННЫЕ или УСТАНОВЛЕННЫЕ соединения.

В основном вы можете изменить свое правило на следующее:

iptables -A INPUT -p tcp --dport 25 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT