Я пытаюсь выяснить, почему изменение моей политики iptables по умолчанию влияет на то, что nmap видит при сканировании моего хоста.
Рассмотрим следующую настройку iptables:
iptables -F
iptables -A INPUT -p tcp -s 10.1.0.0/20 --dport 22 -j ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Давайте создадим карту с помощью nmap -p - 10.1.0.157
:
Nmap scan report for 10.1.0.157
Host is up (0.00059s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
5672/tcp open amqp
46010/tcp open unknown
Как и ожидалось, некоторые порты открыты. Добавление правила, специально отбрасывающего порт 111:
iptables -F
iptables -A INPUT -p tcp -s 10.1.0.0/20 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 111 -j DROP
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Полученные результаты:
Nmap scan report for 10.1.0.157
Host is up (0.00056s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp filtered rpcbind
5672/tcp open amqp
46010/tcp open unknown
Почему 111 отображается как отфильтрованное? Почему это вообще отображается? Если я изменю политику по умолчанию на DROP, я получу следующие результаты сканирования, как и ожидалось:
Nmap scan report for 10.1.0.157
Host is up (0.00052s latency).
Not shown: 65534 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Я что-то не понимаю в том, как политики по умолчанию работают в iptables, или это как-то связано с nmap?
Nmap показывает порты, для которых он не получает ответа, как «отфильтрованные». Это результат, когда для правила или политики установлено значение «DROP».
Причина, по которой порт 111 отображается в одном выходе, а не другой, находится в строке «Не показано:». Какое бы ни было наиболее распространенное состояние порта («закрыто» или «отфильтровано», но не «открыто»), оно объединяется в эту строку со счетчиком. Поэтому, когда политика ACCEPT, и ничего не прослушивает (или если политика была REJECT), наиболее распространенным состоянием является «закрыто», что означает, что был получен пакет TCP RST. Правило DROP для порта 111 отличает его от других, поэтому он отображается.
Во втором случае, когда политика по умолчанию - DROP, результат для порта 111 не отличается от результата для любого другого порта, поэтому он объединяется с другими в строке «Не показано: 65534 отфильтрованных портов».
Вы можете получить более подробную информацию о том, почему порт отображается в определенном состоянии, добавив --reason
вариант. Также включение отладки с -d
развернет этот пакет "Не показано" и покажет вам каждый порт отдельно (много вывода!).