Три диапазона портов
- 0–1023, общеизвестные: назначены IANA стандартным сервисам. В Unix слушать на них может только root (или процесс с CAP_NET_BIND_SERVICE).
- 1024–49151, зарегистрированные: назначаются по запросу производителям и проектам (3306 MySQL, 5432 PostgreSQL, 6379 Redis). Привязать их может любой пользователь.
- 49152–65535, динамические / эфемерные: используются для клиентской стороны соединений. Linux по умолчанию на самом деле использует 32768–60999 (
net.ipv4.ip_local_port_range).
Порты, которые никогда не должны смотреть в Интернет
Redis (6379), Memcached (11211), MongoDB (27017), Elasticsearch (9200), API Docker (2375), etcd (2379) и большинство баз данных поставляются без аутентификации или со слабыми настройками по умолчанию и сканируются непрерывно. Привязывайте их к 127.0.0.1 или к частному интерфейсу, прячьте за VPN или правилом межсетевого экрана и никогда не полагайтесь на неизвестность. Shodan индексирует их все за считанные часы.
Как узнать, что слушает
ss -tulpn # Linux: слушающие сокеты TCP/UDP с именами процессов
sudo lsof -i :8080 # какой процесс занимает порт 8080
nc -zv host 22 # открыт ли удалённый порт? Порт, «открытый» в ss, но недоступный снаружи, обычно заблокирован межсетевым экраном (ufw, nftables, облачная security group или Cloudflare, проксирующий только 80/443).
Вопросы
В чём разница между портами TCP и UDP?
Это отдельные пространства имён: TCP 53 и UDP 53 — разные сокеты, хотя DNS использует оба. Сервис может слушать на одном, на другом или на обоих.
Почему я не могу привязать порт 80 без root?
Порты ниже 1024 в Unix привилегированные. Запустите сервис на высоком порту за обратным прокси, выдайте бинарнику CAP_NET_BIND_SERVICE (setcap) или используйте активацию через сокет в systemd.
Что означает «address already in use»?
Другой процесс уже слушает на этом порту (ss -tulpn покажет какой), или недавно закрытый сокет всё ещё в состоянии TIME_WAIT. Во втором случае помогает SO_REUSEADDR или минута ожидания.
Какие порты использует HTTP/3?
UDP 443. HTTP/3 работает поверх QUIC, который основан на UDP; браузеры узнают о нём через заголовок Alt-Svc или DNS-запись HTTPS.