Як перевірити, чи відкрився брандмауер для порту, але не слухає його


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він просто затримається на деякий час.
goldilocks

Ну і моя мета з останньою командою netcat полягала лише в тому, щоб навести приклад того, що успішне виконання та невдале виконання, щоб допомогти їм інтерпретувати будь-які результати на їх кінці, якщо їм було незрозуміло чомусь. Частина, яка відповідає на їх запитання, - перша частина "На машині" / "На сервері".
Братчлі

Я знаю, що питання стосувалося Solaris 10, але, як FYI, v11 має netcat, доступний у репо.
сонник,

15

Брандмауери повинні відповідати ICMP-повідомленням, коли вони блокують запит. Однак це не обов’язково так (вам буде цікава ця приємна стаття ).

Ви можете тестувати ззовні, щоб побачити, чи доступ до порту доступний через брандмауер, і якщо так, чи слухає його. Ось три різні сценарії, пов’язані із запитом tcp, який ви можете спостерігати за допомогою wiresharkабо іншим sniffer пакетів, і що ви побачите:

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-адреси показують місцеві та іноземні адреси . Місцевою буде ваша система, тоді як іноземними будуть будь-які адреси, або підключення до вашого порту TCP, або ви підключення до одного з їх портів TCP.

Так що у випадку з порту 22, це демон SSH, що працює в моїй системі, це LISTENING для з'єднань. Після того, як хтось намагається підключитися до sshдемона, він розсилає копію самого себе і відсуває це з'єднання на інший порт, зберігаючи TCP-порт 22 відкритим для додаткових з'єднань, коли вони входять.


Тільки FYI, що синтаксис netstat дуже специфічний для GNU, це найближчий еквівалент, який працює на Solaris в netstat -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
основному

Девіз Соляріса повинен бути "Ніщо не буває просто".
Братчлі

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.