Документация по ОС FreeBSD Суббота, 27.04.2024, 02:56
Приветствую Вас Гость | RSS
Меню сайта

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

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

Использование ipfilter в FreeBSD
Отключаем все
Первым шагом в настройке фаерволла является отключение всех сервисов, которые мы не будем использовать. Это поможет минимизировать риск применения локальных и удаленных эксплойтов. Редактируем /etc/rc.conf:
 
inetd_enable="NO"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
check_quotas="NO"

 

Также, для дополнительной безопасности, закомментируйте каждую строку в /etc/inetd.conf. Если необходим доступ к системе по ssh, то необходимо добавить в /etc/rc.conf:
 
sshd_enable="YES" 
 

Когда будут отключены ненужные сервисы, посетите unixcircle.com portscan, для проведения удаленного сканирования Вашей системы. Также Вы можете использоать nmap для сканирования вашего роутера изнутри. Также следует скачать и установить все обновления системы безопасности FreeBSD с ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/ , или используя CVSup обновить исходные тексты. Для получения дополнительной информации по уязвимостям также можно посетить The Twenty Most Critical Internet Security Vulnerabilities (Updated)

 
Настраиваем сетевые интерфейсы
 
В роутере используется 2 сетевые карты 3com 509B, обозначенные как ep0 и ep1 соответственно для внешнего и внутреннего интерфейса. Внешний интерфейс имеет реальный IP адрес, назначенный провайдером. Внутренний интерфейс назначает клиентам приватные адреса по DHCP. Немаршрутизируемые приватные сети:
 
10.0.0.1 - 10.255.255.254 netmask 255.0.0.0
172.16.0.1 - 172.31.255.254 netmask 255.240.0.0
192.168.0.1 - 192.168.255.254 netmask 255.255.0.0
 
Присвоим внутреннему интерфейсу адрес 192.168.0.1 и внесем изменения в /etc/rc.conf:
 
ifconfig_ep0="inet 192.168.1.1 netmask 255.255.255.0" 
 
Внешний интерфейс настроим в соответствии с данными, полученными от провайдера:
 
ifconfig_ep1="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" 
 
Убедитесь, что указали правильный адрес IP и сетевую маску для обоих интерфейсов. Помните, что адреса машин в локальной сети должны принадлежать тому же диапазону. Первая сетевая плата будет заданным по умолчанию адресом IP шлюза FreeBSD.
 
Оптимизируем ядро
 
Для компиляции ядра Вы должны распологать его исходными текстами. Установить их можно воспользовавшись утилитой /stand/sysinstall.
 
Далее делаем следущее:
 
# cd /usr/src/sys/i386/conf - Для FreeBSD 5.1
 # cp GENERIC firewall
# vi firewall
 
Добавляем следущие опции:
 
 options     IPFILTER                  # IPFilter support
options     IPFILTER_LOG              # IPFilter logging support
options     IPFILTER_DEFAULT_BLOCK    # Block all packets by default
options     RANDOM_IP_ID
              # RANDOM_IP_ID causes the ID field in IP packets to be randomized
              # instead of incremented by 1 with each packet generated.
 
Закомментируйте или удалите все опции, относящиеся к отсутствующему у Вас оборудованию и к функциям, в вашей системе не используемым. Сохраните файл конфигурации.
 
Компиляция и установка ядра:
 
#config firewall
#cd ../../compile/firewall
#make depend
#make
#make install
#reboot 
 
Включаем форвардинг пакетов, dhcp, firewall и nat
Для включения форвардинга редактируем /etc/sysctl.conf:
 
net.inet.ip.check_interface=1 
 
для блокировки SYN пакетов на непрослушиваемые порты: 
 
net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 
 
Если Вы получаете свой реальный адрес через DHCP в /etc/rc.conf внести: 
 
ifconfig_ep1="DHCP" 
 
и отредактируйте для запроса необходимой информации /etc/dhclient.conf: 
 
send host-name "crxxxxxx-a"; # Put your client IP here
 
request subnet-mask, broadcast-address, routers, domain-name-servers;
 
Правила фильтрации:
 
Так как мы пока не знаем что конкретно блокировать, откроем все, отредактировав /etc/ipf.rules:
 
pass in all
pass out all 
 
Вот пример рабочего /etc/ipf.rules 
 
Правила nat: 
 
Для работы ftp клиентов через nat вносим в /etc/ipnat.rules: 
 
# Use ipfilter ftp proxy for ftp client transfers mode: active
map ep1 192.168.1.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
# Map all tcp and udp connections from 192.168.1.0/24 to external IP address,
# changing the source port number to something between 40,000 and 60,000 inclusive
map ep1 192.168.1.0/24 -> 0.0.0.0/32 portmap tcp/udp 40000:60000
# For all other IP packets, map to the external IP address
map ep1 192.168.1.0/24 -> 0.0.0.0/32 
 
Удостоверьтесь, что все "proxy" линии идут перед строками "portmap", поскольку срабатывает только первое правило. Рабочий пример /etc/ipnat.rules. Также, в качестве дополнительной опции, Вы можете использовать: Прозрачное проксирование: Если во внутренней сети есть почтовый сервер 192.168.0.2, используйте "rdr" инструкцию для прозрачного проксирования.
 
/etc/ipnat.rules:
# Redirect incoming smtp traffic to mail server behind NAT rdr ep1 0.0.0.0/0 port 25 -> 192.168.0.2 port 25
/etc/ipf.rules:
# Allow the translated packets with fragment and SYN flag to flow in.
 
Keep state the connection.
pass in quick on ep1 proto tcp from any to any port = 25 flags S keep state keep frags 
 
Балансировка нагрузки:
 
Чтобы сбалансировать нагрузку на 6 серверов 192.168.0.2 - 192.168.0.7, находящихся за nat, оспользуемся циклическим методом. IPFilter распределит загрузку, даже если один из серверов сети выйдет из строя. L4check, который является частью IPFilter и может иметь дело с этим сценарием.
 
rdr ep1 0.0.0.0/0 port 80 -> 192.168.0.2,192.168.0.3 port 80 tcp round-robin
rdr ep1 0.0.0.0/0 port 80 -> 192.168.0.4,192.168.0.5 port 80 tcp round-robin
rdr ep1 0.0.0.0/0 port 80 -> 192.168.0.6,192.168.0.7 port 80 tcp round-robin

Ведение логов правил фильтрации на выделенном сервере:

Это хороший метод сохранения резервной информации о пакетах. Выполняется следующим образом: Обозначим такой сервер "loghost" и внесем изменения в /etc/syslog.conf:

 
# uncomment this to enable logging to a remote loghost named loghost
*.*                                             @loghost

Перезапуск syslog:

# kill -1 `cat /var/run/syslog.pid`

На сервере логирования остановить syslog^

# kill -9 `cat /var/run/syslog.pid`

И затем запустить:

# syslogd -a 192.168.0.1

Обязательно проверьте /var/log на предмет наличия приходящих логов с роутера.
Конфигурируем клиентов nat
 
FreeBSD: edit /etc/rc.conf and add defaultrouter="192.168.0.1"
NetBSD: echo "192.168.0.1" > /etc/mygate
OpenBSD: echo "192.168.0.1" > /etc/mygate
Win2k: Start-Settings->Control Panel->Network and Dial-up Connections->Local Area Network-> Properties->Internet Protocol (TCP/IP)->Default Gateway->192.168.0.1

Редактируем etc/resolv.conf:

UNIX clients:

$ cat /etc/resolv.conf nameserver nameserver

Win2k :

Start-Settings->Control Panel->Network and Dial-up Connections->Local Area Network-> Properties->Internet Protocol (TCP/IP)->->Advanced TCP/IP Settings->DNS and add the ISP DNS IPs.

Настройка ipfilter

Когда Вы будете готовы запустить в работу свой роутер, прочтите IPFILTER-HOWTO на http://www.unixcircle.com/ipf/ и www.ipfilter.org - там Вы можете найти много полезных правил фильтрации.Обдумывайте каждое изменение etc/ipf.rules или /etc/ipnat.rules. Помните, что перезагрузка правил оборвет все текущие соединения. # /sbin/ipf -Fa -f /etc/ipf.rules # /sbin/ipnat -CF -f /etc/ipnat.rules

Вы можете посмотреть текущую статистику так:

# /sbin/ipfstat -t

           firewall.muine.org - IP Filter: v3.4.27 - state top           23:01:10

Src = 0.0.0.0  Dest = 0.0.0.0  Proto = any  Sorted by = # bytes
Source IP             Destination IP         ST   PR   #pkts    #bytes       ttl
192.168.0.200,1415    65.92.100.89,6699     4/4  tcp    8245   6923504  42:14:06
23.234.234.2,24064    208.31.160.30,22      4/4  tcp     576    199843 119:59:59
192.168.0.200,2091    64.124.41.191,8888    4/4  tcp     157    118770  51:36:40
192.168.0.200,1094    64.124.41.161,8888    4/4  tcp     125     94190  46
 
Для блокировки всего трафика по умолчанию, добавтье ядро options IPFILTER_DEFAULT_BLOCK
 Для просмотра текущих правил MAP/Redirect используйте:

# /sbin/ipnat -l

Также смотрите ipftest(1), mkfilters(1), ipf(4), ipl(4), ipf(8), ipfstat(8), ipmon(8), ipnat(8) для более детальной информации.

Тестирование firewall

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

Также для тестирования подойдет:

nmap
xprobe
hping2
firewalk
isic
QoS

Балансировка нагрузки

Управление полосой пропускания dummynet в FreeBSD очень полезна для борьбы с Dos атаками и ограничения полосы пропускания.

Смотрите dummynet(4) для более полной информации.

Так как dummynet привязан с ipfw - FreeBSD, то Вы должны будете включить в ядре следующие опции:

 
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
 
Затем перекомпилировать и установить ядро.
Включение dummunet в /etc/rc.conf:
 
firewall_enable="YES"
firewall_script="/etc/rc.dummynet"
firewall_type="open"
firewall_logging="YES"
 
Пример ограничение канала FastEthernet до Ethernet:
Создаем виртуальный канал:

# /sbin/ipfw add 100 pipe 1 ip from 192.168.0.4 to any

Делаем ограничение:

# /sbin/ipfw pipe 1 config bw 10Mbit/s

Убираем:

# /sbin/ipfw flush

Для работы этих травил необходимо внести их в /etc/rc.dummynet.

 
Автор: Hoang Q. Tran, Перевод статьи: Сгибнев Михаил
Категория: IPFW | Добавил: oleg (06.11.2007)
Просмотров: 1524 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

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

Copyright MyCorp © 2024