Начальная настройка FireWall IpV4 (Ipfw) во FreeBSD 7.0

Заставить работать штатный 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.