Самая простая настройка Iptables

Общие слова.

IpTables — файервол применяемый в операционных системах Linux. Необходим для защиты самого сервера и других компьютеров, которые он защищает.

Состоит из набора правил, которые определяют, что делать с пакетом данных, в зависимости от протокола (TCP, UDP…), направления (входящий, исходящий, проходящий ;-) ), интерфейса и еще нескольких параметров.

Очень прост и популярен. Для меня он даже более привычен, чем работа с виндовыми файерволлами имеющими графический интерфейс. Настраивается выполнением команд в командной строке.

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

Приведу пример первоначальной, самой простой настройки, которую по мере необходимости можно дополнить правилами до нужной функциональности.

Все манипуляции происходят в Ubuntu Server 12.04. Практически без изменений все будет аналогично в других версиях Ubuntu и Debian. В остальных дистрибутивах могут быть непринципиальные отличия связанные с разным расположением необходимых файлов и каталогов.

Написать хочу кратко, с минимальными пояснениями — ничего лишнего, чтобы долго не вчитываться, а сразу можно было выполнять. Больше для того, чтобы вспомнить слегка забытое, чем научиться неизвестному.

=> Скриптовый файл.

Первое — создать файл для будущего набора правил. Обычно файлы выполняемые при загрузке системы располагаются в директории /etc/init.d/

Переходим в этот каталог и выполняем:

touch firewall.sh

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

=>Вводная часть скрипта (описательная)

Открыть его для редактированияможно несколькими способами. Обычно я использую встроенный редактор Midnight Commander (MC) или идущий в операционной системе NANO. Мне больше нравится первый вариант, но Nano позволяет при работе через Putty (виндовый SSH-клиет) работать с буфером обмена. Так что если у вас есть уже записанные команды, которые надо только вставить, выполняем:

nano ./firewall.sh

Вставляем в него

#!/bin/sh  

Эта строка говорит, что данный скрипт при запуске выполняет программа /bin/sh

Вводим

IPT="/sbin/iptables"

Эта обозначает, что переменной присваивается значение, указанное в кавычках. В данном случае путь к программе IpTables. В разных дистрибутивах Linux может различаться. В дальнейшем, чтобы не писать полный путь,  будем использовать переменную. В довесок, переменным можно давать более «человеку понятные» имена — для удобочитаемости.

Пропишем интерфейсы, с которыми будем работать.

IF_LOCAL="eth0"
IF_LO="lo"

Интерфейс обычно это сетевая карта, но в более сложных конфигурациях могут присутствовать и виртуальные устройства. Название берется из вывода волшебной команды ifconfig

Теперь перечислим наши IP-адреса.

IP_GW="10.1.1.1"
LOOP="127.0.0.1"
IP_ADM="10.1.1.2"

lo — интерфейс обратной петли, а 127.0.0.1 — его адрес.

IP_ADM — адрес админской машины

Наша локальная сеть:

NET_LOCAL="10.1.1.0/24"

Настройки по умолчанию

Переходим непосредственно к настройке iptables.

По умолчанию запрешаем всю сетевую активность:

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

Эта секция запрещает прием, отправку, форвардинг любых пакетов на всех интерфейсах.

$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X

Очистка всех правил в цепочках IpTables.

Теперь в IpTables нет никаких правил и все запрещено. Чистый лист, который можно заполнять. Перечислены только объекты (интерфейсы и адреса) с которыми будем работать.

Наполнение правилами обработки соединений

$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT

Разрешаем пинговать наш сервер и ему пинговать окружающих.

$IPT -A INPUT -p tcp -i $IF_LOCAL -s $IP_ADM --dport 22 -j ACCEPT

Разрешаем доступ по протоколу tcp на интерфейс eth0 с адреса 10.1.1.2 на порт 22.

Переведя на русский. Доступ к серверу по SSH (управление из командной строки) при установке связи из сетей подключенных к интерфейсу eth0 и только с компьютеры с адресом 10.1.1.2

Компы с другими IP получить управление сервером не смогут — файервол отбросит их пакеты. Но пинговать его смогут, предыдущее правило позволяет.

$IPT -A INPUT -p tcp -i $IF_LOCAL -s $NET_LOCAL --dport 21 -j ACCEPT

Разрешаем доступ из всей нашей локальной сети к FTP серверу (22 порт), запущенному на нашем компьютере.

$IPT -A INPUT -i $IF_LOCAL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o $IF_LOCAL  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Эти правила позволяют принимать пакеты на интерфейск eth0 связанные с уже установленным соединением (-m state —state ESTABLISHED,RELATED). Например отправляем пинг и получаем ответ от удаленного компа. И разрешают устанавливать новые соединения с интерфейса eth0 (-m state —state NEW,ESTABLISHED,RELATED).

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

Теперь можно настраивать дальше, по вашим потребностям (разрешать соединения для сервисов на этом компьютере, например, веб-сервер).


Весь скрипт полностью:

#!/bin/sh  

IPT="/sbin/iptables"

IF_LOCAL="eth0"
IF_LO="lo"

LOOP="127.0.0.1"
IP_GW="10.1.1.1"
IP_ADM="10.1.1.2"

NET_LOCAL="10.1.1.0/24"

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X

$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT

$IPT -A INPUT -p tcp -i $IF_LOCAL -s $IP_ADM --dport 22 -j ACCEPT

$IPT -A INPUT -p tcp -i $IF_LOCAL -s $NET_LOCAL --dport 21 -j ACCEPT

$IPT -A INPUT -i $IF_LOCAL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o $IF_LOCAL  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

P.S.

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

Путь к нашему файлу /etc/init.d/firewall.sh

Набираем в консоли с правами root-а:

chmod u+x /etc/init.d/firewall.sh

Эта команда делает его исполняемым для владельца (root). Далее :

update-rc.d firewall.sh defaults

Теперь скрипт будет запускаться при каждой загрузке системы автоматически.

Запись опубликована в рубрике iptables, linux с метками , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>