Открытие портов в 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, но требует внимательности. Не забывай про безопасность: открывай только то, что реально нужно, и только тем, кому это надо. Всегда сохраняй правила, тестируй локально, делай бэкапы конфигов. Если хочешь углубиться — читай официальную доку:
Пусть твои порты будут открыты только для своих!
Ваш отзыв