Заставить работать штатный FireWall во FreeBSD совсем не сложная задача, как может показаться на первый взгляд. Рассмотрим как это делается. Для начала необходимо выяснить, какие параметры в файле /etc/defaults/rc.conf отвечают за управление файрволом ipfw FreeBSD. Для их просмотра выполним простую команду:
# grep firewall /etc/defaults/rc.conf
### Basic network and firewall/security options: ###
firewall_enable="NO" # Set to YES to enable firewall functionality
firewall_script="/etc/rc.firewall" # Which script to run to set up the firewall
firewall_type="UNKNOWN" # Firewall type (see /etc/rc.firewall)
firewall_quiet="NO" # Set to YES to suppress rule display
firewall_logging="NO" # Set to YES to enable events logging
firewall_flags="" # Flags passed to ipfw when type is a file
firewall_myservices="" # List of TCP ports on which this host
firewall_allowservices="" # List of IPs which has access to
# $firewall_myservices
firewall_trusted="" # List of IPs which has full access to this host
firewall_logdeny="NO" # Set to YES to log default denied incoming
firewall_nologports="135-139,445 1026,1027 1433,1434" # List of TCP/UDP ports
natd_enable="NO" # Enable natd (if firewall_enable == YES).
ipv6_firewall_enable="NO" # Set to YES to enable IPv6 firewall
ipv6_firewall_script="/etc/rc.firewall6" # Which script to run to set up the IPv6 firewall
ipv6_firewall_type="UNKNOWN" # IPv6 Firewall type (see /etc/rc.firewall6)
ipv6_firewall_quiet="NO" # Set to YES to suppress rule display
ipv6_firewall_logging="NO" # Set to YES to enable events logging
ipv6_firewall_flags="" # Flags passed to ip6fw when type is a file
#
Из этого набора параметров по умолчанию, следует знать следующие:
firewall_enable - включает ipfw
firewall_script – файл с набором правил.
firewall_type- задает тип файрвола, разработчики FreeBSD
предлагают по умолчанию
несколько типов фарвола:
Непосредственно правила для каждого типа описаны в файле /etc/rc.firewall. Вы конечно можете создать свой файл с правилами, но мы здесь это рассматривать не будем, а остановимся на непосредственном добавлении правил в существующий файл. Переопределим в /etc/rc.conf два параметра, т.е добавим туда 2 строки:
firewall_enable="YES"
firewall_type="client"
Можно воспользоваться командами:
#echo firewall_enable="YES" >>/etc/rc.conf
#echo firewall_type="client" >> /etc/rc.conf
Далее, для выбранного типа файрвола необходимо в файле, который определен в переменной firewall_script, в данном случае /etc/rc.firewall (т.к. мы не переопределяли его) прописать настройки вашей сети. Для типа client кусок файла /etc/rc.firewall выглядит так:
[Cc][Ll][Ii][Ee][Nn][Tt]) ############ # This is a prototype setup that will protect your system somewhat # against people from outside your own network. ############ # set these to your network and netmask and ip net="192.168.116.0" mask="255.255.255.0" ip="192.168.116.4"
Просто найдите эти строки и пропишите сеть, маску и IP адрес для вашей машины. Аналогично прописывается и для других типов. Далее необходимо загрузить модуль ipfw в ядро, это можно сделать несколькими способами, можно выполнить команду:
# kldload ipfw
либо перезагрузить систему. Файрвол запускается и останавливатся следующим образом:
#/etc/rc.d/ipfw start #/etc/rc.d/ipfw stop
либо это делается при помощи переменной ядра net.inet.ip.fw.enable, устанавливая ее в 1 или в 0.
# sysctl net.inet.ip.fw.enable=1
Комманды управления
Посмотреть список правил
# ipfw list
Посмотреть список правил со статитикой по пакетам
#ipfw show
Сбросить все правила
#ipfw flush
Обнулить счетчики
#ipfw zero
Формат правил ipfw
КОМАНДА [НОМЕР_ПРАВИЛА] ДЕЙСТВИЕ [ЛОГ] ТЕЛО_ПРАВИЛА
КОМАНДА – как правило значение add для добавления правила.
НОМЕР_ПРАВИЛА (rule_number) – необязательнный числовой параметр, в диапазоне 1-65535. Номера правил могут совпадать, тогда правила проверяются в порядке добавления.
ДЕЙСТВИЕ(action) - allow | accept | pass | permit – разрешающие действия для пакетов попавших под правило, check-state – проверка пакета по набору динамических правил, count – обновлять счетчики для пакетов попавших под правило, deny | drop – отбросить пакеты.
ЛОГ(log) – log [logamount number], если пакет попал под правило, слать сообщение в syslogd, причем сообщение будет отправляться только если параметр sysctl net.inet.ip.fw.verbose установлен в 1. Параметр sysctl net.inet.ip.fw.verbose_limit устанавливает лимит (logamount number) сообщений.
ТЕЛО_ПРАВИЛА (RULE BODY) – это тело правила, включающее различные патерны, такие как адреса источников, адреса назначения, порты, опции протоколов, входящие и ичходящие интерфейсы и т.д. Не будем углубляться в синтаксис, для этого есть хорошее руководство – man ipfw
Примеры правил:
Разрешить подключения на 22 порт (ssh).
#ipfw add 100 allow tcp from any to me 22 in via eth0 keep-stateВажно помнить, что правила добавляемые таким образом – это динамические правила. Т.е. при перезагрузке машины или рестарта файрвола они пропадут. Ими удобно пользоваться, например, при тестирование правил. Чтобы правила не пропадали их нужно добавлять в файл определенный параметром firewall_script, для случая выше это -
Замечания:
Иногда бывает соблазн переопределить все параметры в /etc/defaults/rc.conf. Ни в коем случае нельзя так делать. Почему? Хотя бы потому, что разработчики не рекомендуют так делать. А вообще в дальнейшем могут возникнуть проблемы при обновлении системы, при использовании ее людьми после Вас и т.д. Переобпределяйте параметры по умолчанию в /etc/rc.conf.