Фаерволл мой — сон мой!

Что такое фаерволл? Это обычная программа которая выполняет какие-то функции, а именно фактически управляет правилами (разрешениями) управления трафика вашей сети. Фаерволов есть много, разных, хороших и плохих, вкусных, и кислых, но в операционных системах семейства linux в основном используется программа iptables.

Вот о ней мы сегодня и будем говорить и на основе ee строить фаерволл начального уровня для защиты сети и маршрутизатора!

Прежде чем строить фаерволл важна задача, нужно четко понимать, что мы хотим!

Чтобы было проще я всегда задачи разбиваю на под задачи, таким образом проще решать глобальную задачу, вот и теперь разберем задачу фаерволл на несколько подзадач.

Нарисуем некий мифический маршрутизатор на котором нужно установить фаерволл .

На нашем маршрутизаторе установлена linux и установлена программа iptables, наш linux имеет две сетевые карты. Одна из них включена в локальную сеть, другая включена в сеть интернет, которую предоставляет провайдер!

Вижу сразу несколько задач которые нужно решать :

      1. Управлять теми кто стремиться подключиться к нашему серверу извне

      2. Управлять пользователями сети которые находятся в нашей локальной сети и которые стремятся подключиться к ресурсам интернет.

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

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

Итак подчеркнем :

      • Управлять теми кто стремиться подключиться к нашему серверу — это цепочка INPUT

      • Управлять пользователями сети которые находятся в нашей локальной сети и которые стремятся подключиться к ресурсам интернет те. за пределы нашей сети — это цепочки FORWARD, NAT

      • Управлять трафиком который может быть порожден самим маршрутизатором — это цепочка OUTPUT.

Теперь читайте выше изложенного несколько раз и как говорится до просветления, если вы четко не поймете чем отличается трафик цепочки INPUT от цепочки FORWARD то все таки обратитесь к профессионалу с просьбой построить фаерволл либо же просто экспериментируйте не на живом сервере!

Авторизуйтесь в системе под root и создайте простой текстовый файл .


Root#>./my

  После открываем этот файл в любом текстовом редакторе и добавляем туда следующие строки :

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 200 > /proc/sys/net/ipv4/icmp_ratelimit

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

echo 256 > /proc/sys/net/ipv4/tcp_max_syn_backlog

echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses


#Здесь мы разрешили ядру пропускать через себя трафик типа FORWARD и несколько

#ограничили и обезопасили себя ограничив стандартные параметры ядра.


INET_IFACE="eth0" #имя интерфейса который подключен к интернету

LOCAL_FACE="eth1" #имя интерфейса подключенного к локальной сети

UNPRIPORTS="1024:65535"

IP="реальный айпи" #наш реальный айпи

my="айпи с которого управляю маршрутизатором "

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ip_gre

modprobe ip_nat_pptp

modprobe ip_conntrack_pptp

# это модули к айпитаблес которые реализуют некий функционал, видно из названия

iptables -F -t filter

iptables -F -t nat

iptables -F -t mangle


#Эти команды очищают все таблицы .


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

# устанавливаем значения таблиц по умолчания. То есть все запретили , а разрешать будем #только то, что нам нужно ! #Управление цепочкой OUTPUT выходит за рамки этой статьи

#поэтому ее мы разрешили по умолчанию.

#Против подтелки адресов

iptables -A INPUT -i $INET_IFACE -s 192.168.0.0/16 -j DROP

iptables -A INPUT -i $INET_IFACE -s 10.0.0.0 -j DROP

iptables -A INPUT -i $INET_IFACE -s 224.0.0.0/8 -j DROP

iptables -A INPUT -i $INET_IFACE -s 127.0.0.0/4 -j DROP

iptables -A INPUT -i $INET_IFACE -s 172.16.0.0/12 -j DROP


iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT


iptables -A INPUT -i $LOCAL_FACE -j ACCEPT

iptables -A FORWARD -i $LOCAL_FACE -j ACCEPT


#Здесь мы разрешили принимать и отправлять пакеты , для интерфейса обратной связи и

#интерфейса локальной сети, причем дополнительно разрешили транзитный трафик для

#интерфейса локальной сети.


iptables -A FORWARD -p tcp -i $INET_IFACE -m multiport --dports 135,137,138,139,445 -j DROP


#Запрещаем подключаться к ресурсам файлового сервера из вне

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


#полезное правило которое избавляет нас от всяких там не до маршрутизаторов на основе

#cisco и иже с ними у которых вечно какие то проблемы с mtu и фрагментированием пакетов


iptables -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT


iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type 0 -j ACCEPT

iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type 3 -j ACCEPT

iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type 5 -j ACCEPT

iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type 11 -j ACCEPT


#это тем кто не может жить без пинга, чтобы машина пинговалась из мира.

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

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


iptables -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 25 -j ACCEPT


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

 

iptables -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 110 -j ACCEPT

iptables -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 143 -j ACCEPT

 

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


iptables -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 22 -j ACCEPT

хотя вернее это правило будет выглядеть так


iptables -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 22 -j ACCEPT -s $my

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

Переменная $my Задается в самом начале файла.


К тому же я рекомендую перевешивать стандартный порт на не стандартный :)

по умолчанию демон ssh ставится на 22 порт :) ну переставьте его на 922, и 90% атак на ваш сервер снимет как рукой :)

далее добавляйте правила на сое усмотрение , кому , что надо … если установлен сервер www нужно открыть 80 и 443 порты и т.д.

Теперь дадим пользователям интернет для этого добавим правило в таблицу NAT


iptables -t nat -A POSTROUTING -o $INET_IFACE -p tcp -s 192.168.0.1 -j SNAT --to-source $IP


Теперь у пользователя с айпи адрессом 192.168.0.1 будет иметь доступ в интернет !

Или дадим всем сразу:

iptables -t nat -A POSTROUTING -o $INET_IFACE -p tcp -s 192.168.0.0/24 -j SNAT --to-source $IP


Чем плохи эти правила, а тем , что дают полный доступ , а это плохо :) Любой червь тут же начнет рассылать спам , поэтому модернизируем наш доступ в интернет


iptables -t nat -A POSTROUTING -o $INET_IFACE -p tcp -s 192.168.0.1 -m multiport --dports 20,21,80,443,5190 -j SNAT --to-source $IP


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


Поехали дальше, иногда возникает задача дать доступ определенному порту и только когда доступ идет к определенному айпиадрессу !

Следующее правило решает эту задачу:


iptables -t nat -A POSTROUTING -o $INET_IFACE -p tcp -s 192.168.0.1 -m multiport --dports 5080,8081,80 -d www.uitg.kiev.ua t -j SNAT --to-source $IP


этим правилом мы разрешили пользователю с айпиадрессом 192.168.0.1 подключаться к портам 5080,8081,80 только в том случае если он обращается к хосту www.uitg.kiev.ua.

Для тех у кого интернет ассоциируется с работает или не работает, обязательно , добавляем следующее правило :

iptables -t nat -A POSTROUTING -o $INET_IFACE -p udp -s 192.168.0.1 -m multiport --dports  53 -j SNAT --to-source $IP


сделаем файл my исполняемым

#chmod ./my 777

Ну и запустим  его, после проверки записываем его в стартовые скрипты

Посмотреть на правила в работе можно выполнив команду

iptables -L -nv

Вот пожалуй и все удачи.

Первая Украинская Информационная Группа благодарит за написание статьи

Миненко Олега, системного администратора.

Копирование статьи разрешенио только с сохранением  авторства и указыванием первоисточника .

 

 
Вход
close
РЕГИСТРАЦИЯ
Оставте поле пароля пустым, для автоматической генерации пароля
close
Восстановление пароля

close