К списку статей
Автор: Dru Lavigne. Перевод: Сгибнев Михаил
Обложка статьи

Брандмауэр на рабочей станции

Каждый знает, что находясь в Интернете необходимо использовать пакетный фильтр. Однако, не каждый осведомлен о том, что создать систему фильтрации для FreeBSD (или PC-BSD или DesktopBSD) - весьма простое занятие.

Программное обеспечение

Как все BSD, FreeBSD никогда не дооценивала аспект безопасности. Она предлагает несколько встроенных систем сетевой защиты и мы можем выбрать из: ipfw, ipf и pf. Я использую pf, потому что этот пакетный фильтр встроен во все BSD системы, включая OpenBSD, NetBSD и DragonFly BSD.

Я также рекомендую к использованию GUI утилиту fwbuilder. Мы будем использовать ее для FreeBSD, хотя есть версии для Linux, Mac OS X и Windows XP, она поддерживает пакетные фильтры iptables, ipfilter, pf и ipfw.

pf идет в комплекте поставки FreeBSD, но убедитесь, что он загружен в вашей системе, выполнив следующую команду с привилегиями пользователя root:

    # kldload pf.ko
    

Если вам вернулась командная строка без ошибок, то это значит, что вы только что загрузили модуль вручную. Если вы выключаете свой компьютер, то добавьте к /etc/rc.conf следущую строку:

    pf_enable="YES"
    

Если вы получите ошибку:

    kldload: can't load pf.ko: File exists
    

то ваша система уже сконфигурирована на работу с PF.

Установка

Устанавливаем fwbuilder:

    # pkg_add -r fwbuilder
    # rehash
    # fwbuilder
    

При первом запуске откроется окно приветствия и будет предложено открыть новый файл проекта или уже существующий. Выберите "Create new project" и введите его имя, при этом к файлу будет добавлено расширение .fwb. Для продолжения нажмите "Next".

Следующий экран предлагает две возможности:

  • Активировать Revision Control system для этого файла. Впрочем, вы это можете сделать и позже.
  • Указать открывать этот файл при следующем запуске утилиты. Эту функцию также можно активировать позднее из меню настроек.

Revision control - очень хорошая вещь. Каждый раз после запуска fwbuilder, делается копия существующего проекта (т.е. вашей последней сессии). В результате, мы можем отслеживать хронологию сеансов.Что еще более важно - вы всегда можете откатиться на предыдущую конфигурацию. Я рекомендую выбрать обе опции, затем нажать Finish.

Конфигурирование Firewall Object

Обратимся к интерфейсу программы, который разделен на две основных части. Левая часть содержит дерево обьектов, в правой находятся правила пакетного фильтра (после того, как вы определите объекты). Использование объектов дает возможность с легкостью просматривать сети, хосты и сервисы, позволяя вставлять их в правила пакетного фильтра.

Первым созданным вами объектом должен быть сам брандмауэр. Выберите иконку "New Object" и в выпадающем списке укажите "New Firewall", после чего дайте ему имя (в моем случае - my_firewall). Далее, в качестве типа пакетного фильтра укажите PF и щелкните "Next". В качестве значения по умолчанию установите "Configure interfaces manually" и нажмите "Next".


Обратите внимание на то, что если вы не увидели опций Netmask и MAC, значит вы запустили fwbuilder не с правами root. Только root может создавать объекты и правила.

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

Если ваш провайдер назначает адрес по DHCP, то выберите опцию "Dynamic address", в противном случае введите свой IP адрес и маску сети.

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

    # ifconfig
    xl0: flags=8843 mtu 1500
        options=9
    
        inet 192.168.2.49 netmask 0xffffff00 broadcast 192.168.2.255
        ether 00:04:75:ee:e0:21
        media: Ethernet autoselect (100baseTX )
        status: active
    lo0: flags=8049 mtu 16384
        inet 127.0.0.1 netmask 0xff000000
    

Используя мои данные, в окне "New Firewall" я ввожу:

    Name:        xl0
    Address:    (greyed out because I checked Dynamic address)
    Netmask:    (greyed out because I checked Dynamic address)
    MAC:        00:04:75:ee:e0:21
    Label:        external
    
    Name:        lo0
    Address:    127.0.0.1
    Netmask:    255.0.0.0
    MAC:        (leave empty)
    Label:        loopback
    

Указывая имена сетевых карт, стоит выбрать "external" для внешней и "internal" для карты, смотрящей в локальную сеть. Если вам необходимо указать маску подсети, то ее необходимо преобразовать шестнадцатеричное число (например 0xffffff00) в десятичное. 0x можно проигнорировать, так как это просто признак шестнадцатеричного числа. Для преобразования, разбейте число на четыре пары: ff ff ff 00. ff - самое простое, это 255 в десятичной системе, 00 - соответственно 0. Рекомендую воспользоваться следущей таблицей:

HexDecimal
80128
c0192
e0224
f0240
f8248
fc252
fe254

Пользователям модемов стоит обратить внимание на то, что их интерфейсы будут называться ppp0 или tun0. Для того, чтобы определить свой адрес, воспользуйтесь утилитой ifconfig, в то время, когда находитесь on-line.

После того, как вы ввели данные о сетевой карте, нажмите "Add" и повторите операцию для всех остальных карт, после чего нажмите "Finish". Если вы сейчас посмотрите на дерево объектов, то обнаружите, что появились записи для брандмауэра и сетевых карт.

Теперь необходимо отметить одну из сетевых карт как интерфейс управления. Для рабочей станции я использую loopback. Вам необходимо дважды щелкнуть на соответствующем значке, после чего установить флаг "Management interface".

Написание простейшего набора правил

Теперь у нас есть все необходимое для создания простейшей системы сетевой защиты, которая блокирует все обращения к нашей машине извне, при этом разрешая исходящие от нас запросы.

Щелкните на меню "Rules" и выберите "Insert Rule" (Рис. 2). Обратите внимание на то, что по умолчанию запрещена передача данных от любого источника к любому адресу назначения используя любой сервис TCP/UDP. Вам необходимо скопировать ваш обьект "firewall" в поле источника, после чего сменить "Deny" в поле Action на "Accept". В поле "Options" укажите Logging Off, если не хотите фиксировать каждый пропущенный пакет.


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

    allow my computer to access the internet
    

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

    deny all other traffic
    

Если нет такой нужды, отключите логирование пакетов.

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

В качестве совета замечу, что включение логирования на этом правиле позволит быстро обнаружить проблему, если что-то не работает.

Установка набора правил

После того, как набор правил нами создан, необходимо его установить.

Сначала, вы должны сконфигурировать sshd, чтобы root мог подключаться и устанавливать правила пакетного фильтра. По умолчанию, FreeBSD не позволяет root заходить в систему по ssh. Исправить это положение можно введя команду:

    # echo "PermitRootLogin yes"  >> /etc/ssh/sshd_config
    

Не волнуйтесь, после установки правил никто больше не войдет в вашу систему по ssh. Далее, нам необходимо перезапустить sshd:

    # /etc/rc.d/sshd reload
    Reloading sshd config files.
    

Если вы увидите ошибку:

    sshd not running? (check /var/run/sshd.pid).
    

Используйте эту команду:

    # /etc/rc.d/sshd start
    Starting sshd.
    

Проверим статус sshd:

    # /etc/rc.d/sshd status
    sshd is running as pid 5467.
    

Далее, выберем пункт "Install" из меню "Rules". Вы должны увидеть следущее сообщение:

    Some objects have been modified since
    you compiled the policy last time.
    Do you want to recompile it before you install?
    

После того, как все вышеперечисленные действия будут выполнены, щелкните кнопкой "Compile". Должно открыться текстовое поле и последней строкой в нем, при успешном стечении обстоятельств, будет "Policy compiled successfully." Нажмите кнопку "Install". Когда появится окно с просьбой об аутентификации, введите пароль и логин пользователя root. Далее появится сообщение о новом ключе RSA:

    You are connecting to the firewall 'my_firewall'
    for the first time. It has provided you its
    identification in a form of its host public key. The
    fingerprint of the host public key is: "
    b6:76:30:aa:01:27:64:48:3b:18:28:18:5b:c9:ae:e4"
    You can save the host key to the local database
    by pressing YES, or you can cancel connection
    by pressing NO. You should press YES only if
    you are sure you are really connected to the 
    firewall 'my_firewall'.
    

Да, с эим предложением стоит согласиться, поскольку вы соединяетесь с вашим собственным брандмауэром. Для того, чтобы в дальнейшем вы могла проверить отпечаток удаленной FreeBSD системы, выполните команду:

    # ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub
    1024     b6:76:30:aa:01:27:64:48:3b:18:28:18:5b:c9:ae:e4
    

После того, как вы согласитесь с предложением системы, откроется текстовое окно (мое было минимизировано). В нем вы увидите предупреждение об отсутствии поддержки ALTQ, если вы не используете его, то можете не беспокоиться и просто закрыть окно. Брандмауэр теперь работает.

Контроль

Для контроля за работой пакетного фильтра используйте команду pfctl. Например, для просмотра текущего набора правил укажите флаг "-s":

    # pfctl -s rules
    No ALTQ support in kernel
    ALTQ related functions disabled
    pass out quick inet from (xl0) to any keep state label "RULE 0 -- ACCEPT "
    block drop in quick inet all label "RULE 1 -- DROP "
    block drop out quick inet all label "RULE 1 -- DROP "
    block drop in quick inet all label "RULE 10000 -- DROP "
    block drop out quick inet all label "RULE 10000 -- DROP "
    

Если вы будете сравнивать увиденное с тем, что делали в fwbuilder, то вам необходимо смотреть на правила 0 и 1, RULE 10000 - запрещающее правило, установленное по умолчанию.

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

    # pfctl -d
    

Для перезапуска, укажите используемый файл набора правил. Обычно он храниться в каталоге /etc и имеет имя вашего брандмауэра, в моем случае это /etc/my_firewall.conf. Для запуска пакетного фильтра используется команда:

    # pfctl -e /etc/my_firewall.conf
    
    

Улучшение правил

Для того, чтобы вы могли добавлять другие правила, необходимо разрешить их загрузку в пакетный фильтр. Выделите правило 0, после чего в меню "Rules" выберите "Insert Rule". Поскольку для управления пакетным фильтром необходим доступ по ssh к интерфейсу loopback, то правило будет выглядеть следующим образом:

    Source:        my_firewall
    Destination:    my_firewall:lo0:ip    (you'll find this if you click the + 
                         by your loopback object)
    
    Service:    ssh
    Action:        Accept
    Options:    Logging On
    Comment:    allow firewall to install policy
    

Нам необходимо добавить объект "ssh" в пункт "Services". Правой кнопкой мыши надо щелкнуть на "TCP" и выбрать "New TCP Service". Затем добавить имя сервиса и порт, после чего нажать "Apply Changes". После этого ситуация обретет вид, отображенный на Рис. 3:

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

    # pfctl -d
    

Устанавливаем правила, после чего просмотрим текущий список правил:

    # pfctl -s rules
    

В моем случае, новое правило выглядит как:

    pass out log quick inet proto tcp from (xl0) to 127.0.0.1 port = ssh keep 
    state label "RULE 0 -- ACCEPT"
  • Обложка статьи FreeBSD. Настраиваем файловые системы

    FreeBSD. Настраиваем файловые системы

    FreeBSD. Свободные записки о свободной системе. В качестве объекта для изучения был избран однодисковый вариант FreeBSD стабильной версии - 4.2

    Читать далее
  • Обложка статьи Поддерживаю РФ: Кириллические домены должны поддерживаться в российском ПО и сервисах

    Поддерживаю РФ: Кириллические домены должны поддерживаться в российском ПО и сервисах

    Поддержка российским ПО и отечественными сервисами кириллических доменов и адресов электронной почты станет ключевой задачей проекта Поддерживаю.РФ в 2021 году. По словам директора Координационного центра доменов .RU/.РФ Андрея Воробьева, национальный дом

    Читать далее
  • Обложка статьи Защищаем Apache 2. Шаг за шагом

    Защищаем Apache 2. Шаг за шагом

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

    Читать далее
  • Обложка статьи Защита ваших данных. PGP & Linux

    Защита ваших данных. PGP & Linux

    Эта статья написана для тех, кому необходимо сохранить некоторую информацию в секрете и кто пока не решил как это сделать....

    Читать далее
  • Обложка статьи DragonFlyBSD: загрузка и инициализация

    DragonFlyBSD: загрузка и инициализация

    В этом цикле статей я хочу рассказать об операционной системе, родившейся прямо на наших глазах - летом 2004 года. Имя ей - DragonFlyBSD, и являет она собой представителя славного племени BSD-систем. В сущности, исходно это fork (порождение) FreeBSD 4-й в

    Читать далее

Специальные предложения
интернет-магазина

  • Чехол для переноски Portable Hard Shell для Oculus Quest 2 VR
    3300 руб

    Чехол для переноски Portable Hard Shell для Oculus Quest 2 VR

  • Книга: Дронов В.А. "Laravel 9. Быстрая разработка веб-сайтов на PHP"
    1550 руб

    Книга: Дронов В.А. "Laravel 9. Быстрая разработка веб-сайтов на PHP"

  • №18 Патрон с впаянной лампой 2,5 V/ 0,3A
    212 руб

    №18 Патрон с впаянной лампой 2,5 V/ 0,3A

  • Книга: Аль-Халили Джим "Мир физики и физика мира. Простые законы мироздания"
    1000 руб

    Книга: Аль-Халили Джим "Мир физики и физика мира. Простые законы мироздания"

  • Набор выводных резисторов 0.25W (100 Ом—910 Ом), 24 номинала по 10 шт.
    275 руб

    Набор выводных резисторов 0.25W (100 Ом—910 Ом), 24 номинала по 10 шт.