FreeBSD – простой маршрутизатор локальной сети (часть 2)

30 ноября 2013 г. Alex Просмотров: 5642 RSS 2
FreeBSD

Продолжим строить наш маршрутизатор, в первой части настроили и определились с интерфейсами, прописали данные провайдера. В этой части займёмся установкой защиты от внешних посягательств на наш сервер и нашу локальную сеть. Этой работой занимается так называемый межсетевой экран (брандмауэр, firewall).

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

(wikipedia.org)

Неотъемлемой частью сетевого экрана является NAT (Network Address Translation), механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. NAT действует как агент между глобальной и локальной сетью, при запросе с локального ПК он заменяет ip-адрес пакета с локального на «внешний» (уникальный) ip-адрес присвоенный «внешнему» интерфейсу маршрутизатора. При ответе из глобальной сети NAT действует в обратной последовательности (подробнее теорию читаем по ссылкам в конце заметки).

На сегодняшний день существует много реализаций сетевого экрана и NAT в FreeBSD, начнём с самой распространённой – IPFW. Есть два варианта запуска IPFW:

1. Подгрузить модуль ядра IPFW посредством команды kldload.

2. Прописать опции IPFW в файл конфигурации ядра системы и скомпилировать ядро с этими опциями.

Что касается NAT – воспользуемся стареньким демоном natd (для нашего случая его будет более чем достаточно).

Загружаем как модуль ядра.

# kldload /boot/kernel/ipfw.ko

# kldload /boot/kernel/ipdivert.ko

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

# echo ipfw_load=”YES” >> /boot/loader.conf

# echo ipdivert_load=”YES” >> /boot/loader.conf

!!! По умолчанию фаервол применяет только одно правило – запрещающее, имейте это ввиду если работаете удалённо.

Включаем при помощи опций в файле конфигурации ядра.

Здесь придется пересобирать ядро, но сначала добавляем строчки в файл конфигурации ядра:

options IPFIREWALL

options IPDIVERT

Первой строчкой включаем сам фаервол, второй включаем функционал для обеспечения работы NAT. Есть дополнительные опции которые нам могут пригодиться:

options IPFIREWALL_VERBOSE

options IPFIREWALL_VERBOSE_LIMIT=50

Первой строчкой включаем логирование пакетов которые будут проходить через фильтр, второй ограничиваем число пакетов прошедших через лог для каждого правила в отдельности. Т.е. число строк записей в лог-файле ограничиваем в 50 (для каждого правила!), это пригодится для анализа работы правил.

options IPFIREWALL_DEFAULT_TO_ACCEPT

Опция выше включает фаервол в режим «всё разрешено» (этим параметром мы пользоваться не будем smile).

Опции добавили, компилируем ядро как описано здесь.

Далее в файл конфигурации rc.conf добавляем следующие строчки:

firewall_enable="YES"

firewall_type="OPEN"

firewall_logging="YES"

natd_enable="YES"

natd_interface="em0"

natd_flags=””

Первой строчкой указываем включить IPFW, второй задаём ему тип "OPEN" (пропускать весь трафик, для отладки), третьей включаем логирование, четвёртой включаем NAT, далее указываем внешний интерфейс (на котором будем «натить») и последней строкой можно задавать дополнительные параметры NAT.

Теперь можно перезагрузить компьютер и проверить как всё работает. Запускаем команду top и смотрим запустился ли natd


На скрине видим что natd запустился. Проверяем правила IPFW, для этого введём команду ipfw show


На скрине видим все установленные правила предустановленного в фаерволе типа OPEN, в первоначальной конфигурации имеется несколько предустановленных типов фаервола, их рассмотрим в следующей статье.

Полезные ссылки:

http://ru.wikipedia.org/wiki/NAT - матчаст по NAT

http://www.freebsd.org/doc/ru/books/handbook/firewalls-concepts.html - принципы работы межсетевых экранов

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru friendfeed.com livejournal.ru memori.ru google.com bobrdobr.ru yandex.ru del.icio.us
Комментариев: 2
  1. Иван Зимин | 2014-01-30 в 12:10:08

    options IPFIREWALL_DEFAULT_TO_ACCEPT

    Опция выше включает фаервол в режим «всё разрешено» (этим параметром мы пользоваться не будем smile).

    Хочу внести небольшое уточнение. Эта опция меняет действие правила по умолчанию с запретить на разрешить. Т. е. как будет вести себя ненастроенный или очищенный (ipfw flush) от пользовательских правил файрвол. При удалённом или просто не имеющем консоли сервере это наоборот может помочь получить или не потерять к нему доступ. Т. е. само наличие этой опции никак не мешает набить файрвол своими правилами, в т. ч. и запрещающими.

    В качестве альтернативы, чтобы не пересобирать ядро или не включать в него файрвол статически (нельзя вкомпилить опцию не вкомпилив модуль), можно прописать в /boot/loader.conf строчку net.inet.ip.fw.default_to_accept=1

    Она переопределяет соответствующую опцию ядра.

  2. Алексей | 2014-02-06 в 18:39:11

    options IPFIREWALL_DEFAULT_TO_ACCEPT

    Представляете сколько всего нужно набрать запрещающих правил если включить эту опцию. Думаю эта опция не для "боевого" сервера.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

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

Имя и сайт используются только при регистрации

(обязательно)