Кожна мережева служба на сервері — вебсервер, SSH, база даних, пошта — «слухає» свій порт. Знати, які порти відкриті, потрібно для налаштування фаєрвола, пошуку конфліктів і перевірки безпеки.
ss — основна команда
sudo ss -tulpn
-t— TCP,-u— UDP;-l— лише порти, що очікують з'єднань;-p— показати процес;-n— числа замість назв.
Приклад виводу:
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=812,fd=6))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=650,fd=3))
tcp LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=901,fd=21))
Зверніть увагу на адресу перед портом:
0.0.0.0або[::]— порт доступний на всіх інтерфейсах, тобто з інтернету (якщо не закритий фаєрволом);127.0.0.1— лише локально. Так і має бути для MySQL, Redis, PHP-FPM.
Хто зайняв конкретний порт
Якщо служба не запускається з помилкою Address already in use:
sudo ss -tulpn | grep :80
sudo lsof -i :80
Команда покаже процес і його PID. Зупиніть зайву службу (sudo systemctl stop назва) або змініть порт в одній з програм.
netstat
Старіша команда з тим самим результатом. На нових системах її може не бути — встановіть пакет net-tools або користуйтеся ss.
sudo netstat -tulpn
Перевірка ззовні
Те, що порт слухається на сервері, ще не означає, що він доступний з інтернету: його може блокувати фаєрвол. І навпаки — перевірте, чи не відкрито зайвого. Скористайтеся нашим сканером відкритих портів: він перевіряє сервер з нашої мережі, як це бачить зовнішній світ.
З іншого комп'ютера з Linux або macOS:
nc -zv 203.0.113.10 443
Типові порти
| Порт | Служба | Має бути відкритий з інтернету? |
|---|---|---|
| 22 | SSH | так, бажано лише для своїх IP |
| 80, 443 | HTTP, HTTPS | так, для сайту |
| 25, 465, 587 | SMTP | лише для поштового сервера |
| 993, 995 | IMAP, POP3 (SSL) | лише для поштового сервера |
| 3306 | MySQL | ні |
| 5432 | PostgreSQL | ні |
| 6379 | Redis | ні, ніколи |
| 3389 | RDP (Windows) | бажано лише для своїх IP |
Закрити зайві порти — «Як налаштувати фаєрвол на VPS».