iptables пример настройки на Debian

iptables — часть ядра, применяющаяся для управления сетевым трафиком и его фильтрации. Особенно большое значение iptables имеет для телефонии, Linux маршрутизаторах и веб-серверах. Рассмотрим пример базовой настройки iptables firewall.

 

 

iptables firewall для веб-сервера

Существует пять цепочек: INPUTPREROUTINGFORWARD, POSTROUTING, OUTPUT.

Для них можно задать различные политики основываясь на протоколе, адресах отправителя и получателя, используемых портах и т.п. iptables в целом является очень обширной темой и охватить все вопросы в рамках одной статьи очень сложно.

 

Настройки производятся для сервера, на котором работает веб-сервер, обслуживающий пользовательские запросы. Из других важных служб — только SSH, все остальные добавляются аналогично. Различаются только номера портов.

 

Все команды выполняются от имени системного пользователя root или пользователя с sudo.

 

Затем зададим политику по умолчанию для всех входящих и исходящих соединений (в том числе для того которое используем — если настройка производится удаленно по SSH)

 

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

 

Увидеть политику по умолчанию нельзя выполнив iptables -L, нужно использовать ключ -S

iptables -S

 

Очищаем все правила (iptables -L чтобы увидеть их)

iptables -F

 

 

Разрешим все подключения (входящий трафик) для loopback интерфейса или lo. Это трафик, генерируемый на самом хосте службами, существующими на нем же.

iptables -A INPUT -i lo -j ACCEPT

Ключ -A (add) добавляет новое правило в firewall, с -i можно указать интерфейс, -j (jump) указывает как обрабатывать пакеты. В данном случае в соответствии с правилом пакеты нужно принимать.

 

 

Для понимания следующей команды нужно иметь представление о типах соединений, это NEW, ESTABLISHED и RELATED. Значения NEW, ESTABLISHED следуют из названий, RELATED означает, что соединение связано с уже имеющимся, но при этом открывает новый поток передачи данных.

Разрешаем все установленные и относящиеся к ним соединения.

 

iptables -A INPUT -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT

 

Здесь имеет смысл проявить осторожность и попробовать подключиться по SSH к тому же серверу после завершения настройки, но до прекращения сессии. Если случайно закрыть SSH доступ совсем,  текущее соединение не прервется — оно является ESTABLISHED.

Вновь же подключиться к серверу по SSH уже может не получиться.

 

conntrack — модуль, позволяющий использовать состояния.



 

Открываем доступ для основных служб в iptables firewall

Поскольку для iptables пример настройки базовый разрешим подключения по ssh, работу веб-сервера и почты. На практике может быть значительно больше служб.


Разрешаем доступ по SSH для всех принимая пакеты, которые направляются на стандартный порт, если служба работает на другом порту правило потребуется скорректировать.

iptables -A INPUT -p tcp —dport 22 -j ACCEPT

 

 

Если вам требуется открыть доступ к веб серверу цепочка будет выглядеть также, за исключением номера порта.

Таким же образом можно открыть входящие соединения для любых других служб — например, для веб-сервера

 

iptables -A INPUT -p tcp —dport 80, 443 -j ACCEPT

Для любой другой службы — та же команда, изменится только номер порта.

 

Меняем политику по умолчанию и отбрасываем все остальные входящие пакеты

iptables -P INPUT DROP

 

Также запрещаем любую переадресацию трафика

iptables -P FORWARD DROP

 


Так как описано выше делают чаще всего, но у этого решения есть недостаток. iptables -P INPUT DROP означает, что все соединение будут отвергаться по умолчанию и если выполнить iptables -F — к серверу нельзя будет подключиться, потребуется аварийный режим и загрузочный USB.

 

Лучшая практика

Удаляем последнее правило, задающее политику по-умолчанию

iptables -D INPUT -j DROP

 

Добавляем правило, по которому будут отбрасываться пакеты.

iptables -A INPUT -j DROP

Отличие в том, что если выполнить iptables -F оно перестанет существовать и останется дефолтная политика, разрешающая подключения. Доступ сохранится, на сервер можно будет зайти и задать новые настройки.


 

Весь исходящий трафик имеет смысл разрешить

iptables -P OUTPUT ACCEPT

 

Также при необходимости разрешаем пробрасывать трафик с одного интерфейса на другой

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

 

Сохраняем настройки firewall

iptables-save

 

Поле окончания настроек и проверки следует задать необходимость автоматической загрузки правил iptables после перезагрузки сервера.