middle
Как работает firewall в Linux? Что такое ufw и iptables?
Firewall (межсетевой экран) фильтрует сетевой трафик на основе правил. В Linux фильтрация выполняется на уровне ядра с помощью netfilter. Утилиты iptables, nftables и ufw — различные интерфейсы управления netfilter.
ufw (Uncomplicated Firewall)
Простой интерфейс для управления firewall в Ubuntu:
Пример
# Включить / отключить
sudo ufw enable
sudo ufw disable
# Показать статус и правила
sudo ufw status verbose
sudo ufw status numbered # С номерами правил
# Политика по умолчанию
sudo ufw default deny incoming # Запретить весь входящий трафик
sudo ufw default allow outgoing # Разрешить весь исходящий трафик
# Разрешить порты
sudo ufw allow 22 # SSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw allow 8080/tcp # Порт приложения (только TCP)
# Разрешить с определённого IP
sudo ufw allow from 192.168.1.0/24 to any port 5432 # PostgreSQL только из локальной сети
# Удалить правило
sudo ufw delete allow 8080/tcp
iptables
Примеры команд iptables
# Показать текущие правила
sudo iptables -L -n -v
# Разрешить входящий SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешить HTTP и HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Запретить всё остальное входящее
sudo iptables -A INPUT -j DROP
# Разрешить loopback
sudo iptables -A INPUT -i lo -j ACCEPT
# Разрешить установленные соединения
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
В Ubuntu 24.04 iptables является обёрткой над nftables (новый фреймворк, пришедший на замену iptables).
Типичная конфигурация для Java-приложения
Пример
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP (Nginx как reverse proxy)
sudo ufw allow 443/tcp # HTTPS
# НЕ открываем 8080 наружу — он доступен только через reverse proxy
sudo ufw enable
На собеседовании: достаточно знать
ufw,iptablesспрашивают редко. Ключевой момент — понимание, что порт приложения (8080) не должен быть открыт наружу напрямую, трафик идёт через reverse proxy (Nginx). Частая ошибка — открывать все порты и забывать о принципе наименьших привилегий.