Удобный вариант настройки iptables в Debian Squeeze

от автора

Настройка файервола — обязательный и очень важный этап при развертывании любого сервера.

В операционной системе Linux файерволом является компонент ядра netfilter, управление которым осуществляется через утилиту iptables.
Статей по настройке правил iptables существует множество, поэтому я напишу о том, что обычно в этих статьях упускается или рассматривается поверхностно. А именно — о способе загрузки набора правил.

Чаще всего используется выгрузка сформированного набора правил в файл посредством iptables-save. В дальнейшем, правила из этого файла считываются через iptables-restore при каждой загрузке сервера.

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

Внимание, данный набор правил является неполным, и недостаточным для полноценной работы!
Это лишь пример.

Создадим файл, назовем его iptables, и поместим в каталог /etc/init.d
Разумеется, для этого действия нужно иметь административные права.

Стартовый скрипт в Debian, начиная с версии Squeeze, должен иметь в шапке код, указывающий, когда скрипт будет загружаться:

#!/bin/sh ### BEGIN INIT INFO # Provides:          iptables # Required-Start:    mountkernfs $local_fs # Required-Stop:     $local_fs # Default-Start:     2 3 4 5 # Default-Stop:      0 1 6 # Short-Description: iptables # Description:       iptables config script ### END INIT INFO 

В нашем случае, Required-Start и Required-Stop указаны такие-же, как у системного скрипта networking, чтобы правила файервола грузились сразу же при поднятии сети.

Далее после шапки, собственно, идет набор правил:

# Очистка имеющихся правил: iptables -F iptables -F -t nat # Политики по умолчанию: iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # Разрешить все на интерфейсе lo: iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT 

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

# Подсети, из которых разрешен SSH: EXT_SSHS='64.15.113.0/24 64.15.115.0/24 64.15.117.0/24' PROXY_USERS='192.168.1.0/24              192.168.3.0/24              192.168.5.0/24              192.168.6.0/24              192.168.14.0/24'  # Правила SSH для внешней сети: for EXT_SSH in $EXT_SSHS do  iptables -A INPUT -i eth0 -s $EXT_SSH -p tcp -m tcp --dport 22 -j ACCEPT  iptables -A OUTPUT -o eth0 -d $EXT_SSH -p tcp -m tcp --sport 22 -j ACCEPT done  # Доступ к прокси серверу: for PROXY_USER in $PROXY_USERS do  iptables -A INPUT -s $PROXY_USER  -p tcp -m tcp --dport 3128-j ACCEPT  iptables -A OUTPUT -d $PROXY_USER  -p tcp -m tcp --sport 3128 -j ACCEPT done 

Теперь сделаем наш скрипт исполняемым и добавим в систему в качестве стартового скрипта:

chmod +x iptables insserv iptables 

Теперь для (пере)применения правил достаточно выполнить:

service iptables 

или

/etc/init.d/iptables 

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

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

ссылка на оригинал статьи http://habrahabr.ru/post/175477/