Как проверить, открыт ли брандмауэр для порта, но не прослушивает ли он порт

Как проверить, открыт ли брандмауэр для порта, но не прослушивает ли он порт

Мы развернем новое приложение на сервере, и приложение будет прослушивать порт 8443. Мы попросили команду Network открыть брандмауэр для порта 8443 на этом сервере перед развертыванием приложения. В настоящее время нет приложения, прослушивающего этот конкретный порт на сервере.

Можно ли как-то убедиться, что брандмауэр открыт для порта 8443?

ОС: Linux/Windows

решение1

Если вы хотите проверить, можете ли вы сформировать TCP-соединение с удаленной машины, установите OpenCSW на ней и на целевой машине, и установите netcat на обеих. Вот синтаксис использования netcat для проверки TCP-соединений:

nc -vz targetServer portNum

Например, чтобы проверить SSH на «homeServer1»:

nc -vz homeserver1 22

Это позволяет вам тестировать подключение на уровне TCP с удаленной системы. Netcat также можно настроить на прослушивание порта, а не на работу в качестве клиента. Чтобы заставить его прослушивать TCP/8443:

На сервере, где будет размещено приложение:nc -l homeserver1 8443

На машине, которая находится за пределами брандмауэра:nc -vz homeserver.fqdn 8443

Вот пример успешного исполнения:

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
Connection to ditirlns01.ncat.edu 8443 port [tcp/pcsync-https] succeeded!

Неудачное исполнение:

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
nc: connect to ditirlns01.ncat.edu port 8443 (tcp) failed: Connection refused

решение2

Брандмауэрыдолженответьте сICMP-сообщениекогда они блокируют запрос. Однако это не обязательно так (вам будет интересноэта хорошая статья).

Вы можете проверить снаружи, чтобы увидеть, доступен ли порт через брандмауэр, и если да, прослушивается ли что-нибудь на нем. Вот три различных сценария, включающих запрос tcp, который вы можете наблюдать с помощью wireshark, или какого-либо другого анализатора пакетов, и что вы увидите:

1) Брандмауэр отклоняет запрос

Вы получаете ICMP-сообщение обратно, и инструмент, делающий запрос, должен немедленно сказать вам что-то по этому поводу («недоступен, запрещен администратором» и т. д.). Под «инструментом» я подразумеваю клиент, который вы используете для отправки запроса (я использовал telnet). Подробности сообщения 1 зависят от того, как настроен брандмауэр, но «порт недоступен», вероятно, является наиболее распространенным.

На это может указывать сообщение «Нет маршрута к хосту», но это также может указывать на более тонкие проблемы маршрутизации.

2) Брандмауэр сбрасывает пакет

Ответа нет, поэтому инструмент ждет, пока не истечет время ожидания или вам не станет скучно.

3) Брандмауэр пропускает пакеты (или брандмауэр отсутствует), но порт никто не прослушивает.

Вы получаете сообщение TCP RST/ACK обратно. Я предполагаю, что протокол TCP требует этого. Другими словами, если порт не прослушивается, сама ОС отправляет этот ответ. Может быть трудно отличить это от #1 только на основе того, что сообщает инструмент, потому что онможетговорят одно и то же в обоих случаях (однако, скорее всего, различают это как "отказано в подключении" и #1, "сеть недоступна"). Наблюдаемые в анализаторе пакетов на клиентской машине сценарии #1 (сообщение об отклонении ICMP) и #3 (сообщение TCP RST/ACK) явно различимы.

Единственный другой вариант здесь — пакет пропускается брандмауэром и что-то его прослушивает, поэтому вы получаете успешное соединение.

Другими словами: если ваша сеть в целом работает правильно, то если вы получаете #1 или #2, это означает, что брандмауэр активно блокирует доступ к порту. #3 произойдет, если ваш сервер не запущен, но порт доступен, и, конечно же (подразумеваемый) #4 — это успешное подключение.


  1. Например, «порт недоступен», «хост запрещен», различные другие комбинациихост/порт/админинедостижимо/запрещено; обратите внимание на них в сообщении, поскольку они являются явным указанием на работающий IP-брандмауэр.

решение3

С помощью этой команды можно netstatпроверить, открыт ли порт и прослушивается ли он.

Пример

$ netstat -anp | less
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:41716               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:17500               0.0.0.0:*                   LISTEN      3034/dropbox        
tcp        0      0 0.0.0.0:17501               0.0.0.0:*                   LISTEN      3033/dropbox        
tcp        0      0 127.0.0.1:2143              0.0.0.0:*                   LISTEN      3191/ssh                       
tcp        0      0 127.0.0.1:2025              0.0.0.0:*                   LISTEN      3191/ssh 

Вывод показывает процессы(самая крайняя справа колонка)которые прослушивают порты TCP. Номера портов — это числа, которые следуют за двоеточиями после IP-адресов (например, 0.0.0.0:111 будет портом 111).

IP-адреса показываютМестныйиИностранные адреса.Местныйбудет ваша система, покаИностранныйбудут любые адреса, подключающиеся либо к вашему TCP-порту, либо вы подключаетесь к одному из их TCP-портов.

Итак, в случае порта 22, это демон ssh, работающий в моей системе, этоСЛУШАНИЕдля подключений. Как только кто-то пытается подключиться к sshдемону, он разветвляет свою копию и перенаправляет это подключение на другой порт, оставляя TCP-порт 22 открытым для дополнительных подключений по мере их поступления.

решение4

Недавно я получил тот же запрос и зашел в тему. Мне удалось просканировать открытые порты на FW с помощью команды nc, вот так, как я запрашиваю ее вывод:

nc -v -w 1 -z -s *srcIP destIP port* 2>&1 | grep timed > /dev/null && echo closed || echo open

По сути, если я получаю сообщение «превышен интервал ожидания», это означает, что порт не открыт на FW.

Связанный контент