Документация по ОС FreeBSD Среда, 24.04.2024, 01:23
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
IPFW [58]

Главная » Статьи » FireWall » IPFW

Инсталляция firewall под FreeBSD
Начнём

Итак, в нашем распоряжении имеется плоская локальная сеть скажем из 200 рабочих станций каждая станция получает ip адрес из сетки 192.168.1.0:255.255.255.0
Сразу замечу, что я намеренно использовал знак ":" между адресом сети и маской вместо "/" т.к. далее при конфигурации ipfw будет использоваться именно такая нотация. То есть записи 192.168.1.0:255.255.255.0 и 192.168.2.0/24 абсолютно тождественны.
Еще вам потребуется супер мощный компьютер (далее firewall) с двумя интерфейсами, один смотрит в вашу локальную сеть, а второй - заглядывает к вашему провайдеру. В моём случае в качестве такого сервера я использовал (только не смейтесь) Celeron 633, RAM-512Mb, hdd-20Gb. Вообще критичным является только объем памятиБ чем её больше - тем лучше. Конечно если вы собираетесь писать 15 страниц правил, то и процессор тоже потребуется побыстрее, но в нашем случае это не требуется.
В качестве ОС используется FreeBSD-4.3-RELEASE. Только не спрашивайте почему именно BSD, просто нравится. Думаю в скором времени я напишу сравнительную характеристику Linux vs. FreeBSD в качестве firewall.
Подготовка FreeBSD

Вам обзательно прийдется пересобрать ядро, т.к. стандартное просто не будет работать так, как нам это надо.. Сразу предупрежу, если вам не доставляет удовольствие пересборка ядра, и вас начинает слегка потряхивать, когда уже пятое ядро, собранное вами, не грузится, то лучше дальше не читать.
В файле конфигурации ядра обязательно надо указать
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_VERBOSE

Рекомендую также поставить
maxusers 512

это никак не повлияет на число пользователей, но увеличит некоторые системные таблицы.
В файле /etc/rc.conf добавьте

gateway_enable=YES
firewall_enable="YES"
firewall_script="/etc/firewall/test_firewall"
natd_enable="YES"
natd_interface="fxp0" #Имя интерфейса, смотрящего к провайдеру
natd_flags="-unregistered_only -dynamic"

В файле /etc/sysctl.conf прописать

net.inet.ip.forwarding=1

Что такое NAT?
(как писать скрипты)


Поздравляю! Теперь после перезагрузки вашего сервера никто не сможет пробраться в вашу локальную сеть, более того, вы сами не сможете сказать ping www.ru, т.е. сказать-то вы скажите, но в ответ получите Permission denied. Закрыли всё намертво. А всё по тому, что система самым последним (а в нашем случае и единственным) правилом ставит
65535 0 0 deny ip from any to any

Теперь наша цель - заставить проходить хоть какие-нибудь пакеты. Далее вашим любимым файлом должен стать /etc/firewall/test_firewall
Первыми строками должно быть что-то такое
#!/bin/sh
#Firewall rules
#Written by Roman Zabolotnikov (romaha@eoffice.ru)
#
#Freely distributable

fwcmd="/sbin/ipfw"
fakenet="192.168.0.0:255.255.224.0"
ext_if="fxp0"

#Flush a current rules
$fwcmd -f flush

#Debug rule, DISABLE IT!!!
/etc/firewall/test_firewall
Теперь, когда вы запустите этот скрипт все пакеты смогут проходить через ваш сервер, виной тому - последняя строчке.
Наверняка вам, как адепту безопасности в фирме, захочется, чтоб все внутренние ip адреса снаружи виделось как один. И я вас в этом поддерживаю, вот только не совсем понятно как это сделать. Правда в разговоре волосатых и немытых гуру вы слышали чудесные слова о NAT.

NAT - network address translations. Это процедура трансляции одних адресов в другие по определённым правилам. Объясню более подробно приминительно к нашей ситуации.
Клиент (например 192.168.1.10) запускает ping www.ru ваш firewall получает пакет с source address 192.168.1.10 и dest address 194.87.0.50 (www.ru) понятно, что адрес получателя трогать не надо, а то пакет уйдет не туда куда надо, а вот source меняется на ip вашего firewall и делается соответствующая запись в NAT таблице. Теперь для сервера www.ru кажется что к нему лезут с вашего сервера. Когда приходит ответ от www.ru на firewall-е происходит обратная трансляция в соответствии с записью в NAT-е.

C теорией немного разобрались, теперь посмотрим как же это реализовать на практике.

Перво-наперво из файла /etc/firewall/test_firewall удалите строчку
/etc/firewall/test_firewall
она была нужна только для теста. А вместо неё вставьте следущее
$fwcmd add divert natd all from any to any via $ext_if
$fwcmd add pass all from any to any
Теперь еще раз запускаем /etc/firewall/test_firewall
natd -v -unregistered_only -dynamic -interface fxp0

Как только firewall получит пакет от клиента вы увидите что-то подобное Out [TCP] 192.168.1.10:2139 => 111.222.333.444:2139 aliased to
1.2.3.444:2139 => 111.222.333.444:2139
Вот собственно и всё, минимальная работоспособность обеспечена. Точнее работоспособность максимальная без каких-либо ограничений. Теперь перейдём к моей любимой части, закрыванию всего чего можно.

Закрыть их всех!

Вообще существует много подходов к безопасности. Например - закрыть всё и открывать только нужные порты, если вы точно знаете, что все пользователи вашей фирмы используют интернет только для www, то открывайте 80-й порт и наслаждайтесь жизнью, но такая ситуация крайне редка. Следующий подход заключается в том, что вы закрываете наиболее опасные сервисы и разрешаете всё остальное. Вот список того, что настоятельно рекомендуется закрыть!

DNS zone transfers socket 53 (TCP)
tftpd socket 69 (UDP)
link socket 87 (TCP) (commonly used by intruders)
SunRPC & NFS socket 111 and 2049 (UDP and TCP)
BSD UNIX "r" cmds sockets 512, 513, and 514 (TCP)
lpd socket 515 (TCP)
uucpd socket 540 (TCP)
openwindows socket 2000 (UDP and TCP)
X windows socket 6000+ (UDP and TCP)

Для реализации этого в ваш скрипт перед последним правилом вставьте

#Set of reject rules
#

#tftp
$fwcmd add reject udp from any to any 69

#link
$fwcmd add reject tcp from any to any 87

#SunRPC & NFS
$fwcmd add reject tcp from any to any 111,2049
$fwcmd add reject udp from any to any 111,2049

#BSD UNIX "r" cmds
$fwcmd add reject tcp from any to any 512,513,514

#lpd
$fwcmd add reject tcp from any to any 515

#uucpd
$fwcmd add reject tcp from any to any 540

#openwindows
$fwcmd add reject tcp from any to any 2000
$fwcmd add reject udp from any to any 2000

#X windows
$fwcmd add reject tcp from any to any 6000-6010
$fwcmd add reject udp from any to any 6000-6010

Перезапускайте сервер и работайте.

Некоторые дополнения

Правила, действующие в вашей системе можно посмотреть с помощью команды ipfw -a l
Если в правило вы добавите опцию log после слов allow/deny/reject то информация о пакетах, подходящих под это правило будет записываться в файл /var/log/security. Но будьте аккуратны, некоторые правила могут генерировать огромное количество логов.
Если natd запускать с ключом -log, то nat будет писать некоторую свою статистику в /var/log/alias.log. При перезапуске natd этот файл обнуляется.
Категория: IPFW | Добавил: oleg (29.11.2007)
Просмотров: 2736 | Комментарии: 1 | Рейтинг: 4.0/1 |
Всего комментариев: 1
1 Kirill  
0
У меня такой вопросик мне необходимо включить 87 порт для БанкКлиента, уже мучаюсь несколько дней, пожалуйста подскажи что мне нужно для этого сделать! Пришли ответ на моё мыло!!! Зарание спасибо!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024