Настройка iptables

Задача:

Защита сервера с помощью iptables

Решение:

Iptables осуществляет фильтрацию сетевых пакетов, в нем применяется концепция упорядоченной цепочки правил, согласно которой проверяются сетевые пакеты. Наборы цепочек образуют таблицы, предназначенные для обработки определенных видов трафика. Iptables имеет 3 таблицы: filter, nat, mangle. Таблица filter имеет 3 цепочки:

  • FORWARD - правила в данной цепочке применяются ко всем пакетам, которые поступают в один интерфейс и перенаправляются на другной.
  • INPUT - правила в данной цепочке применяются к входящим пакетам предназначенным для локальных служб.
  • OUTPUT - правила в данной цепочке применяються к исходящим пакетам от локальных служб.

В таблице nat содержатся цепочки правил POSTROUTING, PREROUTING предназначенные для управления системой NAT(Network Address Translation) Таблица mangle содержит цепочки, предназначенные для модификации содержимого сетевых пакетов вне контекста системы NAT или механизма фильтрации пакетов.

В системах подобных CentOS все правила загружаемые при запуске службы iptables хранятся в файле /etc/sysconfig/iptables Для сохранения добавленных цепочек необходимо выполнить команду:

 service iptables save 
В системах подобных Debian для упрпавления службой iptables необходимо установить пакет iptables-persistent выполнив следующую команду:
 apt-get install iptables-persistent 
В этом случае цепочки правил будут храниться в файлах /etc/iptables/rules.v4 и /etc/iptables/rules.v6.

Примеры создания цепочек:

 iptables -t filter -nL 
iptables -nL  
— отобразить все цепочки правил
iptables -t nat -L 
— отобразить все цепочки правил в NAT-таблице
iptables -t filter -F или iptables -F 
— очистить все цепочки правил в filter-таблице
iptables -t nat -F 
— очистить все цепочки правил в NAT-таблице
iptables -t filter -X 
— удалить все пользовательские цепочки правил в filter-таблице
iptables -t filter -A INPUT -p tcp –dport telnet -j ACCEPT 
— позволить входящее подключение telnet'ом
iptables -t filter -A OUTPUT -p tcp –dport http -j DROP 
— блокировать исходящие HTTP-соединения
iptables -t filter -A FORWARD -p tcp –dport pop3 -j ACCEPT 
— позволить «прокидывать» (forward) POP3-соединения
iptables -t filter -A INPUT -j LOG –log-prefix «DROP INPUT»  
— включить журналирование ядром пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса «DROP INPUT»
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
— включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами.
iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp –dport 22 -j DNAT –to-destination 10.0.0.2:22 
— перенаправление пакетов, адресованных одному хосту, на другой хост

Для подключению модуля geoip в iptables необходимо установить этот модуль вместе с дополнительными модулями фаервола:

 apt-get install xtables-addons-common libtext-csv-xs-perl 
Так же необходимо собрать базы содержашие диапозоны IP адресов и стран. Для этого вместе с пакетом xtables-addons были установлены 2 скрипта для скачивания и сборки баз geoip. Создадим папку в которой будут находиться базы geoip:
 mkdir /usr/share/xt_geoip 
Далее скачаем и соберем базы geoip:
cd /usr/lib/xtables-addons 
./xt_geoip_dl 
./xt_geoip_build -D /usr/share/xt_geoip *.csv 
Теперь можно добавлять правила для блокировки некоторого диапазона IP адресов относящихся с какому-либо региону:
iptables -I INPUT ! -i lo -p tcp --dport 80 -m geoip --src-cc US -j DROP 
- в данном случае будут заблокированы все пакеты приходящие из США на любой сетевой интерфейс кроме локального, на порт 80.
iptables -I INPUT ! -i lo -p tcp --dport 80 -m geoip ! --src-cc US -j DROP 
- в данном случае будут заблокированы все пакеты приходящие из либой страны, кроме США на любой сетевой интерфейс кроме локального, на порт 80.

Смотрите также: