Назад | Перейти на главную страницу

Все порты сервера с UDP открыты

Я разработчик, работающий на сервере CentOS7. Сегодня хочу проверить состояние всех портов сервера.

Сначала выполняю команду: firewall-cmd --zone=public --list-ports и я получаю это:

110 / TCP 443 / TCP 80 / TCP 995 / TCP 143 / TCP 3306 / TCP 993 / TCP

Все порты выше открыты мной, так что все в порядке.

Затем я использую другой компьютер с Linux и использую nc для сканирования портов сервера (говоря, что IP-адрес сервера a.a.a.a):

nc -v -z -w2 a.a.a.a 1-4000

Я получаю тот же результат.

После этого я использую nc для сканирования портов с использованием UDP:

nc -v -z -w2 -u a.a.a.a 1-4000

К моему удивлению, кажется, что все порты открыты, потому что я получаю следующий результат:

Connection to a.a.a.a port 1 [udp/tcpmux] succeeded!
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src b.b.b.b port 62086
    dst a.a.a.a port 2
    rank info not available

Connection to a.a.a.a port 2 [udp/compressnet] succeeded!
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src b.b.b.b port 60795
    dst a.a.a.a port 3
    rank info not available

Connection to a.a.a.a port 3 [udp/compressnet] succeeded!
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src b.b.b.b port 50133
    dst a.a.a.a port 4
    rank info not available

Connection to a.a.a.a port 4 [udp/*] succeeded!
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src b.b.b.b port 64246
    dst a.a.a.a port 5
    rank info not available

Connection to a.a.a.a port 5 [udp/rje] succeeded!
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src b.b.b.b port 50334
    dst a.a.a.a port 6
    rank info not available
...
...

Теперь я запуталась.
Почему все порты открыты для UDP? Это безопасно? Если это небезопасно, почему брандмауэр их не закрывает?
Для меня «порт открыт» означает, что его слушает какая-то программа или система. Например, 80/tcp означает, что моя веб-программа прослушивает порт 80. Если я прав, означает ли это, что сервер прослушивает все порты с UDP?
Или «порт открыт» просто означает, что брандмауэр не блокирует порт, чтобы вы могли использовать какую-нибудь программу для его прослушивания?

Ответ UDP является ложноположительным, не обращайте на это внимания. UDP - это протокол без установления соединения / без состояния, поэтому он ничего не ждет назад ... нет ответа, плохой ответ ... все равно. TCP - это протокол с отслеживанием состояния, поскольку обе конечные точки сохраняют информацию о состоянии друг друга, требуются подтверждения и он может передавать повторно.

Чтение о протоколах без сохранения состояния: https://en.wikipedia.org/wiki/Stateless_protocol

Состояние TCP: https://upload.wikimedia.org/wikipedia/commons/a/a2/Tcp_state_diagram_fixed.svg