пятница, апреля 02, 2010

Фильтрующий мост

Ох, сколько я же здесь не писал! Сколько материала накопил! Но, наверное, здесь это будет последняя статья. Перееду я на новое место.

Пригласили меня на обслуживание одной организации. У них случилась беда. Вся сеть заражена вирусами. Плотно заражена. Ситуацию осложняло то, что в сети использовались личные ноутбуки сотрудников — в организации так заведено, что торговый отдел использует свои ПК. Естественно ни о каком контроле речи и не было. В итоге получили сеть живущей своей жизнью. Установлена WiFi точка доступа, к ней ноутбуки и цепляются.

Я принял решение раздробить сеть на 2 части, но оставить один сегмент. Управляемого коммутатора в обозримом будущем в сети не предвиделось, но на базе старого ПК я решил сделать сетевой мост и установить его в разрыв между коммутатором и точкой доступа. OpenSUSE на данный ПК вставать отказалась, зато Debian встал на ура.

Устанавливаем необходимые и не очень нам пакеты. Нам понадобится пакет bridge-utils, а mc я поставил ради редактора mcedit:

# apt-get install bridge-utils mc


Теперь настраиваем соединение типа мост из двух сетевых карт:

# mcedit /etc/network/interfaces


Убираем все настройки наших сетевых карт, оставляя только lo интерфейс и вводим новые, касающиеся нашего моста:

auto br0

iface br0 inet static

bridge_ports eth0 eth1

address 192.168.254.51

netmask 255.255.255.0

network 192.168.254.0

broadcast 192.168.254.255

gateway 192.168.254.254



Сохраняем конфигурацию и перезагружаем сеть:

# /etc/init.d/networking restart


По умолчанию хождение пакетов разрешено, а нам его необходимо запретить.
Создаем файл конфигурации iptables, куда мы будем прописывать наши настройки сетевого экрана:

# mcedit /etc/iptables-rules


Сначала запрещаем Forward пакетов, потом начинаем устанавливать разрешения.
В сети используется dhcp сервер, поэтому разрешаем хождение пакетов необходимых для его работы. Сотрудникам нужен Интернет, его тоже разрешаем, попутно разрешив DNS запросы. Так же необходим доступ к RDP серверу компании.

# Generated by iptables-save v1.4.2 on Thu Apr 1 23:30:23 2010

*filter

:INPUT ACCEPT [1123:100154]

:FORWARD DROP [205:61455]

:OUTPUT ACCEPT [778:99021]

-A FORWARD -p udp -m udp --sport 67:68 --dport 67:68 -j ACCEPT

-A FORWARD -p udp -m udp --dport 53 -j ACCEPT

-A FORWARD -p tcp -m tcp --dport 80 -j ACCEPT

-A FORWARD -p tcp -m tcp --dport 443 -j ACCEPT

-A FORWARD -p tcp -m tcp --dport 3389 -j ACCEPT

COMMIT

# Completed on Thu Apr 1 23:30:23 2010



Я вводил правила в командной строке, а потом сохранил их использую iptables-save. Как поступите вы — решать вам.

Теперь нам необходимо сделать правила загружаемыми вместе с системой. Создаем файл iptables в каталоге /etc/network/if-pre-up.d/:

# mcedit /etc/network/if-pre-up.d/iptables


С таким содержимым:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables-rules



И делаем его исполняемым:

# chmod +x /etc/network/if-pre-up.d/iptables


Все хорошо, но вот получаться адреса по dhcp отказались. Я перерыл кучу информации, смотрел вывод tcpdump. Идут запросы. Казалось все просто — один сегмент, пакеты не блокируются. Но нет.

И тут я наткнулся на dhcrelay. Мое спасение. Устанавливаем пакет dhcp3-relay:

# apt-get install dhcp3-relay


После установки запустится конфигуратор приложения. На первый вопрос вводим адрес нашего DHCP сервера (в этой сети его адрес 192.168.254.252):


На второй вводим имя нашего виртуального интерфейса моста (в моем случае br0, мы указывали его при редактировании файла /etc/network/interfaces):


На третий вопрос отвечаем немым согласием просто нажав клавишу Enter:


Ну вот и все, вроде, ничего не упустил. Адреса ПК получать стали.