Мы развернем новое приложение на сервере, и приложение будет прослушивать порт 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 — это успешное подключение.
- Например, «порт недоступен», «хост запрещен», различные другие комбинациихост/порт/админинедостижимо/запрещено; обратите внимание на них в сообщении, поскольку они являются явным указанием на работающий 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.