Задать вопрос
Все статьи / VDS / Общая информация / Управление портами в Linux: проверка, открытие и защита сервисов
Найти результаты:
Период:
с:
 
по:
Помощь в поиске

Помощь в поиске

apple banana
Найти записи, которые содержат хотя бы одно из двух слов.

+apple +juice
Найти записи, которые содержат оба слова.

+apple macintosh
Найти записи, которые содержат слово 'apple', но положение записей выше, если они также содержат 'macintosh'.

+apple -macintosh
Найти записи, которые содержат слово 'apple', но не 'macintosh'.

+apple ~macintosh
Найти записи, которые содержат слово 'apple', но если запись также содержит слово 'macintosh', rate it lower than if row does not. Это более "мягкий" чем поиск '+apple -macintosh', для которого наличие 'macintosh' вызывает что записи не будут возвращены вовсе.

+apple +(>turnover <strudel)
Найти записи, которые содержат слова 'apple' и 'turnover', или 'apple' и 'strudel' (в любом порядке), но ранг 'apple turnover' выше чем 'apple strudel'.

apple*
Найти записи, которые содержат такие слова как 'apple', 'apples', 'applesauce', или 'applet'.

"some words"
Найти записи, которые содержат точную фразу 'some words' (например записи содержащие 'some words of wisdom', но не "some noise words").

Управление портами в Linux: проверка, открытие и защита сервисов

Сетевые порты в Linux – это один из базовых элементов, через которые система обменивается данными с внешним миром. Веб-серверы, базы данных, SSH-доступ, почтовые сервисы – все это работает через конкретные порты, и от того, как они настроены, напрямую зависят доступность сервисов и безопасность системы.

Умение управлять портами в Linux нужно не только системным администраторам. С этой задачей сталкиваются разработчики, DevOps-инженеры и все, кто разворачивает сервисы на сервере или в локальной среде. Открыть нужный порт, проверить, что он действительно слушается, закрыть лишнее и понять, какой процесс за что отвечает – базовые навыки, без которых сложно поддерживать систему в рабочем состоянии.

В этой статье разберем, как управлять портами в Linux на практике: какие инструменты для этого используются, как проверять открытые порты, управлять доступом и избегать типичных ошибок при настройке сети.

Просмотр открытых портов

Перед тем как открывать или закрывать порты, важно понять, какие из них уже используются системой. В Linux для этого есть несколько инструментов, но основной и самый универсальный – ss. Он установлен по умолчанию в большинстве дистрибутивов и постепенно вытесняет устаревший netstat.

Чтобы просмотреть все порты, которые находятся в состоянии прослушивания, выполните:

ss -tuln

В выводе команды можно увидеть локальный адрес и порт, на котором сервис ожидает подключения. Например, 0.0.0.0:80 означает, что веб-сервер доступен на всех сетевых интерфейсах, а 127.0.0.1:631 – что сервис принимает соединения только с локальной машины.

На что смотреть в выводе:

  • Local Address:Port указывает, на каком адресе и порту работает сервис.
    Если видите 0.0.0.0:PORT или :::PORT, сервис доступен на всех интерфейсах (и потенциально снаружи).
    Если 127.0.0.1:PORT, доступ только локальный.
  • Process – имя процесса, PID и иногда аргументы запуска. 

Если нужно увидеть не только слушающие порты, но и активные подключения (кто к кому подключен), достаточно убрать -l:

ss -tun

Чтобы увидеть слушающие порты вместе с процессами (кто занял порт), выполните:

sudo ss -tulnp

Посмотреть только TCP-порты (актуально для веба/SSH/БД):

sudo ss -tlnp

Посмотреть только UDP (например, DNS, DHCP, syslog):

sudo ss -ulnp

Если нужно проверить конкретный порт, вывод можно отфильтровать через grep:

ss -tuln | grep 511

Определение процесса по порту

Ситуация, когда порт уже занят и сервис не запускается, или наоборот – порт открыт, но непонятно кем, встречается регулярно. Тогда важно быстро определить, какой процесс использует нужный порт, и от какого пользователя он запущен.

Самый удобный инструмент для этого – все тот же ss. Он позволяет связать порт с конкретным процессом и его PID.

Найти процесс по номеру порта (например, 80) можно, выполнив:

sudo ss -tulnp | grep ':80

В выводе будут видны:

  • протокол (TCP или UDP);
  • локальный адрес и порт;
  • имя процесса;
  • PID процесса;
  • пользователь, от которого он запущен.

Если порт используется только по TCP, можно сузить вывод:

sudo ss -tlnp | grep ':80'

Если известен PID процесса, но нужно проверить, какие порты он использует, можно сделать обратную проверку:

sudo ss -tulnp | grep 'pid=1234'

Закрытие ненужных портов

Открытые порты – это точки входа в систему. Чем их больше, тем выше риск лишнего доступа и тем сложнее контролировать безопасность сервера. Поэтому после проверки запущенных сервисов логичный шаг – закрыть все порты, которые не используются и не должны быть доступны извне.

Но прежде чем закрыть порт, разберитесь почему он открыт. Если порт слушает процесс, который не нужен, правильнее остановить и отключить сам сервис, а не просто закрывать порт файрволом.

Остановить и отключить сервис можно, выполнив:

sudo systemctl stop <сервис>
sudo systemctl disable <сервис>

Затем проверьте его статус:

systemctl status <сервис>

Если сервис не должен быть установлен вовсе, его можно удалить через пакетный менеджер – конкретная команда зависит от дистрибутива. Это самый надежный способ избавиться от порта: нечему слушать – нечего закрывать.

Если приложение позволяет, безопаснее привязать его только к localhost. Тогда порт будет доступен только на самой машине.

Пример логики настройки:

  • привязка к 127.0.0.1 или localhost – доступ только локально;
  • привязка к 0.0.0.0 или конкретному внешнему IP – доступ по сети.

Конкретные параметры зависят от приложения, но смысл один: сервис не должен слушать внешний интерфейс, если в этом нет необходимости.

Если сервис должен слушать сеть, но доступ нужно ограничить, используйте файрвол. В Linux чаще всего встречаются ufw (Ubuntu/Debian), firewalld (RHEL/CentOS/Fedora) и правила на базе iptables или nftables.

ufw и firewalld – это управляющие инструменты. Фактическая фильтрация трафика выполняется на уровне ядра именно через iptables или nftables:

  • iptables – классический механизм управления сетевыми правилами. Правила применяются сразу, но не сохраняются после перезагрузки без дополнительной настройки.
  • nftables – современная замена iptables с более компактным синтаксисом и лучшей производительностью. В новых дистрибутивах он считается основным механизмом фильтрации.

В большинстве случаев для закрытия портов удобнее использовать ufw или firewalld, так как они снижают риск ошибок. Прямая работа с iptables и nftables нужна, если требуется полный контроль над сетевой фильтрацией.

Задача

UFW

Firewalld

iptables

nftables

Закрыть порт 8080 (TCP)

sudo ufw deny 8080/tcp

sudo firewall-cmd --permanent --remove-port=8080/tcp

sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

sudo nft add rule inet filter input tcp dport 8080 drop

Закрыть порт 8080 (UDP)

sudo ufw deny 8080/udp

sudo firewall-cmd --permanent --remove-port=8080/udp

sudo iptables -A INPUT -p udp --dport 8080 -j DROP

sudo nft add rule inet filter input udp dport 8080 drop

Закрыть порт для конкретного IP

sudo ufw deny from 203.0.113.10 to any port 8080

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="8080" protocol="tcp" reject'

sudo iptables -A INPUT -p tcp --dport 8080 -s 203.0.113.10 -j DROP

sudo nft add rule inet filter input ip saddr 203.0.113.10 tcp dport 8080 drop

Применить правило

применяется сразу

sudo firewall-cmd --reload

применяется сразу

применяется сразу

Во всех примерах выше используется порт 8080 исключительно для наглядности. На его месте может быть любой другой номер порта, который требуется закрыть – например 22, 80, 443, 3306 или любой пользовательский порт. 

Проверьте, что правила файрвола применились:

UFW:

sudo ufw status verbose

Firewalld:

sudo firewall-cmd --list-all

iptables:

sudo iptables -L -n -v

nftables:

sudo nft list ruleset

После изменений проверьте результат: порт действительно должен исчезнуть из списка слушающих или стать недоступным извне.

sudo ss -tuln
sudo ss -tulnp | grep ':8080'

Открытие порта для сервиса

Открытие порта требуется в тех случаях, когда сервис должен принимать подключения извне: веб-сервер, база данных, VPN, почтовый сервер или любой другой сетевой сервис. Как и при закрытии портов, начинать стоит не с файрвола, а с самого сервиса.

Прежде всего убедитесь, что нужный сервис запущен и действительно слушает порт.

systemctl status <сервис>

Проверьте, какой порт он использует и на каком интерфейсе слушает подключения:

sudo ss -tulnp

Если сервис слушает только 127.0.0.1, он будет доступен лишь локально, и открытие порта в файрволе не даст результата. В этом случае необходимо изменить конфигурацию сервиса и разрешить прослушивание внешнего интерфейса.

После того как сервис запущен и слушает порт, доступ к нему нужно разрешить в файрволе. В Linux чаще всего используются ufw, firewalld или прямые правила через iptables / nftables.

Задача

UFW

Firewalld

iptables

nftables

Открыть порт 8080 (TCP)

sudo ufw allow 8080/tcp

sudo firewall-cmd --permanent --add-port=8080/tcp

sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

sudo nft add rule inet filter input tcp dport 8080 accept

Открыть порт 8080 (UDP)

sudo ufw allow 8080/udp

sudo firewall-cmd --permanent --add-port=8080/udp

sudo iptables -A INPUT -p udp --dport 8080 -j ACCEPT

sudo nft add rule inet filter input udp dport 8080 accept

Открыть порт только для одного IP

sudo ufw allow from 203.0.113.10 to any port 8080

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="8080" protocol="tcp" accept'

sudo iptables -A INPUT -p tcp --dport 8080 -s 203.0.113.10 -j ACCEPT

sudo nft add rule inet filter input ip saddr 203.0.113.10 tcp dport 8080 accept

Применить правило

применяется сразу

sudo firewall-cmd --reload

применяется сразу

применяется сразу

В примерах используется порт 8080 для наглядности. Его можно заменить на любой другой номер порта – например 22, 80, 443, 3306 или пользовательский порт сервиса.

Убедитесь, что правило добавлено и активно:

UFW:

sudo ufw status verbose

Firewalld:

sudo firewall-cmd --list-all

iptables:

sudo iptables -L -n -v

nftables:

sudo nft list ruleset

После изменений проверьте результат: порт должен слушаться процессом:

sudo ss -tuln
sudo ss -tulnp | grep ':8080'

Если сервис слушает порт, но подключение не проходит, чаще всего проблема в одном из пунктов: сервис привязан к localhost, открыто не тот протокол (TCP вместо UDP или наоборот), правило добавлено не в ту зону firewalld, либо выше по списку правил есть блокирующее правило.

Проверка доступности порта извне

Важно убедиться не только в том, что сервис запущен и порт слушается на сервере, но и в том, что к нему действительно можно подключиться извне. Локальная проверка через ss показывает состояние системы, но не отвечает на главный вопрос – проходит ли трафик через сеть и firewall.

Проще всего проверить порт с другой машины. Это может быть ваш локальный компьютер, другой сервер или любая система, находящаяся вне текущего хоста.

Проверка TCP-порта

Самый простой способ – использовать nc (netcat). Он показывает, удалось ли установить соединение.

nc -vz <IP-сервера> <порт>

Если порт доступен, вы увидите сообщение об успешном подключении. Ошибка или таймаут означает, что соединение блокируется или сервис недоступен.

Для веб-сервисов удобно использовать curl. Он сразу показывает, отвечает ли приложение:

curl -I http://<IP-сервера> <порт>

Если сервер возвращает заголовки ответа, значит порт открыт и сервис принимает соединения. Ошибка соединения указывает на проблему с доступностью.

Проверка UDP-порта

С UDP все сложнее. Этот протокол не устанавливает соединение, поэтому отсутствие ответа не всегда означает, что порт закрыт. Многие UDP-сервисы отвечают только на корректные запросы своего формата.

Для базовой проверки можно использовать nc в UDP-режиме:

nc -vu <IP-сервера > <порт>

Заключение

Безопасная работа с портами сводится к простому принципу: открыто должно быть только то, что нужно, и только тем, кому это нужно. Что поможет вам держать ситуацию под контролем:

  • Оставляйте открытыми только необходимые порты. Каждый открытый порт увеличивает поверхность атаки. 
  • Закрывайте причину, а не следствие. Если порт не нужен, сначала отключайте или удаляйте сервис. Firewall стоит использовать для ограничения доступа, а не для маскировки лишних процессов.
  • Ограничивайте привязку по адресу. Сервисы, которые не должны быть доступны извне, привязывайте к 127.0.0.1. 
  • Открывайте доступ точечно по IP. Административные сервисы и панели управления не должны быть доступны всем. 
  • Разделяйте TCP и UDP. Всегда фиксируйте, по какому протоколу работает сервис. Открытый TCP не означает открытый UDP и наоборот. Ошибки на этом уровне часто выглядят как непонятные сетевые проблемы.
  • Используйте принцип deny by default. Настройте брандмауэр так, чтобы все входящие подключения блокировались автоматически. А те порты, которые действительно нужны (например, 80 для веб-сервера), открывайте отдельными правилами.
  • Контролируйте правила на всех уровнях. Проверяйте не только правила на сервере, но и настройки облачного файрвола, security group и сетевых ACL. 
  • Проверяйте доступность извне, а не только локально. ss показывает, что порт слушается, но не гарантирует доступ через сеть. Регулярно проверяйте порт с другой машины и фиксируйте результат.
  • Следите за SSH-доступом. Не меняйте правила для SSH, пока у вас нет запасного способа зайти в систему. Перед применением новых правил держите открытую сессию, чтобы можно было все отменить, если потеряете доступ. Лучше перестраховаться, чем остаться без входа в сервер.
  • Ведите учет и регулярно проверяйте правила. Поддерживайте список открытых портов и причин, почему они нужны. Периодически делайте ревизию: сервисы меняются, а правила часто остаются старыми.
  • Обновляйте систему и сервисы. Открытый порт сам по себе не опасен, если сервис обновлен и правильно настроен. Уязвимости в старых версиях – одна из самых частых причин компрометации.

Придерживаясь этих правил, вы значительно снизите риски и упростите администрирование.

Предыдущая статья
Управление доступом к VPS
Следующая статья
Установка SSL-сертификата на Apache