Настройка iptables в Ubuntu — это создание правил фильтрации сетевого трафика. Вот подробное руководство:
1. Установка и базовое управление
Проверим, установлен ли iptables:
bash
sudo apt update
sudo apt install iptables iptables-persistent
Посмотреть текущие правила:
bash
sudo iptables -L -v -n
Если iptables не настроен это будет выглядеть как-то так:

2. Базовая настройка
Разрешим loopback-интерфейс:
bash
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
Это позволит внутренним сервисам общатся друг с другом. Например обращаться к MySQL
Разрешим установленные соединения:
bash
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Ping (ICMP):
bash
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
3. Открываем необходимые порты
SSH (порт 22) — ОБЯЗАТЕЛЬНО
bash
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
HTTP/HTTPS для веб-сервера:
bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Если нужен удаленный доступ к MySQL
(только если действительно нужен удаленный доступ к MySQL)
bash
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
После того как iptables настроен можно изменить политику по умолчанию в которой мы запретим все входящие соединения не соответствующие правилам.
Установим политику по умолчанию:
bash
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Проверьте не пропало ли ваше соединение, попробуйте подключится по новой сессии с другого терминала, проверьте работают ли веб-сервер, MySQL.
⚠️ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ
Не блокируйте SSH-порт (22), если работаете через удаленное подключение!
Если случайно заблокировали себя, перезагрузите сервер — правила сбросятся.
Просмотр и управление правилами
Посмотреть правила с номерами:
bash
sudo iptables -L -v -n --line-numbers
Удалить правило по номеру:
bash
sudo iptables -D INPUT 3
Очистить все правила:
Если вы решили очистить все правила не забывайте проверить политику по умолчанию так как раньше мы ее изменили «sudo iptables -P INPUT DROP» то есть запрещаем все входящие подключения.
bash
sudo iptables -P INPUT ACCEPT
Вот теперь очищаем все правила
bash
sudo iptables -F
Сохранение правил
Перед сохранением правил убедимся что все работает нормально, чтобы случайно не сохранить не работающие правила, так как после перезагрузки будут применяться сохраненные правила.
Для iptables-persistent:
bash
sudo netfilter-persistent save
или
bash
sudo /etc/init.d/netfilter-persistent save
или
Ручное сохранение:
bash
sudo iptables-save > /etc/iptables/rules.v4
Для IPv6 (если используется):
bash
sudo ip6tables-save > /etc/iptables/rules.v6
Дополнительные полезные правила
Защита от DDoS (ограничение соединений):
bash
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
Блокировка IP-адреса:
Помните запрещающие правила должны идти в начале!
bash
sudo iptables -I INPUT -s 192.168.1.100 -j DROP
Разрешить доступ только с определенной подсети:
bash
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
Автозагрузка правил
Создадим скрипт для автозагрузки:
bash
sudo nano /etc/network/if-pre-up.d/iptables
Добавим:
bash
#!/bin/sh /sbin/iptables-restore < /etc/iptables/rules.v4 /sbin/ip6tables-restore < /etc/iptables/rules.v6
Сделаем исполняемым:
bash
sudo chmod +x /etc/network/if-pre-up.d/iptables
Альтернатива: UFW (более простой вариант)
Если iptables кажется сложным, используйте UFW:
bash
sudo apt install ufw sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable
Это базовая настройка iptables для веб-сервера. Настройте правила под свои конкретные нужды!