Проброс портов и настройка NAT: руководство по iptables
Концепции NAT, правила DNAT/SNAT, проброс портов с iptables и nftables, маскарадинг и сценарии использования: игровые серверы, веб-серверы за NAT.
Содержание
Проброс портов и настройка NAT: руководство по iptables
Проброс портов и NAT (Network Address Translation) — фундаментальные инструменты управления сетевым трафиком. Вы используете эти техники для открытия сервисов за сервером наружу, настройки игровых серверов или управления несколькими сервисами через один IP.
Что такое NAT?
NAT (Network Address Translation) — сетевая техника, изменяющая адреса источника или назначения IP-пакетов. Есть два основных типа:
- SNAT (Source NAT): Изменяет IP-адрес источника — для исходящего трафика
- DNAT (Destination NAT): Изменяет IP-адрес назначения — для маршрутизации входящего трафика
- Masquerade: Специальный тип SNAT для динамических IP
Включение IP-пересылки
# Включить временно
sudo sysctl -w net.ipv4.ip_forward=1
# Включить постоянно
sudo nano /etc/sysctl.conf
# Добавить строку:
# net.ipv4.ip_forward=1
# Применить изменения
sudo sysctl -p
# Проверить
cat /proc/sys/net/ipv4/ip_forward
# Вывод: 1
Проброс портов с iptables (DNAT)
Базовый проброс портов
# Перенаправить внешний порт 80 на внутренний сервер
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
# Перенаправить внешний порт 443 на внутренний сервер
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
# Перенаправить на другой номер порта (внешний 8080 → внутренний 80)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
# Разрешить перенаправленный трафик
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 443 -j ACCEPT
Проброс UDP-портов
# Проброс UDP-порта для игрового сервера
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -A FORWARD -p udp -d 192.168.1.30 --dport 27015 -j ACCEPT
SNAT и Masquerade
# Masquerade — для динамического IP
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# SNAT — для статического IP (эффективнее)
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1
Полная конфигурация NAT
# 1. Очистить существующие правила
sudo iptables -F
sudo iptables -t nat -F
# 2. Политики по умолчанию
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 3. Loopback и установленные соединения
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# 4. SSH-доступ
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 5. Правила проброса портов
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
# 6. Правила FORWARD
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 443 -j ACCEPT
sudo iptables -A FORWARD -p udp -d 192.168.1.30 --dport 27015 -j ACCEPT
# 7. Masquerade
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 8. Сохранить правила
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
Проброс портов с nftables
#!/usr/sbin/nft -f
flush ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority -100;
tcp dport 80 dnat to 192.168.1.10:80
tcp dport 443 dnat to 192.168.1.10:443
udp dport 27015 dnat to 192.168.1.30:27015
}
chain postrouting {
type nat hook postrouting priority 100;
oif eth0 masquerade
}
}
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
tcp dport 22 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state established,related accept
ip daddr 192.168.1.10 tcp dport { 80, 443 } accept
ip daddr 192.168.1.30 udp dport 27015 accept
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Сценарии использования
Сценарий 1: Игровой сервер (CS2, Minecraft)
# Сервер CS2
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -A FORWARD -d 192.168.1.30 -p udp --dport 27015 -j ACCEPT
# Сервер Minecraft
sudo iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.31:25565
sudo iptables -A FORWARD -d 192.168.1.31 -p tcp --dport 25565 -j ACCEPT
Сценарий 2: Веб-сервер за NAT
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
sudo iptables -A FORWARD -i eth0 -d 192.168.1.10 -p tcp -m multiport --dports 80,443 -j ACCEPT
Устранение неполадок
# Просмотр таблицы NAT
sudo iptables -t nat -L -n -v
# Просмотр таблицы отслеживания соединений
sudo conntrack -L
# Мониторинг трафика на конкретном порту
sudo tcpdump -i eth0 port 80
# Проверка IP-пересылки
cat /proc/sys/net/ipv4/ip_forward
После добавления правил проброса портов не забудьте добавить как правила PREROUTING (DNAT), так и FORWARD. Добавления только правила DNAT недостаточно — трафик также должен быть разрешён в цепочке FORWARD.
Заключение
Проброс портов и NAT — фундаментальные компоненты управления сетью Linux. Правильно настроив правила DNAT, SNAT и masquerade с помощью iptables или nftables, вы можете открыть игровые серверы, веб-сервисы и другие приложения из-за NAT.
Связанные статьи
Сканирование на вредоносное ПО и руткиты: rkhunter и ClamAV
Защитите Linux-сервер от вредоносного ПО и руткитов. Установка rkhunter и ClamAV, настройка сканирования, интерпретация результатов, планирование сканирований и реагирование на инциденты.
Настройка Fail2Ban: Защита SSH от брутфорс-атак
Защитите сервер от SSH брутфорс-атак с помощью Fail2Ban. Установка, настройка jail.local, джейлы для Nginx/Apache, белый список IP, мониторинг блокировок и email-уведомления.
Настройка VPN-сервера WireGuard: пошаговое руководство
Настройте VPN-сервер WireGuard: генерация ключей, конфигурация сервера и клиента, IP-пересылка, правила брандмауэра и настройка клиентов Windows/Linux/Android.