Файрвол IPFW в ОС FreeBSD

Скачать Файрвол IPFW в ОС FreeBSD
Сейчас ищут:

Itnull

Команда форума
Администратор
Регистрация
22.05.13
Сообщения
24.511
Реакции
8.231
Веб-сайт
itnull.me
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #1
Ipfirewall - open source модуль, портированный на многие ОС. В этом списке FreeBSD, NetBSD, OpenBSD, SunOS, HP/UX и Solaris, Mac OS и даже Windows. Кроме того, часто используется для различных встраиваемых систем. Впервые появился в FreeBSD версии 2.0.

Основные возможности:

  • обработчик правил на уровне ядра, включающий систему учета пакетов
  • механизм логирования
  • механизм форвардинга
  • ipstealth (механизм редактирования TTL полей, защита от traceroute)
  • основанные на ALTQ средства управления QoS
  • механизмы управления пропускной способностью
  • основанная на таблице маршрутов система анти-спуффинга
  • встроенный NAT, PAT и LSNAT
  • поддержка IPv6 (с некоторыми ограничениями)
ipfw - пользовательская утилита для управления ipfirewall. С помощью этой утилиты происходит взаимодействие с модулем ядра. В дальнейшем я буду использовать ipfw и как имя утилиты, и как сокращение названия ipfirewall, для краткости и простоты, ну и просто потому, что так принято на просторах Интернета.

В ipfw конфигурация состоит из пронумерованных правил. Пакет проходит по правилам, начиная с меньшего номера к большему, до первого действия (к примеру allow или deny), после чего обработка прекращается. Чем-то похоже на iptables в Linux.

Управление и полезные настройки​

Для включения ipfw в rc.conf необходимо добавить следующие строки:

Код:
firewall_enable="YES"
firewall_script="/etc/ipfw_conf.sh"
firewall_logging="YES"
ipfw с пустой конфигурацией по умолчанию блокирует все соединения. Чтобы не потерять доступ к серверу дополнительно нужно добавить в rc.conf

Код:
firewall_type="open"
Эта строка укажет ipfw добавить в конфигурацию строку

Код:
65535 allow ip from any to any
Полезные команды:

ipfw list # вывод всех правил

ipfw -d list # вывести все правила, включая динамические

ipfw -de list # вывести все правила, включая динамические, в том числе истёкшие

ipfw -t list # вывести все правила, второй колонкой - время последнего совпадения

ipfw -a list # вывести все правила, второй и третьей колонкой будут счетчики входящих и исходящих совпадений

Добавление правил происходит командой

ipfw add <правило>
Добавить простое правило, под номером 100, разрешающее весь трафик на всех интерфейсах

Код:
ipfw add 00100 allow ip from any to any
И удаление:

Код:
ipfw delete 00100

Структура правил, основные параметры​

Общая структура правила не отличается особой сложностью:

<Номер> <Действие> <Протокол> from <Источник> to <Назначение> \
[порт] [in | out] [via IF] \
[keep-state | limit {src-addr | src-port | dst-addr | dst-port}]
Номер - порядковый номер правила, предпочтительно в конфигурации использовать номера не подряд, это позволит без проблем добавлять правила во время работы файрвола. Возможно добавление нескольких правил под одним номером. В этом случае они будут срабатывать в порядке добавления и ipfw delete удалит их все.

Действие назначенное совпавшему пакету. В этой статье мы рассмотрим

allow | accept | pass | permit
Эти действия равнозначны. Пропустить пакет, обработка завершается. Я буду использовать allow, для единообразия.

deny | drop
Так же равнозначны. Отбросить пакет. Буду использовать deny

check-state
Проверяет пакет по таблице динамических правил (соединений), никаких дополнительных опций не предполагает.

Протокол - tcp, udp, icmp, или любой другой протокол, описанный в /etc/protocols

Источник и Назначение - ip адреса, без комментариев. Кючевое слово all означает любой адрес. Ключевое слово me означает локальный адрес хоста.

Порт - номер порта для tcp и udp. Можно использовать имена сервисов, описанные в /etc/services

in|out - означают совпадение с входящими или исходящими пакетами.

via IF - совпадение с трафиком только одного интерфейса IF.

keep-state - ключевое слово, указывающее о необходимости создания динамического правила, которое разрешит обмен пакетами между источником и назначением.

limit - разрешать только N соединений, соответствующих правилу. Создаёт динамические правила подобно keep-state. Нельзя в одном правиле использовать limit и keep-state.

Простейшая конфигурация​

Возьмем простейший веб-сервер в вакууме. Нам нужно открыть порты 22, 80, 443 для доступа извне. Исходящие соединения разрешим все.

Для сохранения конфигурации и загрузки правил мы будем использовать shell скрипт, указанный в rc.conf опцией firewall_script.

Фактически, этот shell скрипт содержит набор команд ipfw. Что позволяет использовать в написании конфигурации все преимущества shell. Особенно пригодятся переменные. К примеру:
Код:
# cat /etc/ipfw-conf.sh
#
ipfw -q -f flush       # очистка всех правил -q подавляет вывод информации
# значения по умолчанию
eif="em0"              # выходной интерфейс
edns="8.8.8.8"         # IP адрес DNS
cmd="ipfw -q add "     # команда
ks="keep-state"        # опция, которая добавляет сохранение состояний
# разрешаем всё на локальной петле
$cmd 00010 allow all from any to any via lo0
# если состояние сохрано, пропускаем
$cmd 00020 check-state
# запрещаем неизвестные фрагментированные пакеты
$cmd 00030 deny all from any to any frag
# запрешаем все tcp ack, не проходящие по динамическим правилам
# то есть если не было SYN, ACK не будет принят.
$cmd 00040 deny tcp from any to any established in via $eif

#разрешаем входящие на порты веб-сервера
$cmd 000100 allow tcp from any to me 80 in via $eif $ks
$cmd 000110 allow tcp from any to me 443 in via $eif $ks
#разрешаем входящие на порт ssh
$cmd 000120 allow tcp from any to me 22 in via $eif $ks
#разрешаем исходящие соединения
$cmd 000900 allow all from me to any out via $eif $ks
#остальное логгируем и запрещаем
$cmd 001000 deny log all from any to any
При запуске файрвола будет выполнен этот скрипт, и соответствующие правила будут загружены.

Заключение​

Мы разобрались с тем, что такое ipfw и запустили его. Рассмотрели простейшие правила фильтрации и научились с ними работать. А так же создали простую, но вполне рабочую конфигурацию файрвола, способную защитить наш сервер от угроз извне.
 
Назад
Сверху Снизу