Как закрыть открытые порты в Linux

Как закрыть порт linux

Как закрыть порт linux

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

Для закрытия ненужных портов рекомендуется использовать iptables или современный firewalld. Например, команда iptables -A INPUT -p tcp —dport 8080 -j DROP блокирует доступ к порту 8080, не влияя на другие службы. В firewalld это делается через firewall-cmd —remove-port=8080/tcp —permanent с последующей перезагрузкой конфигурации firewall-cmd —reload.

Важно также проверять автозапуск служб и демонов, которые могут открывать порты после перезагрузки. Используйте systemctl list-unit-files —type=service для выявления активных сервисов и systemctl disable имя_сервиса для отключения лишних. Такой подход снижает поверхность атаки без нарушения работы критически важных процессов.

Регулярный аудит открытых портов и активных соединений помогает поддерживать безопасную конфигурацию. Интеграция сканеров, таких как nmap или sslyze, позволяет автоматически обнаруживать неожиданные точки доступа и корректировать правила файрвола до появления угроз.

Проверка текущих открытых портов через netstat и ss

Проверка текущих открытых портов через netstat и ss

Для анализа активных соединений и открытых портов на Linux используется netstat и ss. Они предоставляют детализированную информацию о протоколах, IP-адресах и состояниях соединений.

  • -t – TCP;
  • -u – UDP;
  • -l – только прослушивающие порты;

Пример результата:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

udp 0 0 127.0.0.1:123 0.0.0.0:*

Для более современного и быстрого анализа используется ss. Команда ss -tulwn предоставляет аналогичную информацию с указанием PID и процесса, который держит порт:

  • -w – отображение raw сокетов;
  • -l – только прослушивающие порты;
  • -p – PID и имя процесса.

LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((«sshd»,pid=1023,fd=3))

UNCONN 0 0 127.0.0.1:123 0.0.0.0:* users:((«ntpd»,pid=2045,fd=5))

Для фильтрации конкретного порта удобно использовать grep, например ss -tulwn | grep 80 покажет все процессы, слушающие порт 80. Для аудита безопасности рекомендуется периодически запускать обе команды и фиксировать все необычные открытые порты.

Использование ufw для блокировки отдельных портов

Использование ufw для блокировки отдельных портов

UFW (Uncomplicated Firewall) позволяет управлять доступом к отдельным портам без сложной конфигурации iptables. Для начала убедитесь, что ufw установлен и активен командой sudo ufw status. Если статус inactive, активируйте его: sudo ufw enable.

Для блокировки конкретного порта используйте команду: sudo ufw deny 8080, где 8080 – номер порта. Это запрещает входящие соединения на указанный порт, оставляя другие порты открытыми.

Можно ограничить блокировку по протоколу. Например, для TCP: sudo ufw deny 22/tcp, для UDP: sudo ufw deny 53/udp. Это полезно при необходимости закрыть сервисы, работающие только по конкретному протоколу.

Если требуется ограничить доступ к порту определённым IP-адресам, применяют правило: sudo ufw allow from 192.168.1.100 to any port 3306, а все остальные подключения к этому порту блокируются отдельным deny-правилом: sudo ufw deny 3306.

После внесения изменений рекомендуется проверить активные правила: sudo ufw status numbered. Для удаления правила используйте его номер: sudo ufw delete 3.

UFW поддерживает диапазоны портов. Для блокировки сразу нескольких портов: sudo ufw deny 6000:6005/tcp. Это эффективно для закрытия серии уязвимых или неиспользуемых сервисов одновременно.

Рекомендация: перед применением deny-правил убедитесь, что не блокируете доступ к критически важным сервисам, например SSH, иначе потеряете удалённое подключение к серверу.

Настройка iptables для закрытия портов на уровне ядра

Настройка iptables для закрытия портов на уровне ядра

Для закрытия портов в Linux на уровне ядра используется утилита iptables, которая управляет таблицами фильтрации пакетов. Основная задача – блокировка входящих соединений на нежелательные порты без влияния на работу разрешённых сервисов.

Базовые команды для блокировки конкретного порта:

  • Блокировка TCP-порта 8080:
    iptables -A INPUT -p tcp —dport 8080 -j DROP
  • Блокировка UDP-порта 53:
    iptables -A INPUT -p udp —dport 53 -j DROP

Рекомендуется создавать правила в следующем порядке:

  1. Разрешить трафик на критически важные сервисы (SSH, HTTP/HTTPS). Например:
    iptables -A INPUT -p tcp —dport 22 -j ACCEPT
  2. Закрыть все остальные порты явно с помощью DROP или REJECT.
  3. Добавить правило по умолчанию:

    iptables -P INPUT DROP

    iptables -P FORWARD DROP

    iptables -P OUTPUT ACCEPT

Для блокировки диапазона портов используется синтаксис:

  • TCP-порты с 3000 по 3010:
    iptables -A INPUT -p tcp —dport 3000:3010 -j DROP

Для проверки активных правил и открытых портов используйте:

  • Список правил:
    iptables -L -n -v
  • iptables -L —line-numbers

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

  • Debian/Ubuntu:
    iptables-save > /etc/iptables/rules.v4
  • CentOS/RHEL:
    service iptables save

Дополнительно можно использовать модули ядра для ограничения соединений по IP или подсети:

  • Блокировка всего трафика с IP 192.168.1.100:
    iptables -A INPUT -s 192.168.1.100 -j DROP
  • Ограничение количества соединений на порт 80:
    iptables -A INPUT -p tcp —dport 80 -m connlimit —connlimit-above 20 -j REJECT

Эти подходы обеспечивают контроль над портами на уровне ядра, снижая риски несанкционированного доступа и минимизируя нагрузку на пользовательские сервисы.

Отключение ненужных сетевых служб systemd

Отключение ненужных сетевых служб systemd

Для уменьшения числа открытых портов на Linux важно выявить и отключить сетевые службы, которые не используются. В systemd это делается через команды systemctl. Сначала необходимо получить список активных сервисов с сетевыми интерфейсами: systemctl list-units --type=service --state=active. Среди них чаще всего встречаются ssh.service, avahi-daemon.service, cups.service, rpcbind.service.

Перед отключением рекомендуется проверить, слушает ли служба сетевой порт: ss -tuln или netstat -tuln. Например, если avahi-daemon использует UDP-порты 5353, а локальная сеть не требует обнаружения устройств, его можно отключить.

Отключение сервиса выполняется командой: systemctl disable --now имя_сервиса. Флаг --now одновременно останавливает службу и предотвращает её автозапуск при старте системы. Для временной остановки без отключения автозапуска используется systemctl stop имя_сервиса.

После изменения состояния служб важно проверить текущие открытые порты и убедиться, что отключение прошло корректно: ss -tuln покажет актуальные слушающие сокеты. Для постоянного аудита можно использовать systemctl list-unit-files --state=enabled и отключить все сервисы с сетевыми функциями, которые не нужны серверу или рабочей станции.

Особое внимание следует уделять сервисам с удалённым доступом: ssh, telnet, ftp. Если они не используются, их отключение полностью закрывает соответствующие порты, снижая риск внешних атак. При необходимости безопасного доступа рекомендуется ограничивать доступ через файрвол и использовать ключи вместо паролей.

Закрытие портов через файрвол firewalld

Закрытие портов через файрвол firewalld

Firewalld управляет сетевыми зонами и правилами доступа, позволяя закрывать ненужные порты без редактирования iptables напрямую. Для проверки открытых портов используйте команду firewall-cmd --list-ports в активной зоне.

Чтобы закрыть конкретный порт, выполните команду firewall-cmd --zone=public --remove-port=1234/tcp --permanent, где 1234 – номер порта, а tcp – протокол. Параметр --permanent сохраняет изменение после перезапуска firewalld.

После внесения изменений примените их командой firewall-cmd --reload. Для подтверждения закройте порт проверкой firewall-cmd --zone=public --list-ports, убедившись, что нужный порт отсутствует.

Для массового закрытия портов можно использовать диапазоны: firewall-cmd --zone=public --remove-port=5000-5010/tcp --permanent. Firewalld также позволяет блокировать порты через сервисы: удалите соответствующий сервис из зоны командой firewall-cmd --zone=public --remove-service=http --permanent.

При работе с firewalld важно помнить о зоне интерфейса: убедитесь, что интерфейс, на котором открыт порт, относится к нужной зоне. Для проверки интерфейсов используйте firewall-cmd --get-active-zones. Порты закрываются только в рамках назначенной зоны.

Автоматизация закрытия портов возможна через скрипты с командами firewall-cmd, что позволяет быстро блокировать новые сервисы и контролировать безопасность сервера без ручного редактирования правил.

Проверка доступности портов с помощью nmap

Для выявления открытых портов на Linux-системе используется утилита nmap, способная сканировать отдельные порты, диапазоны и целые подсети. Корректное применение nmap позволяет определить уязвимые точки и закрыть ненужные порты.

Основные команды и параметры:

  • Сканирование конкретного порта: nmap -p 22 localhost – проверка порта SSH.
  • Сканирование диапазона портов: nmap -p 20-1024 localhost – проверка всех стандартных сервисов.
  • Сканирование всех портов: nmap -p- localhost – полный аудит системы.
  • Определение состояния хоста и служб: nmap -sV localhost – показывает версии сервисов на открытых портах.
  • Сканирование удалённого хоста: nmap -Pn 192.168.1.10 – проверка доступности без попытки ping.

Рекомендации по использованию:

  1. Запускать nmap с правами суперпользователя для более точного сканирования: sudo nmap -sS -p 1-65535 localhost.
  2. Сохранять результаты в файл для анализа: nmap -oN scan_results.txt localhost.
  3. При сканировании сети использовать -T4 для ускорения процесса без значительного риска блокировок.
  4. Обращать внимание на статусы портов: open (открыт), closed (закрыт), filtered (фильтруется фаерволом).
  5. Закрывать только те порты, которые не используются, после проверки зависимостей сервисов.

Регулярное сканирование nmap позволяет контролировать поверхность атаки и предотвращать несанкционированный доступ через открытые порты.

Сохранение и восстановление правил файрвола при перезагрузке

Сохранение и восстановление правил файрвола при перезагрузке

Для iptables используйте команду iptables-save > /etc/iptables/rules.v4 для сохранения текущих правил. Для IPv6 аналогично: ip6tables-save > /etc/iptables/rules.v6. Эти файлы гарантируют восстановление правил после перезагрузки при условии, что система настроена на их применение через сервис.

В системах с systemd создайте сервис, например /etc/systemd/system/iptables-restore.service с содержимым:

[Unit]
Description=Restore iptables rules
Before=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore < /etc/iptables/rules.v4
ExecStartPost=/sbin/ip6tables-restore < /etc/iptables/rules.v6
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Активируйте сервис командами: systemctl enable iptables-restore.service и systemctl start iptables-restore.service. После этого правила автоматически применяются при загрузке системы.

Для firewalld используйте firewall-cmd --runtime-to-permanent для сохранения текущей конфигурации в постоянную. Перезапуск firewalld или системы применяет сохраненные правила без дополнительной настройки.

Регулярно проверяйте файлы /etc/iptables/rules.v4 и /etc/iptables/rules.v6, чтобы убедиться, что они содержат актуальные правила, особенно после внесения изменений вручную или через скрипты. Это предотвращает потерю настроек при аварийной перезагрузке.

Для резервного копирования рекомендуется хранить копии правил в отдельной директории с меткой даты, например /var/backups/iptables-YYYYMMDD.rules, что облегчает восстановление при ошибках конфигурации.

Мониторинг открытых портов и подозрительных подключений

Анализ подозрительных подключений требует фильтрации по внешним IP и частоте соединений. Для этого используют iptables с логированием или утилиты вроде fail2ban, которые автоматически блокируют повторяющиеся попытки соединений с одного IP. Важно фиксировать порт, протокол и PID процесса, инициирующего соединение.

Команда Назначение Пример использования
ss -tuln Просмотр всех прослушивающих TCP/UDP портов ss -tuln | grep LISTEN
lsof -i Отображение всех активных сетевых соединений с процессами lsof -i -P -n
netstat -tulnp Отображение портов и PID процессов (устаревшая, но распространенная) netstat -tulnp
iptables -L -v -n Проверка правил фильтрации и логирования попыток соединений iptables -L -v -n —line-numbers

Регулярное сравнение текущего состояния портов с эталонной конфигурацией позволяет выявлять новые или неожиданные сервисы. Для автоматизации мониторинга используют скрипты на Bash или Python с уведомлениями на почту при обнаружении изменений. Логи соединений следует хранить не менее 30 дней для анализа атак типа brute-force или сканирования портов.

При выявлении неизвестного процесса, открывающего порт, рекомендуется проверить его путь и подпись пакета через ps -p PID -o cmd,uid,gid и rpm -qf /path/to/executable или dpkg -S /path/to/executable, после чего принять решение о блокировке или удалении.

Мониторинг стоит интегрировать с системами IDS/IPS (например, Snort или Suricata), которые анализируют трафик и фиксируют подозрительные соединения на уровне пакетов, что обеспечивает дополнительный уровень защиты наряду с контролем открытых портов.

Вопрос-ответ:

Как узнать, какие порты открыты на моем сервере Linux?

Для этого можно воспользоваться утилитой netstat или ss. Команда ss -tuln покажет все прослушиваемые TCP и UDP порты с указанием программ, которые их используют. Также полезно использовать lsof -i для определения процессов, связанных с сетевыми соединениями.

Можно ли закрыть порт, который используется системной службой?

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

Какие методы существуют для блокировки нежелательных портов в Linux?

Есть несколько способов. Один из них — использовать встроенный брандмауэр iptables или более современный nftables, создавая правила, которые блокируют соединения на определенные порты. Можно также воспользоваться ufw, если нужна более простая настройка: команды вроде ufw deny 22 блокируют доступ к порту 22 для всех внешних соединений.

Можно ли автоматически проверять и закрывать открытые порты?

Да, с помощью скриптов на bash или python можно регулярно проверять список прослушиваемых портов и автоматически добавлять правила в брандмауэр для нежелательных. Также существуют инструменты для аудита безопасности, такие как fail2ban, которые умеют блокировать порты при подозрительной активности.

Какие риски возникают, если оставить открытые порты без контроля?

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

Ссылка на основную публикацию