Freebsd 12 firewall настройка

Обновлено: 08.07.2024

Некоторое время назад наводил порядок в фаерволлах на серверах FreeBSD, доставшихся в наследство от прошлых системных администраторов. Захотелось сразу продумать фаерволл таким образом, чтобы потом в нём было легко ориентироваться и было очевидно, как в него добавить новое правило. Использовался фаерволл ipfw и его таблицы. Я решил не менять фаерволл на ipf или pf, а просто последовательно преобразовывать имеющиеся правила в понятную структуру, пока меня не устроит конечный результат. Результатом и хочу поделиться, как одним из примеров того, как можно организовать фаерволл.

Включение фаерволла

В файле /etc/rc.conf должны быть две строчки, предписывающие включить фаерволл и использовать правила из файла /etc/firewall.conf:
Написание правил

Теперь приведу упрощённый пример файла /etc/firewall.conf:
Фаерволл разрешает серверу устанавливать любые исходящие подключения. Любому внешнему сетевому узлу разрешается выполнять ICMP-запросы (среди которых могут быть не только запросы Ping). Последнее правило запрещает любой входящий трафик, который не разрешён явным образом.

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

Вид правил в системе

Ещё одно достоинство этого фаерволла - он получается простым, т.к. в самом фаерволле есть всего несколько правил. Для наглядности приведу реальный список правил в фаерволле на одном из серверов:
Трудно запутаться в семи существенных правилах, не так ли?

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

Если нужно сделать так, чтобы IP-адреса и сети в таблицу добавлялись динамически, каким-нибудь внешним скриптом, то достаточно не вписывать команды, очищающие таблицу и добавляющие в неё какие-то правила. Например, вот так:
Таким образом, при применении изменённых правил, динамически добавленные в таблицу адреса не исчезнут из таблицы.


Привет всем, кому интересна ОС FreeBSD! После летне-отпускного отсутствия начинаю новый цикл статей. Надеюсь, будет занимательно и полезно.

Для тех, кто тут впервые, поясню, что являюсь разработчиком российского Интернет-шлюза Интернет Контроль Сервер, реализованного на базе FreeBSD. А потому, изнанка этой операционки, ее фишки и тонкости администрирования - то, с чем я сталкиваюсь ежедневно и делюсь с вами.

В предыдущей серии статей мы рассмотрели файрвол PF. Оценили возможности и настроили его для разных ролей. В новом цикле сделаем то же для файрвола IPFW. Как и с PF, начнем с краткого обзора и создания простой конфигурации для защиты веб сервера. В следующий статьях будем погружаться и усложнять конфигурацию постепенно, вводя новые типы правил и добавляя "мяса".

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 необходимо добавить следующие строки:

ipfw с пустой конфигурацией по умолчанию блокирует все соединения. Чтобы не потерять доступ к серверу дополнительно нужно добавить в rc.conf

Эта строка укажет ipfw добавить в конфигурацию строку

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

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

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

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

Номер - порядковый номер правила, предпочтительно в конфигурации использовать номера не подряд, это позволит без проблем добавлять правила во время работы файрвола. Возможно добавление нескольких правил под одним номером. В этом случае они будут срабатывать в порядке добавления и ipfw delete удалит их все.

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

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

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

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

Протокол - 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. Особенно пригодятся переменные. К примеру:

При запуске файрвола будет выполнен этот скрипт, и соответствующие правила будут загружены.

Заключение

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

В следующей статье мы рассмотрим дополнительные опции фильтрации, усовершенствуем конфигурацию для защиты нашего веб-сервера. А пока у вас есть отличная возможность потестировать Интернет Контроль Сервер, тем более что полнофункциональная демо-версия доступна в течение 35 дней, а версия до 9 пользователей вообще бесплатная.

Описанные в этом посте действия были проверены мной на FreeBSD 10.3, но по идее не должны ничем отличаться в других версиях FreeBSD.

По умолчанию ipfw запрещает передачу вообще всех пакетов. Если вы сидите на сервере по ssh, что весьма вероятно, и просто включите ipfw, то на сервер вы больше не зайдете до следующего ребута. Приведенная команда временно меняет поведение ipfw на «разрешить всем и все», тем самым решая описанную проблему.

Теперь включаем ipfw:

При этом в /var/log/messages мы должны увидеть что-то вроде:

ipfw2 (+ipv6) initialized, divert loadable, nat loadable,
default to accept, logging disabled

Как видите, ipfw представляет собой обычный модуль ядра.

Давайте посмотрим на текущий список правил:

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

Давайте попробуем добавить парочку правил. Например, запретим пинги:

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

Попытаемся пингануть eax.me и убедимся, что пинги больше не ходят. Теперь, когда мы осознали свою ошибку, удаляем правило:

Заметьте, что ipfw позволяет создавать множество правил с одинаковыми номерами. В этом случае их можно удалить одной командой. Также можно удалить вообще все правила, оставив только правило по умолчанию:

Перед тем, как реально добавлять правило, не лишним бывает собрать статистику о том, как много пакетов ему соответствует:

sudo ipfw -q add 00100 count udp from me to any out via em0
sudo ipfw -q add 00200 count udp from any to me in via em0

Как видите, тут демонстрируется не только новое действие (count), но и расширенный синтаксис с частью in/out и указанием конкретного сетевого интерфейса. Кстати, при срабатывании count-правила следующие за ним правила продолжают применяться.

Теперь посмотрим количество пакетов с их суммарным размером в байтах, соответствующих правилу:

Счетчики можно при желании обнулить так:

В правилах можно использовать не только слова me и any , но и указывать конкретные хосты или подсети:

sudo ipfw -q add 00100 deny tcp from any to 192.168.0.1
sudo ipfw -q add 00200 deny tcp from any to 192.168.0.1 / 24

Также можно указывать порты или диапазоны портов:

sudo ipfw -q add 00100 deny tcp from any to 192.168.0.1 / 24 80
sudo ipfw -q add 00200 deny tcp from any to 192.168.0.1 / 24 1 - 1024

Помимо сбора статистики о срабатывании правил, их также можно логировать:

Пример добавления логируемых правил:

sudo ipfw -q add 00200 deny log \
tcp from any to 212.193.240.1 / 24 80

sudo ipfw -q add 00200 deny log logamount 3 \
tcp from any to 212.193.240.1 / 24 80

Если теперь несколько раз попытаться прителнетиться к хосту из используемой выше сети и заглянуть в /var/log/security, то увидим что-то вроде:

ipfw: 200 Deny TCP 10.0.2.15:41738 212.193.240.242:80 out via em0
ipfw: 200 Deny TCP 10.0.2.15:43564 212.193.240.242:80 out via em0
ipfw: 200 Deny TCP 10.0.2.15:55804 212.193.240.242:80 out via em0
ipfw: limit 3 reached on entry 200

Логирование можно глобально включать и выключать таким образом:

sudo sysctl net.inet.ip.fw.verbose= 1
sudo sysctl net.inet.ip.fw.verbose= 0

Если в правиле не указывается logamount, используется следующее значение:

Значение по умолчанию равно нулю, что означает отсутствие ограничений.

Сбросить счетчики логирования можно так:

fwcmd = "ipfw -q add"

$fwcmd 00100 deny log tcp from any to 1.2.3.0 / 24
$fwcmd 00200 deny log tcp from any to 4.5.6.0 / 24
$fwcmd 65000 allow ip from any to any

Важно! Если хотите подключиться к машине после перезагрузки, обязательно добавьте последнее правило. Сейчас оно добавляется автоматически, благодаря описанному выше хаку с net.inet.ip.fw.default_to_accept . Однако после ребута вернется поведение фаервола по умолчанию, при котором запрещается вообще все.

Заметьте, что только что мы написали обыкновенный шелл скрипт. Следовательно, в нем можно использовать сокращения имен команд, как продемонстрировано выше, а также условные операторы, процедуры и вот это все. Проверяем скрипт:

Если все ОК, в /etc/rc.conf дописываем:

Если решили включить логирование, убедитесь, что вы не забыли дописать в /etc/sysctl.conf что-то вроде:

sudo kldunload ipfw
sudo service ipfw start
sudo ipfw list

Если все было сделано правильно, долждны увидеть наши правила. Кроме того, они должны сохраняться и после перезагрузки.

Это все, о чем я хотел рассказать. Подробности вы найдете в man 8 ipfw . Маны во FreeBSD, как всегда, классные. В частности, из мана вы узнаете про такие элементы синтаксиса правил ipfw, оставшиеся за рамками поста, как skipto, tag / untag и другие.

Неправда ли, синтаксис в ipfw куда более читаемый, чем вот эти все -A , -p , -j , --sport и -m multiport в iptables?

После начальной настройки сервера мы рекомендуем вам выполнить некоторые дополнительные действия. Этот мануал охватывает некоторые примеры опциональных, но очень полезных конфигураций, среди которых:

  • настройка брандмауэра IPFW для блокировки большей части трафика.
  • настройка часового пояса сервера (это очень важно для правильной работы ваших программ).
  • NTP-синхронизация времени.
  • Создание swap-пространства (или подкачки).

Прежде чем приступить к выполнению мануала, нужно настроить среду сервера FreeBSD. Этот этап подробно описан в мануале Начало работы с FreeBSD.

1: Настройка брандмауэра IPFW

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

Система FreeBSD поставляется со встроенной поддержкой трёх отдельных брандмауэров, каждый из которых имеет свои преимущества и недостатки: это pf, ipfw и ipfilter. Здесь мы рассмотрим настройку самого простого и быстрого из них – ipfw. Это надежный stateful брандмауэр, написанный и поддерживаемый как часть FreeBSD.

Настройка базового брандмауэра

Большая часть конфигурации этого брандмауэра находится в файле /etc/rc.conf. Для редактирования конфигурации нужно использовать команду sysrc, которая позволяет безопасно вносить изменения /etc/rc.conf. В этот файл нужно добавить несколько строк, чтобы включить брандмауэр ipfw и контролировать его работу. Начнем с основных правил; выполните следующую команду, чтобы приступить к работе:

sudo sysrc firewall_enable="YES"

Каждый раз, когда вы запускаете sysrc для редактирования конфигураций, команда отображает ваши изменения:

firewall_enable: NO -> YES

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

sudo sysrc firewall_quiet="YES"

Эта строка отключает автоматический вывод ipfw. Вам эта опция может показаться вопросом предпочтений или требований сервера, но на самом деле она существенно влияет на работу брандмауэра.

Эта опция важна по двум факторам. Во-первых, скрипт конфигурации брандмауэра выполняется в текущей среде оболочки, не в фоновом режиме. Во-вторых, когда команда ipfw читает конфигурационный скрипт без флага quiet, она выводит каждую прочитанную строку на стандартный вывод. После вывода строки ipfw сразу же выполняет связанное с ней действие.

Большинство конфигурационных файлов брандмауэра сбрасывают текущие правила в начало скрипта. Если ipfw находит подобные строки без флага quiet, он немедленно сбрасывает все правила и возвращается к политике по умолчанию, которая в большинстве случаев блокирует все соединения. Если брандмауэр настраивается по SSH, соединение будет прервано, текущий сеанс закроется и брандмауэр перестанет обрабатывать правила, открывающие вам доступ к серверу – то есть вы заблокируете себя на собственном сервере. Флаг quiet помогает брандмауэру воспринимать и обрабатывать правила как набор, а не как отдельные, несвязанные правила.

sudo sysrc firewall_type="workstation"

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

Файл /etc/rc.conf также позволяет настраивать сервисы, доступ к которым необходим клиентам. Для этого нужны параметры firewall_myservices и firewall_allowservices.

sudo sysrc firewall_myservices="22/tcp 80/tcp 443/tcp"

Опция firewall_myservices содержит набор TCP-портов или сервисов (через пробел), которые должны быть доступны на вашем сервере.

Примечание: Сервисы можно указывать по имени. Все сервисы, чьи имена известны системе FreeBSD, перечислены в файле /etc/services. К примеру, показанную выше конфигурацию можно также задать следующим образом (результат будет таким же):

firewall_myservices="ssh http https"

Опция firewall_allowservices содержит список элементов, которые должны иметь доступ к перечисленным сервисам. Так вы можете ограничить доступ к вашим сервисам (из firewall_myservices) до определенных машин или диапазонов сети. Например, с помощью этой опции вы могли бы разместить на компьютере веб-контент для внутренней сети компании. Ключевое слово any значит, что доступ есть у всех IP-адресов.

sudo sysrc firewall_allowservices="any"

Опция firewall_logdeny вносит в лог /var/log/security все неудачные попытки доступа. Запустите:

sudo sysrc firewall_logdeny="YES"

Чтобы проверить все внесенные изменения, введите команду:

grep 'firewall' /etc/rc.conf

Эта часть файла /etc/rc.conf будет выглядеть так:

firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22 80 443"
firewall_allowservices="any"
firewall_logdeny="YES"

Примечание: Не забудьте отредактировать опцию firewall_myservices, добавив все сервисы, необходимые вашим клиентам.

Поддержка соединений UDP (опционально)

Все порты и сервисы, перечисленные в firewall_myservices в файле /etc/rc.conf, доступны для соединений TCP. Если некоторые сервисы должны работать по UDP, отредактируйте файл /etc/rc.firewall.

sudo vi /etc/rc.firewall

В этом блоке есть раздел, обрабатывающий установленные значения firewall_allowservices и firewall_myservices . Он выглядит так:

for i in $ ; do
for j in $ ; do
$ add pass tcp from $i to me $j
done
done

После этого раздела нужно указать все сервисы и порты, поддерживающие UDP.

$ add pass udp from any to me port_num

В редакторе vi нужно нажать i, чтобы перейти в режим INSERT и вставить свой код. Затем сохраните и закройте файл, для этого нажмите Esc, введите :wq и нажмите Enter. В строке выше вы можете оставить ключевое слово any, если соединение должно быть доступно для всех клиентов. Если нет, вы можете заменить его определенным IP-адресом или диапазоном сети. port_num нужно заменить номером порта или именем сервиса, которые должны поддерживать соединения UDP. Например, если вы используете DNS-сервер, ваша запись будет выглядеть примерно так:

for i in $ ; do
for j in $ ; do
$ add pass tcp from $i to me $j
done
done
$ add pass udp from 192.168.2.0/24 to me 53

Это разрешит любому клиенту из диапазона 192.168.2.0/24 получить доступ к DNS-серверу по порту 53. Обратите внимание, в таком случае нужно также открыть этот порт для TCP подключений.

Сохраните и закройте файл.

Запуск брандмауэра

Завершив настройку, запустите брандмауэр:

sudo service ipfw start

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

Теперь нужно настроить количество записей в логе для одного IP. Это предотвратит переполнение логов одним IP-адресом. Откройте файл /etc/sysctl.conf:

sudo vi /etc/sysctl.conf

В конец файла поместите следующую строку, которая ограничит количество записей до 5:

Сохраните и закройте файл. Данная настройка активируется после перезагрузки.

Чтобы применить эту настройку в текущей сессии, используйте команду sysctl без аргументов.

sudo sysctl net.inet.ip.fw.verbose_limit=5

Эта команда применит настройку в текущей сессии.

2: Настройка часового пояса сервера

Часовой пояс очень сильно влияет на производительность сервера, потому важно, чтобы он был настроен правильно. Это также нужно и для настройки NTP-синхронизации (о ней речь пойдёт в следующем разделе).

FreeBSD поставляется с инструментом tzsetup, который отвечает за настройку часового пояса. Запустите эту команду с правами sudo:

На экране появится окно, которое предложит выбрать регион, в котором находится сервер.

Затем нужно указать страну или субрегион.

Примечание: Для навигации по меню используйте клавиши PAGE UP и PAGE DOWN. Если у вас на клавиатуре их нет, вы можете использовать FN+DOWN или FN+UP.

Затем выберите часовой пояс, в котором находится сервер. Подтвердите свой выбор.

Теперь сервер работает в выбранном часовом поясе.

3: Настройка NTP-синхронизации

Теперь на сервере настроен часовой пояс. После этого нужно настроить NTP (Network Time Protocol). Этот протокол позволяет синхронизировать внутренние часы сервера с всемирным временем. Это очень важно для поддержки чувствительных ко времени взаимодействий клиентов и серверов, а также для точного логирования.

Чтобы включить NTP, нужно отредактировать /etc/rc.conf. Запустите следующую команду, чтобы добавить нужную настройку в файл:

sudo sysrc ntpd_enable="YES"

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

sudo sysrc ntpd_sync_on_start="YES"

Без этой строки NTP не сможет запуститься, поскольку настройки часового пояса исказят системное время.

Сохраните и закройте файл.

Запустите сервис ntpd:

sudo service ntpd start

Этот сервис будет синхронизировать время сервера с серверами NTP, перечисленными в файле /etc/ntp.conf.

4: Настройка swap-пространства

Чтобы проверить, есть ли на вашем сервере swap, введите:

sudo swapinfo -g

Вывод может выглядеть так:

Device 1G-blocks Used Avail Capacity
/dev/gpt/swapfs 1 0 1 0%

На этом сервере есть 1 Гб swap. Но некоторые приложения требуют большего объёма swap-пространства. Для этого используется swap-файл.

Сначала нужно выделить участок памяти для swap. Для этого используйте команду truncate.

В этом мануале swap-файл будет находиться в /swapfile; укажите своё место для этого файла в системе. Этот swap-файл выделит дополнительный 1 гигабайт для подкачки; чтобы задать другой объём, отредактируйте значение флага –s.

sudo truncate -s 1G /swapfile

Выделив пространство, заблокируйте доступ к файлу.

sudo chmod 0600 /swapfile

Затем смонтируйте файл и настройте его автоматическое монтирование при каждой загрузке:

echo "md99 none swap sw,file=/swapfile,late 0 0" | sudo tee -a /etc/fstab

Эта команда добавит в файл /etc/fstab строку:

md99 none swap sw,file=/swapfile,late 0 0

Теперь включите swap-файл при помощи команды:

sudo swapon -aqL

Убедитесь, что swap-файл работает, с помощью команды:

sudo swapinfo -g

Вы увидите дополнительное устройство (/dev/md99). Вывод будет выглядеть примерно так:

Device 1G-blocks Used Avail Capacity
/dev/gpt/swapfs 1 0 1 0%
/dev/md99 1 0 1 0%
Total 2 0 2 0%

Этот файл будет автоматически монтироваться при каждом запуске системы.

Заключение

Теперь ваш сервер FreeBSD готов к работе, дальнейшие конфигурации зависят только от целей использования сервера. Брандмауэр, NTP-синхронизация и swap-пространство предоставляют более подготовленную к разработке среду, а также упрощают дальнейшую установку и настройку программ и сервисов.

Подробная инстукция по установке и настройке роутера на ОС FreeBSD 12.2 при помощи ipfw kernel NAT и dnsmasq.

Исходные данные

Имеем на машине 2 сетевых интерфейса:

Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1

  • обновить FreeBSD и исходники
  • собрать и установить ядро с поддержкой firewall и NAT
  • включить в загрузку системы необходимые службы и параметры
  • создать правила для firewall и NAT
  • установить и настроить службы dns и dhcp при помощи dnsmasq
  • проверить работу на другой машине в сети

Для начала выкачиваем обновления FreeBSD и устанавливаем их

Затем переходим в корень, скачиваем исходники src и распаковываем их

Затем открываем новый конфиг ядра

и добавим следующие опции:

Описание добавленных опций:

Теперь переходим в каталог /usr/src, собираем и устанавливаем ядро

После этого в файл /etc/rc.conf необходимо добавить такие строчки:

Также в файл /etc/resolv.conf пропишем IP-адреса DNS-серверов:

Затем в файле /etc/sysctl.conf пропишем необходимые параметры:

для работы ipfw NAT

для ведения логов ipfw

и включение ограничений на количество одинаковых записей в логах

Теперь создадим файл /etc/ipfw.conf

и впишем в него необходимые параметры и правила для firewall и NAT:

Сделаем его исполняемым

Теперь можно запустить службу ipfw

или перезагрузить машину

Далее устанавливаем dnsmasq

если использовать порты, то

и внесём его в файл /etc/rc.conf для автоматической загрузки

Затем переименуем конфиг dnsmasq по умолчанию, создадим новый и откроем его для редактирования

сделаем его содержание примерно таким:

Можно теперь запустить службу dnsmasq

Проверяем на другой машине. На борту Windows 7 и установленный Chrome. Сетевые настройки тянет с DHCP:


Откроем Состояние сети и убедимся в правильности подтянутых настроек

Читайте также: