Организация роутера на базе FreeBSD + IPF (IPFILTER)



Автор: Igor Znamensky

1. Редактируем ядро и потом собираем.
2. Редактируем файл конфигурации системы /etc/rc.conf.
3. Создание правил фильтрации трафика и правил для NAT.

Эволюционный путь системного администратора токов, что рано или поздно он переходит от «форточки» к демоническим силам, а именно ОС FreeBSD. И этот выбор очевиден в силу своей первоначальной, как это казалось бы многим, сложности и железобетонной надежности.

В данной статье я приведу последовательность шагов для настройки роутера, по средствам ОС FreeBSD + IPFILTER. Хочу сразу заметить, что выбор именно этого фаервола (межсетевой экран) был сделан в силу его простоты и не чуть не меньшей эффективность по отношению с другими фаерволами.

Самые настойчивые могут (я настоятельно рекомендую) ознакомиться с еще более мощным продуктом из линейки фаерволов для *NIX`сов «PF» (Pocket Filter), но это уже тема другой статьи.

Жестокий минимум который должен быть:

- ОС FreeBSD установлена;
- руки растут от плеч;
- глаза широко открыты и читают внимательно;

И так начнем:

1. Редактируем ядро и потом собираем.

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
# ee /usr/src/sys/i386/conf/MYKERNEL

скажем в самом - самом конце файла добавим:

# -- IPF
options IPFILTER # Сам IPFILTER.
options IPFILTER_LOG # Включение протоколирования.
options IPFILTER_DEFAULT_BLOCK # Блокировать всё на всех сетевых интерфейсах.

Жмем Ctrl + c и пишем exit.

1.2 Собираем и устанавливаем ядро:

# cd /usr/src/
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
# shutdown -r now

или процесс сборки, установки и перезагрузки можно объединить в одну команду:

# cd /usr/src/
# make buildkernel KERNCONF=MYKERNEL && make installkernel KERNCONF=MYKERNEL && shutdown -r now

&& - этот оператор будет ждать успешного выполнения команды перед ним и пока она не будет выполнена успешно следующая за ним не будет выполнена.

Думаю все понятно, но если все же возникнут трудности загляните сюда:

http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-building.html

2. Редактируем файл конфигурации системы /etc/rc.conf.

# ee /etc/rc.conf

Теперь надо добавить следующее строки:

# -- IPF ipfilter_enable="YES" # Start ipf firewall
ipfilter_rules="/etc/ipf.rules" # loads rules definition text file
ipmon_enable="YES" # Start IP monitor log
ipmon_flags="-Ds" # D = start as daemon
# s = log to syslog
# v = log tcp window, ack, seq
# n = map IP & port to names

gateway_enable="YES" # Enable as LAN gateway
ipnat_enable="YES" # Start ipnat function
ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat

Жмем Ctrl + c и пишем exit.

Думаю все понятно, но если все же возникнут трудности загляните сюда:

http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/firewalls-ipf.html

3. Создание правил фильтрации трафика и правил для NAT.

3.1 Правила для IPFILTER.

# touch /etc/ipf.rules
# ee /etc/ipf.rules

--- ipf.rules begin

# -- No restrictions on Loopback Interface (1)
pass in quick on lo0 all
pass out quick on lo0 all

# -- No restrictions on Local Interface (2)
pass in quick on fxp0 all
pass out quick on fxp0 all

# -- Let clients behind the firewall send out to the internet, (3)
# -- and replies to come back in by keeping state
pass out quick on rl0 proto tcp all keep state
pass out quick on rl0 proto udp all keep state
pass out quick on rl0 proto icmp all keep state

# -- Let's people access the services running on this system (4)
pass in quick on rl0 proto tcp from any to any port 30000 >< 50000 flags S keep state #PASV FTP
pass in quick on rl0 proto tcp from any to any port = 21 #FTP
pass in quick on rl0 proto tcp from any to any port = 22 #SSH
pass in log quick on rl0 proto icmp from any to 62.16.105.195/8 icmp-type 8 keep state #Ping
pass in quick on rl0 proto tcp/udp from any to any port = 53 #DNS
pass in quick on rl0 proto tcp from any to any port = 80 #WWW
pass in quick on rl0 proto tcp from any to any port = 4899 #RAdmin

--- ipf.rules end

Жмем Ctrl + c и пишем exit.

где,

lo0 - устройство loopback.
fxp0 - сетевая карта смотрящая во внутреннею сеть.
rl0 - сетевая карта смотрящая в Internet.

1 - устройство loopback должно быть обязательно разрешено все для правильной работы;
2 - ни каких запретов внутренней LAN;
3 - разрешить исходящие TCP, UDP & ICMP сессии с сохранением соединения;
4 - открыть порты на сетевые службы;

перезагрузим правила.

# ipf -Fa -f /etc/ipf.rules

(!) Так можно делать перезагрузку любых изменений правил для IPF без перезапуска всей системы.

3.1 Правила для NAT.

# touch /etc/ipnat.rules
# ee /etc/ipnat.rules

--- ipnat.rules begin

rdr rl0 62.16.105.195/32 port 80 -> 192.168.0.5 port 80 tcp (1)
rdr rl0 62.16.105.195/32 port 4899 -> 192.168.0.5 port 4899 tcp
map rl0 192.168.0.0/8 -> 0/32 proxy port ftp ftp/tcp (2)
map rl0 192.168.0.0/8 -> 0/32 portmap tcp/udp 1025:65000 (3)
map rl0 192.168.0.0/8 -> 0/32 (4)

--- ipnat.rules end

1 - переброска входящих соединений на внутренний WEB сервер. Тоже самое с портом 4899 для RAdmin;
2 - проксирование FTP входящих/исходящих запросов;
3 - распределяет все исходящие сессия на порты от 1025 до 65000;
4 - тоже что и 3, но перекидывает все исходящие без рамок на используемые порты для сессий.

Жмем Ctrl + c и пишем exit.

перезагрузим правила.

# ipnat -CF -f /etc/ipnat.rules

(!) Так можно делать перезагрузку любых изменений правил для NAT без перезапуска всей системы.

Вот собственно все, что я хотел донести до Ваших умов.

Источник: www.surgutnet.ru

Обновлено: 12.03.2015