Открытие портов в Linux: iptables и firewall настройка

Открытие портов в Linux — штука, про которую вспоминают, когда надо что-то быстро поднять: веб-сервер, VPN, кастомную API. Но если ты не хочешь, чтобы твой сервер внезапно стал частью ботнета или «просто не работал», лучше разобраться, как правильно настраивать iptables и firewall. Расскажу, как это делать, чтобы не наломать дров, не словить кучу ошибок и не сидеть потом на форумах с криком “почему у меня всё упало?”.

Зачем вообще нужны открытые порты?

Если коротко: любой сервис (nginx, ssh, mysql, docker, etc) слушает определённый порт. Если порт закрыт фаерволом — извне к нему не достучаться. Иногда это хорошо (безопасность!), иногда — плохо (сервис недоступен). Так что открываем только то, что реально надо, и только на нужных интерфейсах.

Что потребуется

  • Любой Linux (Ubuntu, Debian, CentOS, Fedora, Arch — подойдёт всё, нюансы будут в командах)
  • root-доступ или sudo
  • iptables (или nftables, но тут речь про iptables, как олицетворение классики)
  • firewalld (на новых CentOS/Fedora) или ufw (на Ubuntu)
  • Желательно — ssh-доступ к серверу, чтобы не делать всё руками в консоли на физическом сервере (рискуешь отрубить себе доступ!)

Установка и базовая настройка

Проверяем, что у тебя стоит

# Для Ubuntu/Debian
sudo iptables --version
sudo ufw status

# Для CentOS/Fedora/RHEL
sudo iptables --version
sudo firewall-cmd --state

Если не установлен — ставим:

# Ubuntu/Debian
sudo apt update
sudo apt install iptables ufw

# CentOS/Fedora
sudo yum install iptables-services firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld

Открываем порты через iptables (олдскул, но работает везде)

# Открыть порт 80 (HTTP)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# Открыть порт 443 (HTTPS)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Открыть кастомный порт (например, 8080)
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# Сохраняем правила, чтобы не слетели после ребута
# Для Ubuntu/Debian
sudo apt install iptables-persistent
sudo netfilter-persistent save

# Для CentOS
sudo service iptables save

Открываем порты через UFW (Ubuntu way, проще для новичков)

# Включаем ufw
sudo ufw enable

# Открываем порт 22 (ssh)
sudo ufw allow 22/tcp

# Открываем порт 80 (http)
sudo ufw allow 80/tcp

# Открываем диапазон портов (например, 5000-6000)
sudo ufw allow 5000:6000/tcp

# Проверяем статус
sudo ufw status verbose

Открываем порты через firewalld (CentOS/Fedora way)

# Открываем порт 3306 (MySQL)
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent

# Открываем порт 8080 (кастомный)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

# Применяем изменения
sudo firewall-cmd --reload

# Проверяем открытые порты
sudo firewall-cmd --list-ports

Полный список команд и вариантов

  • iptables -L — показать текущие правила
  • iptables -D — удалить правило (например, sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT)
  • iptables -F — очистить все правила (ОСТОРОЖНО!)
  • ufw status numbered — посмотреть статус с номерами правил
  • ufw delete [номер] — удалить правило по номеру
  • firewall-cmd —list-all — показать все настройки зоны
  • firewall-cmd —remove-port=8080/tcp —permanent — закрыть порт

Ошибки и как делать не надо

  • Не открывай всё подряд (например, iptables -P INPUT ACCEPT или ufw default allow) — это дырявит твой сервер.
  • Не забывай сохранять правила! После ребута они могут исчезнуть.
  • Не тестируй всё на проде. Ошибся — отрубил себе ssh, и всё.
  • Не открывай порты на всех интерфейсах, если нужен только localhost (iptables -A INPUT -i lo ...).
  • Не забывай про UDP, если тебе нужен, например, DNS или WireGuard (--dport 53 -p udp).

Пример реального применения

Допустим, ты поднимаешь на VPS свой pet-проект на Node.js, который слушает порт 3000. После деплоя сервис не открывается извне. Проверяешь: curl localhost:3000 — работает, а снаружи — нет. Скорее всего, порт закрыт фаерволом.

# Для Ubuntu
sudo ufw allow 3000/tcp
sudo ufw reload

# Для CentOS
sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent
sudo firewall-cmd --reload

# Для iptables
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
sudo netfilter-persistent save

После этого твой сервис должен быть доступен по http://your-server-ip:3000.

Заключение

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

Пусть твои порты будут открыты только для своих!

Хотите прочитать больше про Разное?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *