Я разработчик, работающий на сервере 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