Опубликован: 21.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 3:

Пример пакетных фильтров в ОС FreeBSD 6.0

IPFILTER (IPF) firewall

IPFILTER не зависит от ОС, он является open source приложением, которое портировано на FreeBSD, NetBSD, OpenBSD, SunOS, HP/UX и Solaris. IPFILTER активно развивается, регулярно выходят новые версии.

IPFILTER основан на пакетном фильтре уровня ядра и имеет механизм NAT, который может управляться и просматриваться программами с интерфейсом уровня пользователя. Правила пакетного фильтра могут быть установлены или удалены с помощью утилиты ipf. Правила NAT могут быть установлены или удалены с помощью утилиты ipnat. Утилита ipfstat может показывать в реальном времени статистику, относящуюся к той части IPFILTER, которая функционирует на уровне ядра. Программа ipmon создает в системных файлах логи действий, выполненных IPFILTER.

IPF был написан сперва с использованием логики обработки правил "используется последнее правило, которому соответствует пакет". Первоначально имелись только правила без поддержки состояния. Со временем IPF был усилен включением опции quick и опции поддержки состояния keep state, в результате чего изменилась логика обработки правил. Модернизированные функции включены только в виде дополнительных опций, они дают возможность создавать пакетный фильтр, обеспечивающий большую безопасность.

Рассмотрим использование правил, которые содержат опцию quick и опцию поддержки состояния keep state. Это является основой для создания набора правил включающего пакетного фильтра.

Включающий пакетный фильтр позволяет проходить только тем пакетам, которые соответствуют правилам. Рассмотрим, как можно управлять сервисами, которые расположены позади пакетного фильтра и доступны из Интернета; также можно управлять доступом из локальной сети к сервисам, расположенным в Интернете. Все остальное по умолчанию блокируется, и информация об этом заносится в лог. Включающий пакетный фильтр является намного более безопасным, чем набор правил исключающего пакетного фильтра.

Указание необходимости использования IPF

IPF включен в базовую инсталляцию FreeBSD в качестве отдельного модуля, загружаемого во время выполнения. Система динамически загружает модуль ядра IPF, если в rc.conf указано утверждение ipfilter_enable="YES". Загружаемый модуль создается с возможностью создания логов и опцией default pass all. Нет необходимости компилировать IPF в ядро FreeBSD только для того, чтобы изменить умолчание на block all. Это можно сделать, указав блокировку всего трафика в конце набора правил.

Опции ядра

Не существует обязательного требования компилировать IPF в ядро FreeBSD. Компилирование IPF в ядро приведет к тому, что загружаемый модуль никогда не будет использоваться.

Опции, доступные в rc.conf

Для активации IPF во время загрузки следует указать следующие утверждения в /etc/rc.conf:

ipfilter_enable="YES"      # Start ipf firewall
    ipfilter_rules="/etc/ipf.rules" 
       # загрузка текстового файла с определением правил
    ipmon_enable="YES"          # Start IP monitor log
    ipmon_flags="-Ds"          # D = запуск в качестве демона
       # s = создание логов с использованием syslog
       # v = занесение в лог tcp window, ack, seq
          # n = отображение IP и port по именам

Если позади пакетного фильтра имеется локальная сеть, которая использует частный диапазон IP-адресов, необходимо добавить следующие утверждения для поддержки функциональности NAT:

gateway_enable="YES"      # Enable as LAN gateway
    ipnat_enable="YES"          # Start ipnat function
    ipnat_rules="/etc/ipnat.rules"  # файл с определением правил 
                           # для ipnat

IPF

Команда ipf используется для загрузки файла с правилами. Обычно создается файл с требуемыми правилами и используется данная команда для замены выполняющихся в текущей момент правил:

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

-Fa означает очистку всех внутренних таблиц правил.

-f означает, что новые правила будут загружены из данного файла.

Это дает возможность сделать изменения в файле правил, выполнить указанную выше команду ipf и тем самым изменить функционирование пакетного фильтра без перезапуска всей системы. Метод очень подходит для тестирования новых правил, так как данную процедуру можно выполнять столько раз, сколько необходимо.

Команда ipf предполагает, что файл с правилами является стандартным текстовым файлом. Она не понимает файл с правилами, написанный в виде скрипта и с использованием символьных подстановок.

Существует способ построения правил IPF с возможностью использовать символьные подстановки.

IPFSTAT

По умолчанию ipfstat показывает общую статистику, полученную в результате применения правил к входящим и исходящим пакетам.

IPMON

Для того чтобы ipmon работал корректно, в ядре должна быть установлена опция IPFILTER_LOG. Для этой команды определены два режима.В первом режиме команда вызывается из командной строки.

Режим демона используется тогда, когда необходимо сделать файл системного лога доступным для просмотра в более позднее время. Этим способом можно сконфигурировать IPMON и IPFILTER для совместной работы. Во FreeBSD есть встроенная возможность автоматической ротации системных логов. Поэтому выводить информацию с использованием в syslogd лучше, чем в обычный файл. По умолчанию в файле rc.conf используется утверждение ipmon_flags с –Ds флагами:

ipmon_flags="-Ds" # D = start as daemon
                     # s = log to syslog
                     # v = log tcp window, ack, seq
                     # n = map IP & port to names

Построение скрипта правил с использованием символьных подстановок

Можно создать файл, содержащий правила, таким образом, чтобы выполнять его в качестве скрипта с использованием символьных подстановок. Главное преимущество заключается в том, что в случае необходимости можно отредактировать только значение символьного имени, и при выполнении скрипта все правила, содержащие символьное имя, будут иметь новое значение. Тем самым можно использовать символьные подстановки для значений, которые могут когда-либо измениться.

Синтаксис скрипта совместим с sh, csh и tcsh.

Поле символьной подстановки начинается с символа $.

Определение символьного поля не имеет в качестве префикса символ $.

Значение, которое принимает символьное поле, должно быть заключено в двойные кавычки.

Файл правил должен начинаться аналогичным образом:

############# Start of IPF rules script ########################
    oif="dc0"            # name of the outbound interface
    odns="192.0.2.11"    # ISP's DNS server IP address
    myip="192.0.2.7"     # my static IP address from ISP
    ks="keep state"
    fks="flags S keep state"

    # You can choose between building /etc/ipf.rules file
    # from this script or running this script "as is".
    #
    # Uncomment only one line and comment out another.
    #
    # 1) This can be used for building /etc/ipf.rules:
    #cat > /etc/ipf.rules << EOF
    #
    # 2) This can be used to run script "as is":
    /sbin/ipf -Fa -f - << EOF

    # Allow out access to my ISP's Domain name server.
    pass out quick on $oif proto tcp from any to $odns port = 53 $fks
    pass out quick on $oif proto udp from any to $odns port = 53 $ks

    # Allow out non-secure standard www function
    pass out quick on $oif proto tcp from $myip to any port = 80 $fks

    # Allow out secure www function https over TLS SSL
    pass out quick on $oif proto tcp from $myip to any port = 443 $fks
    EOF
    ############### End of IPF rules script ##################

В данном примере правила не важны. Здесь показано, как символьные подстановки обозначаются и как используются. Если приведенный выше пример поместить в файл /etc/ipf.rules.script, можно загрузить эти правила, введя команду

# sh /etc/ipf.rules.script

Данный скрипт можно использовать и другим способом:

Раскомментировать строку, начинающуюся с cat, и закомментировать строку, начинающиюся с /sbin/ipf. Указать, как обычно, ipfilter_enable="YES" в /etc/rc.conf и выполнять скрипт после каждой модификации /etc/ipf.rules.

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Игорь Касаткин
Игорь Касаткин
Россия, Москва
Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008