Рубрики
Сервер

Как настроить iptables в Ubuntu

Настройка iptables в Ubuntu — это создание правил фильтрации сетевого трафика. Вот подробное руководство:

1. Установка и базовое управление

Проверим, установлен ли iptables:

bash

sudo apt update
sudo apt install iptables iptables-persistent

Посмотреть текущие правила:

bash

sudo iptables -L -v -n

Если iptables не настроен это будет выглядеть как-то так:

не настроенная 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 для веб-сервера. Настройте правила под свои конкретные нужды!