В операционной системе 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/
Добавить комментарий