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

Ми будемо розгортати нову програму на сервері, і програма буде слухати порт 8443. Ми попросили команду Мережі відкрити брандмауер для порту 8443 на цьому сервері перед розгортанням програми. На цьому конкретному порту на сервері наразі немає програми.

Є все одно я можу переконатися, що брандмауер відкритий для порту 8443

ОС: Linux/Windows

25

5 Відповіді

Якщо ви хочете побачити, чи можна створити TCP-з'єднання з віддаленого комп'ютера, встановіть OpenCSW на ці та цільову машину і встановіть netcat на обох. Це синтаксис для використання netcat для тестування TCP-з'єднань:

nc -vz targetServer portNum

Наприклад, щоб перевірити SSH на "homeServer1":

nc -vz homeserver1 22

Це дає змогу протестувати підключення на рівні TCP з віддаленої системи. Netcat також може бути налаштований для прослуховування порту, а не як клієнта. Щоб змусити його слухати на TCP/8443:

On the server that will house the application: nc -l homeserver1 8443

On a machine that sits outside the firewall: nc -vz homeserver.fqdn 8443

Це приклад успішного виконання:

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

Невдале виконання:

[[email protected] ~]$ nc -vz ditirlns01.ncat.edu 8443
nc: connect to ditirlns01.ncat.edu port 8443 (tcp) failed: Connection refused
14
додано
Це (зовсім) не вирішує питання, чи блокує брандмауер порт. Схоже, що nc повідомляє "Відмовлено у підключенні", коли порт доступний, але відсутній слухач, а "Мережа недоступна", коли запит відскановано брандмауером через icmp (тобто може або може не бути послугою на порту). Якщо брандмауер скидає пакет замість того, щоб його фактично відхилити, nc просто повіситиметься на деякий час.
додано Автор Mat Kelly, джерело
Я знаю, що питання стосувалося Solaris 10, але як FYI, v11 має netcat, доступний у репо.
додано Автор sleepyweasel, джерело
Добре, моя мета з останньою командою netcat була просто дати приклад того, що успішне виконання і невдале виконання, щоб допомогти їм інтерпретувати будь-які результати на їх кінці, якщо це було незрозуміло їм з якоїсь причини. Частина, що відповідає на їхнє запитання, є першою частиною "На машині"/"На сервері".
додано Автор Bratchley, джерело

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

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

1) Брандмауер відхиляє запит

Ви отримаєте повідомлення ICMP назад, і інструмент, який робить запит, повинен негайно повідомити вам про це ("недоступний, адміністратор заборонений" тощо). Під "інструментом" я маю на увазі клієнта, який ви використовуєте для надсилання запиту (я використовував telnet ).

"Немає маршруту до хосту" може вказувати на це, але це також може вказувати на більш тонкі проблеми маршрутизації.

2) Брандмауер падає пакет

Немає відповіді, тому інструмент чекає, поки він не закінчиться, або вам стане нудно.

3) Брандмауер дозволяє пакет (або немає брандмауера), але нічого не слухає порт.

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

Єдиний інший варіант полягає в тому, що пакет дозволяється через брандмауер і щось слухає, тому ви отримуєте успішне з'єднання.

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

13
додано

Можна скористатися командою 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 

The output shows processes (column farthest to the right) that are listening on TCP ports. The port numbers are the numbers that follow the colons after the IP addresses (0.0.0.0:111 would be port 111 for Приклад).

IP-адреси показують Місцеві та зовнішні адреси . Місцева буде вашою системою, а Foreign - будь-якою адресою, яка підключається до TCP-порту або підключається до одного з портів TCP.

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

4
додано
Просто FYI, що синтаксис netstat дуже GNU-специфічний, це найближчий еквівалент, який працює спочатку на Solaris: netstat -a -P tcp -f inet | awk '/ LISTEN $/{print $ 0}'
додано Автор Bratchley, джерело
Девіз Solaris повинен бути "Ніщо ніколи не просто легко."
додано Автор Bratchley, джерело

Конфігурація та стан конфігурації брандмауера - це брандмауер/ОС.

Що ви можете зробити, це спробувати з server2:

nmap server1
0
додано
@ user1734143 доступний за допомогою OpenCSW, який, напевно, слід встановити будь-яким чином, що полегшує роботу з адміністративним адміністратором.
додано Автор Bratchley, джерело
@ user1734143 це, ймовірно, в "сховищах" або еквіваленті Solaris, але ви можете завантажити його і навіть скомпілювати з тут
додано Автор Veronica Tash, джерело
Спасибі за вашу допомогу. На жаль, ця команда не існує в Solaris (або не встановлена). Я отримую "nmap: command not found"
додано Автор neo4k, джерело

Ви можете скористатися інтерактивним інструментом, таким як www.firewallruletest.com, щоб дізнатися, чи можуть зовнішні хости встановлювати з'єднання tcp.

0
додано