Gymterview
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). Частая ошибка — открывать все порты и забывать о принципе наименьших привилегий.