Ульяновский Государственный Университет
Институт математики, физики и информатики
Факультет математики и информатики
выполнил:
студент группы ПрИ-41
Степанов Антон
проверил:
Чичев А.А.
Ульяновск, 2008
С системой портов тесно связана такая система защиты, как Firewall - программа, которая обеспечивает санкционированность всей информации, приходящей или уходящей с компьютера. К примеру, при отправке почты используется порт 25, а при получении - порт 110. С этими портами работает почтовая программа. Если же какая-нибудь другая программа - например, вирус-"троян" - попытается запросить этот порт, то Firewall не даст ей это сделать (в принципе, "трояну" ничего не стоит замаскироваться под почтовую программу, но это сложнее - прим. ред.). Кроме того, Firewall вообще не позволяет осуществлять связь с удаленным компьютером, если это не разрешено пользователем. Перед началом использования программы необходимо произвести ее настройку - указать номеров портов, через которые может идти обмен данных, и программ, которые с этими портами работают. В современных "файерволлах" настройка может проходить и автоматически.
Рассмотрим принцип настройки Firewall на примере самого распространенного Outpost Firewall Pro, есть много различных видов Firewall но данным я пользуюсь 2й год и ни одного косяка за ним не наблюдалось. До этого стояли такие монстры как Kaspersky Internet Security, Norton Internet Security, Kerio WinRoute Firewall…
Устанавливаем Outpost, перезагружваемся, отвечаем на все вопросы Мастера(с этим проблем возникнуть не должно), далее производим тонкую настройку.
1. Перво-наперво переводим фаерволл в режим "Заблокированно". (правой кнопкой по значку в трее - "Политики" - "Заблокировать").
2. Удаляем все эти автоматически созданные правила. Делается так: Параметры - Приложения. Появится такое окно: . Удаляем все приложения какие там есть.
3. В этом же окне переходим во вкладку "Системные".:
, нажимаем на кнопку "Правила".
4. В открывшемся окне:
нажимаем кнопку "Добавить".
5. В этом окне нужно сделать так как на скриншоте:
6. Далее кликаем по синей ссылке, откроется вот такое окно:
, сюда надо добавить ВСЕ локальные адреса. В.т.ч 10.0.0.0 с маской 255.0.0.0
7. Появившееся в списке правило новое правило двигаем на самый верх.
8. Всё, настройка закончена, теперь надо пользоваться. Переключение между состояниями "Внешка открыта"/"Внешка закрыта" происходит посредством переключения политик фаервола. Политики переключаются в меню. (Правой кнопкой по значку в трее - "Политики").
"Блокировать" - внешка закрыта
"Разрешать" - внешка открыта.
PS Внимание! Не стоит оставлять надолго Фаерволл в режиме "Разрешено"! Так как тогда большая вероятность попадания на траффик! Если вам нужен постоянный доступ к каким-либо внешним сайтам, и слишком часто приходится переключаться из режима в режим - лучше добавьте этот сайт в правило.
Вместо предисловия:
Вопрос- "В FreeBSD есть 3 разных фаервалла, какой использовать?"
Ответ - "Правильно насторенный."
Далее по тексту обсуждается IPFW как наиболее часто используемый во FreeBSD фаервалл.
Как задействовать IPFW?
Как известно существует два способа подключения IPFW:
1. Подключение скомпилированного модуля ядра при загрузке системы.
2. Комплияция IPFW в ядро системы.
Начнем с последнего - компиляция IPFW в ядро, в MAN-ах этот пункт достаточно подробно освещен:
Обычно ипользуются следующие опции в конфиге ядра:
options IPFIREWALL подключение IPFW
options IPFIREWALL_VERBOSE - проходящие пакеты записываются в лог-файл, при использовании опции log в правилах
options IPFIREWALL_VERBOSE_LIMIT=100-ограничение количества записей в лог-файл по одному правилу, в правилах IPFW значение можно изменить через опцию logamount
options IPFIREWALL_FORWARD- форвардинг пакетов, очень полезная опция при настройке прозрачного прокси на машине, где одновременно работает IPFW и прокси-сервер (например SQUID или FROX)
options IPDIVERT- подключение поддержки NATD (трансляция адресов)
options DUMMYNET- поключение функций управления трафиком (ограничение ширины канала, имитация задержек и потерь пакетов), и наконец для правила по умолчанию, которое присутствует в конфиге IPFW в любом случае под номером 65535, будет
allow ip
from any to any- если включена опция
options IPFIREWALL_DEFAULT_TO_ACCEPT- либо,
deny ip
from any to any- если отсутствует.
После сборки и установки нового ядра получаем IPFW встроенный в ядро системы.
Теперь о подключение модулем, тут все проще и сложнее одновременно.
Подключение IPFW в качестве модуля ядра, осуществляется одной командой:
kldload ipfw- при этом загружается модуль ipfw.ko, который в стандартной поставке имеет поддержку функций управления трафиком (DUMMYNET), к сожалению функции форвардинга (FORWARD) не поддерживаются и без перекомпиляции тут не обойтись.
Поддержку демона NATD в IPFW можно получить, загрузив аналогичной командой модуль ipdivert.ko
kldload ipdivert
IPFW, загруженный таким образом, содержит всего одно правило по умолчанию:
deny ip
from any to any
Рассмотрим теперь как происходит подключение IPFW в процессе загрузки операционой системы. Имеем достаточно типовые переменные в файле /etc/rc.conf
firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw.rules"
natd_enable="YES"
natd_interface="fxp1"
natd_flags="-same_ports"
Первая строка фактически разрешает исполнение стартового скрипта /etc/rc.d/ipfw, который в свою очередь, выполняет уже известную команду
kldload ipfw- если IPFW грузится модулем ядра, затем запускает на выполнение скрипт с правилами IPFW, указанный во второй строке. Заметим что строка
firewall_enable="YES"-требуется как для загрузки IPFW в виде модуля (иначе запускать придется вручную), так и для IPFW компиллированном в ядро (иначе не выполнится скрипт с правилами из второй строки, хотя IPFW все равно запустится с одним правилом по умолчанию). В процессе выполнения скрипт /etc/rc.d/ipfw установит значение системной переменной равным единице (TRUE):
net.inet.ip.fw.enable=1
Она указывает системе использовать ли IPFW вообще, так как если переменная равна нулю (FALSE), то IPFW использоваться не будет, независимо от того подгружаем ли мы модулем IPFW или он скомпилирован в ядро, попутно отметим следующее: все переменные, которыми можно управлять через sysctl действуют на IPFW одинаково, независимо от способа подключения IPFW.
Продолжим
строка:
firewall_script="/usr/local/etc/ipfw.rules" - указывает расположение нашего скрипта с правилами для IPFW, в принципе её может и не быть, но тогда запустится на исполнение скрипт /etc/rc.firewall, в котором есть стандартные наборы правил, сгруппированные в секции "OPEN","SIMPLE","CLOSED","UNKNOWN", можно также приспособить его под свои нужды (хотя это и не наш метод :-)), например добавив секцию "RULES", тогда данная строка приобретёт вид:
firewall_type="RULES"
По поводу строк с NATD сказать особо нечего, все аналогично уже рассмотренному с той разницей что исполняется скрипт /etc/rc.d/natd, и если IPFW используется в виде модуля ядра -загрузится модуль ipdivert.ko, потом скрипт выполнит команду вида:
natd
-interface ${natd_interface} -same_ports
и ещё, если IP интефейсa на котором крутится NATD получен от DHCP-сервера, скрипт добавит опцию "-dynamic".
Замечание 1.
Как все-таки подключать IPFW? Пожалуй решение такое: если FreeBSD используется в целях обучения, отладки и т.д. - проще подключать модулем, а если речь идет уже о "боевом" применении - лучше компиляция в ядро.
Как IPFW работает?
Общая схема
Замечание 2.
IP- Пакет, попадая в фаервал IPFW, следует согласно порядку расположений его правил до первого удовлетворяющего, где над этим IP-пакетом, согласно данному правилу, совершаются какие-либо действия (пропускается, отбрасывается, возвращается обратно в фаервал и т.д.).
Замечание 3.
Входящие (IN) и исходящие (OUT) пакеты следует рассматривать относительно операционной системы, а не относительно сетевых интерфейсов.
Замечание 4.
Каждый маршрутизируемый IP-пакет попадает в фаервал как на входе в операционную систему, так и на выходе из неё.
Рассмотрим, с учётом этих замечаний, следующие примеры и попытаемся в итоге понять проходят IP-пакеты по правилам IPFW и как составлять эти самые правила.
Предположим:
1. Система имеет 2 сетевых интерфейса – {iif}- внутренний(fxp0) и {oif}-внешний(fxp1), псевдоинтефейc-{lo}, который мы намеренно опустим из виду.
2. {iip} – IP- адрес для {iif}, и соответственно {oip} – для {oif}.
3. {MyLan} - внутренняя сеть
4. В системе работает простейший демон NATD по трансляции внутренних адресов во внешний и наоборот.
Пример №1. Как составлять правила?
Имеем следующее не совсем очевидное, зато очень часто встречающееся правило:{fwcmd} add allow ip from {MyLan} to any
Обычно когда пишут такое правило - подразумевают что разрешен доступ от хостов внутренней сети к любому хосту (при этом, часто полагают что речь идет только о внутренней сети :-) ), но есть и еще одна сторона медали, постараюсь её показать.
С учетом вышеописанных замечаний данное правило распишем в следующий набор правил:
1. {fwcmd}
add allow ip from {MyLan} to any in via
{iif}
2. {fwcmd}
add allow ip from {MyLan} to any out
via {iif}
3. {fwcmd}
add allow ip from {MyLan} to any out via {oif}
4. {fwcmd}
add allow ip from {MyLan} to any in via {oif}