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


29

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

В любом случае я могу убедиться, что брандмауэр открыт для порта 8443

ОС: Linux / Windows

Ответы:


16

Если вы хотите узнать, можете ли вы создать 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

Это (не вполне) решает вопрос о том, блокирует ли брандмауэр порт. Похоже, что ncотчеты «Отказано в соединении», когда порт доступен, но нет прослушивателя, и «Сеть недоступна», когда запрос был переброшен брандмауэром через icmp (это означает, что на порту может быть или не быть служба) ). Если брандмауэр отбросит пакет вместо того, чтобы фактически отклонить его, ncпросто на некоторое время зависнет.
Златовласка

Ну, моя цель с последней командой netcat состояла в том, чтобы просто дать пример того, что такое успешное и неудачное выполнение, чтобы помочь им интерпретировать любые результаты с их стороны, если им это было непонятно по какой-то причине. Часть, которая отвечает на их вопрос, является первой частью «На компьютере» / «На сервере».
Братчли

Я знаю, что вопрос касался Solaris 10, но, к вашему сведению, в репозитории v11 есть netcat.
Sleyweasel

15

Брандмауэры должны отвечать сообщением 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-брандмауэр в игре.

4

Вы можете использовать команду, 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-адреса показывают локальные и внешние адреса . Local будет вашей системой, в то время как Foreign будет любыми адресами, либо подключающимися к вашему TCP-порту, либо вы подключаетесь к одному из их TCP-портов.

Так что в случае с портом 22 это демон ssh, работающий в моей системе, который слушает соединения. Как только кто-то пытается подключиться к sshдемону, он разветвляет свою копию и отодвигает это подключение к другому порту, оставляя TCP-порт 22 открытым для дополнительных подключений, когда они входят.


Просто к сведению, что синтаксис netstat очень специфичен для GNU, это самый близкий эквивалент, который изначально работает на Solaris: netstat -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
Bratchley

Девиз Solaris должен звучать так: «Нет ничего проще!»
Братчли

1

Конфигурация и состояние конфигурации брандмауэра зависят от брандмауэра / ОС.

Что вы можете сделать, это попробовать это с server2:

nmap server1

Спасибо за вашу помощь. К сожалению, этой команды нет в Solaris (или не установлена). Я получаю "nmap: команда не найдена"
yottabrain

@ user1734143 он, вероятно, находится в «репозиториях» или в эквиваленте Solaris, но в любом случае вы можете скачать его и даже скомпилировать отсюда
RSFalcon7

@ user1734143 он доступен через OpenCSW, который вам, вероятно, следует установить в любом случае, значительно упростит ваше администрирование.
Братчли

1

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

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

По сути, если я получаю «тайм-аут», это означает, что порт не открыт на FW.


0

Вы можете использовать онлайн-инструмент, такой как www.firewallruletest.com, чтобы увидеть, могут ли внешние хосты устанавливать соединения tcp.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.