| ||
В этом реферате я хочу рассмотреть 3 пакетных фильтра самых популярных в мире UNIX систем IPFW,IP-FILTER,PF(openbsd) на операционной системе FreeBSD 5.3.Сразу хочу оговорить полное описание и сравнение этих пакетных фильтров выходит далеко за рамки этого реферата по этой причине я не буду детально рассматривать каждый из них, а лишь их особенности, плюсы и минусы.
В сегодняшнем мире для защиты компьютерных сетей одним из главных средств защиты является пакетный фильтр или как его еще называют FIREWALL огненная стена.
Firewall - это система, управляющая прохождением пакетов данных через систему на основе заданных администратором правил и информации, содержащейся в заголовках пакетов. Обычное использование firewall - запрещение прохождения нежелательных пакетов, например, отключение абонента, не оплатившего услуги связи, или закрытие части сервисов локальной сети от внешнего мира. В системе FreeBSD firewall - это гораздо больше, чем просто турникет в метро - это мощный инструмент управления сетью, позволяющий, например, подсчитывать трафик по любым разумным правилам, основывающимся на данных заголовков пакетов протоколов стека TCP/IP, обрабатывать пакеты внешними программами, прятать за одним компьютером целую сеть и т.п
В отличие от разнообразных систем firewall для операционных систем семейства Windows, во FreeBSD firewall является частью самой операционной системы, поэтому работает значительно быстрее и надежнее своих не-UNIX конкурентов (исключая, конечно, системы, созданные специально для обработки сетевого трафика, такие как Cisco IOS). Но т.к. firewall нужен далеко не на каждом компьютере с FreeBSD (ведь FreeBSD - это еще и высокопроизводительный файл-сервер, быстрый и надежный сервер приложений, мощная рабочая станция), то поддержка firewall не включена в ядро FreeBSD по умолчанию.
Если затронуть 7 уровневую модель OSI то современные FIREWALL умеют работать уже с уровня прикладного(для IPTABLES есть дополнения которые могут анализировать заголовки пакетов прикладного уровня например HTTP) до Канального(фильтрация по MAC адресам)
По этой причине точно сказать сложно на каком уровне OSI работают FIREWALL наверно изначально ориентированы на Транспортный, и Сетевой, но чьё-то бурное воображение захотело от FIREWALL большего, и расширили этот диапазон от Прикладного до Канального. Так чего же требуется от современного FIREWALL можно продолжить и дальше философствовать но перейдем к задачам которые требуется от современных FIREWALL или чем должен обладать современный FIREWALL.
Далее по тексту мы будем рассматривать работу FIREWALL только на уровнях Транспортном, Сетевом.
Конечно, как и видно, из названия пакетный фильтр, он должен фильтровать только что фильтровать и что делать???
Это основные задачи современного FIREWALL, но плюс к этому FIREWALL дополняют такие вещи как Ретрансляция адресов(NAT), Трафик шей пер, и удобный интерфейс работы с правилами.
Ретрансляция адресов(NAT) должна уметь:
Трафик шейпер
Удобный интерфейс работы с правилами
Теперь рассмотрим более конкретно каждый и 3 пакетных фильтров IPFW,IP-FILTER,PF
При этом не затрагивай синтаксиса правил FIREWALL, так как синтаксис будет дальше в примерах для более наглядного рассмотрения сразу 3 Firewall
Для начало я хочу рассмотреть какой из файрволов IPFW,IP-FILTER,PF чем обладает
Родной Firewall для FreeBSD появился самым первым в FreeBSD.
Каждый пакет можно фильтровать на основе следующей, связанной с ним
информации:
Утилита ipfw также обеспечивает
пользовательский интерфейс для формирователя трафика dummynet(4).
Формирователь
работает путем деления
пакетов на потоки в соответствии с заданной пользователем маской по
различным полям заголовка IP. Пакеты,
принадлежащие к одному потоку,
затем передаются двум различным объектам - каналу или очереди.
главное правило ipfw -f flush при каждом запуске Firewall надо вычищать остатки правил перед загрузкой новых
При разработке правил надо учитывать следующие существенные моменты:
Файл GENERIC - это та
конфигурация ядра, которая была
сделанная при инсталляции системы
Для того, чтобы включить в ядро поддержку ipfw и natd надо добавить в
GENERIC вот
такие строки:
options
IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPDIVERT
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
Здесь IPFIREWALL
означает включение программы файервола ipfw,
IPFIREWALL_VERBOSE
означает ведение логов ipfw, IPFIREWALL_VERBOSE_LIMIT=10
ограничивает максимальное число записей, которые могут быть
сделаны в секунду. Учитывайте то, что если вы
поставите большое число для
IPFIREWALL_VERBOSE_LIMIT, то ваш винчестер может засорится от
быстрорастущих логов.
IPDIVERT означает включение
демона маскарадинга natd, IPFIREWALL_DEFAULT_TO_ACCEPT
означает, что ваш файервол по дефолту будет открытым. Если вы не
указываете этой
опции, то при старте файервола любой доступ из сети к компьютеру будет
закрыт.
Я советую включить опцию IPFIREWALL_DEFAULT_TO_ACCEPT
Ретрансляция адресов(NAT)
ipnat -CF -f
/etc/fire/ipnat.rules файл ipnat.rules содержит
информацию о ретрансляции и переброса IP-адресов
В ip-filter'e на мой взгляд очень удачно реализована идея ведение логов так как можно для каждого правила задать свой источник ведение логов в Syslog для этого необходимо запустить ipmon -sD демон ip-filter для ведения логов и в каждом правиле которое необходимо для ведения логов надо указать log level local3.info для разных правил это может быть разный источник SYSLOG.
Файл GENERIC -
это та конфигурация ядра, которая была сделанная при инсталляции
системы. Для того, чтобы включить в ядро поддержку ipf надо
добавить в GENERIC вот
такие строки:
Firewall разработанный вначале специально для OpenBSD появился в FreeBSD только начиная с версии FreeBSD 5.3 как подгружаемый модуль ядра. Разработанный относительно недавно и признанный в 2003 году лучшим Firewall года имеет ряд новшеств которые не имеют другие более поздние в разработке файрволы. В принципе он не идёт в сравнение не с какими другими пакетными фильтрами. В документациях указано, что правила фильтрации для IP-FILTRA 100% совместимы с правилами PF-FILTRA, но это, к сожалению не так да синтаксис обоих пакетных фильтров на первый взгляд идентичен, но есть небольшие расхождения, в результате которых это не так. По этой причине я его рассмотрю более детально
Каждый пакет можно фильтровать на основе следующей, связанной с ним информации:
Списки:
Списки позволяют определять множества, имеющие общие признаки в
пределах правила - такие как IP адреса, номера портов и т.д. Таким
образом, вместо прописывания нескольких правил фильтрации для каждого
IP адреса, который должен быть заблокирован, мы можем определить
список IP адресов в пределах одного правила. Списки должны находиться
внутри скобок {}.
Когда pfctl(8) доходит до списка при загрузке наборов правил, он
раскладывает их на отдельные правила, для каждого элемента списка. Для
примера:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
Будет преобразован в:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
Таблицы
Таблицы используются для хранения группы адресов IPv6 и/или IPv4.
Поиски в таблице занимают гораздо меньше времени и потребляют меньше
ресурсов, чем списки. По этой причине, таблица идеальна чтобы хранить
большую группу адресов, поскольку время поиска в таблице, содержащей
50 000 адресов - не намного больше чем для 50 адресов. Таблицы могут
использоваться следующими способами:
* источник и/или адрес назначения для filter, scrub, NAT, и
redirection rules
* адрес трансляции для правил NAT
* адрес переназначения для правил редиректа
* адрес назначения для правил фильтрации route-to, reply-to, и
dup-to
table <goodguys> { 192.0.2.0/24 }
pass in on fxp0 from <goodguys> to any
Таблицы могут также могут заполняться из файлов, содержащих список
адресов IP и сетей:
table persist file "/etc/spammers"
Файл/etc/spammers содержал бы список IP адресов или сетей CIDR. Любая
строка начинающаяся с #, будет обработана как комментарий и
проигнорирована.
Как работает NAT:
Когда клиент из внутренней сети посылает запрос в Internet, создаются IP пакеты, которые шлются к месту назначения. Эти пакеты содержат всю информацию об обратном адресе, необходимую для получения ответа. NAT заинтересован этими частями информации:a), чтобы полностью вернуть изменения на возвращающихся пакетах и
b) гарантировать, что вернувшиеся пакеты пройдут систему сетевой защиты и не будут блокированы.Например, могут произойти следующие изменения:
pfctl -N -f /root/pf-filter/pfnat.rules в файле pfnat.rules хранятся
правила ретрансляции
адресов и переброска(перенаправление)
- log
Определяет, что пакет должен быть зарегистрирован через pflogd(8). Если правило определено как keep state, modulate state, или synproxystate, то будет зарегистрирован только первый пакет, создавший правило. Чтобы регистрировать все пакеты, используйте log-all.Файл GENERIC - это та конфигурация ядра,
которая была сделанная при инсталляции системы. Для того чтобы
включить в ядро поддержку ipf надо добавить в GENERIC вот
такие строки:
Работа с правилами Пакетных фильтров в сравнительном анализе
Для начало надо разобраться немного со синтаксисом написания правил
Для наглядности будет указываться 1 правило для 3 фильтров имеющий один и тот же смысл. Правила в Firewall создаются по последовательным номерам, то есть 5 правил в файле и при загрузки правил они будут пронумерованы в той последовательности, в которой они идут, через эти номера, и производится управление правилами (удаление, перемещение), в IPFW по умолчанию правила нумеруются с приращением 100, в IP-FILTER и в PF-FILTER с приращением.
1.Правило разрешающее любые соединения любых протоколов на сетевом интерфейсе rl0
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
pass in on rl0 from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
pass in on rl0 from any to any
IPFW
/sbin/ipfw add pass all from any to any via rl0
2.Правило запрещающее любые соединения для любых протоколов на сетевом интерфейсе rl0
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
block in on rl0 from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
block in on rl0 from any to any
IPFW
/sbin/ipfw add deny all from any to any via rl0
блокирует любые соединения без ответа
3.Усложним задачу правило разрешающее любые соединения по протоколу TCP, но запрещающее любые соединения для протокола UDP на сетевом интерфейсе rl0
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
pass in on rl0 proto tcp from any to any
block in on rl0 proto udp from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
pass in on rl0 proto tcp from any to any
block in on rl0 proto udp from any to any
IPFW
/sbin/ipfw add pass tcp from any to any via rl0
/sbin/ipfw add deny udp from any to any via rl0
Наверни-ка вы так напишите да для IPFW задача будет выполнена, но для IP-FILTRA,
PF-FILTRA это будет не корректно в данном примере это не проглядывается но допустим такой пример
pass in on rl0 proto tcp from any to any
block in on rl0 proto tcp from any to any
вы сразу скажете, что tcp соединение будет разрешено, так как первое правило, на которое наткнется пакет, будет разрешение, но вот тут сразу вылазит ошибка, так как пакет в этом случае проследует до конца всех правил и только в самом конце к нему будет применено последнее попавшее под действие пакета правило block. Для того чтобы к пакету было применено первое сработавшее правило надо ставить слово quick
pass in quick on rl0 proto tcp from any to any
block in quick on rl0 proto tcp from any to any
4.Надо заблокировать TCP пакеты на порт 136-139 а всё остальное разрешить
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
block in quick on rl0 proto tcp from any to any port 136><139
pass in quick on rl0 from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
block in quick on rl0 proto tcp from any to any port 136><139
pass in quick on rl0 from any to any
IPFW
/sbin/ipfw add deny tcp from any to any 136-139 via rl0
/sbin/ipfw add pass all from any to any via rl0
В этом случае все пришедшие tcp пакеты на порт с 136 по 139 будут заблокированы А все другие пакеты пропущены5.Надо заблокировать TCP пакеты на порт 136-139 с адреса 195.195.195.195, а всё остальное разрешить
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
block in quick on rl0 proto tcp from 195.195.195.195 to any port 136><139
pass in quick on rl0 from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
block in quick on rl0 proto tcp from 195.195.195.195 to any port 136><139
pass in quick on rl0 from any to any
IPFW
/sbin/ipfw add deny tcp from 195.195.195.195 to any 136-139 in via rl0
/sbin/ipfw add pass all from any to any via rl0
6.А теперь надо сделать так чтобы заблокировать TCP пакеты на порт 136-139 с адреса 195.195.195.195, но чтобы при попытке этого IP установить соединение ему отсылался ответ в виде tcp пакета с RST установленным флагом, а всё остальное разрешить
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
block return-rst in quick on rl0 proto tcp from 195.195.195.195 to any port 136><139
pass in quick on rl0 from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
block return-rst in quick on rl0 proto tcp from 195.195.195.195 to any port 136><139
pass in quick on rl0 from any to any
IPFW
/sbin/ipfw add reset tcp from 195.195.195.195 to any 136-139 in via rl0
/sbin/ipfw add pass all from any to any via rl0
Но что это нам дает. А вот что если мы просто блокируем пакет то при попытке соединится пакет проглатывается и соединяющийся хост выдерживает установленный у него таймаут и только потом говорит что нельзя установить соединение, но в данном примере это решено отправкой ответа tcp пакета с rst установленным флагом который сообщает об обрыве связи
Можно также возвращать icmp ответы для udp пакетов
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
block return-icmp(host-unr) in quick on rl0 proto udp from any to any
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
block return-icmp(host-unr) in quick on rl0 proto udp from any to any
IPFW
/sbin/ipfw add reject udp from any to any in via rl0
В этом случае при попытке соединится по udp протоколу немедленно будет получен icmp пакет с кодом 1 Host Unreachable и ему не придется выдерживать таймаут..
Не всегда надо использовать RST и ICMP ответы на закрытие соединения, так как это сильно ускоряет сканирование портов, сканирующему не придётся выдерживать таймаут.
7.Работа с TCP флагами для начало надо разобраться с установкой соединения и со значением каждого флага.
Установка любого TCP-соединения происходит в три этапа. Клиент передает серверу пакет с установленным битом SYN (synchronize) и полем ISS (initial sequence number) содержащим начальный номер счётчика (обозначим как Cnt1), этот пакет - запрос на соединение. В ответ сервер высылает подтверждение - пакет с установленными битами SYN, ACK (acknowledgement), собственным значением поля ISS (обозначим как Cnt2) и полем ACK содержащим значение Cnt1, увеличенное на единицу. Получив его, клиент высылает ещё один пакет, с установленным битом ACK, полем счётчика ISS, равным Cnt1+1, и полем ACK, равным Cnt2+1. После этого соединение считается установленным. При обмене данными пакеты клиента в своих заголовках содержат поля с установленными битами ACK, постоянно увеличивающимся значением счётчика ISS (начиная с Cnt1) и поля ACK (начиная с Cnt2).
F - FIN используется для завершения соединения или при обрыве связи чтоб восстановить соединение
S - SYN флаг синхронизации используется при установке соединения
R - RST флаг разрыв соединения
P - PUSH выталкивает содержимое буфера
A - ACK
U - URG указатель важности
И так что мы можем с помощью флагов сделать это будет рассмотрено в полной мере ниже.
Но использование рассмотрим сейчас.
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
block in quick on rl0 proto tcp from any to any flags S
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
block in quick on rl0 proto tcp from any to any flags S/SAFURP
IPFW
Ipfw add deny tcp from any to any in tcpflags syn
В данном примере показано как можно работать с TCP флагами любое соединение будет невозможно, так как первый пакет с флагом SYN на установку будет отброшен. Также тут можно видеть разницу между IP-FILTR и PF-FILTR в том, что IP-FILTER при указание
flags S автоматически подставляет flag S/SAFRPU а PF-FILTR надо обязательно указывать всё.
8.Ретрансляция IP адресов(NAT)
На данной схеме показано что роутер имеет два интерфейса rl0 и rl1. rl0 смотрит в интернет с ip - 195.195.195.100. rl1 смотрит в локальную внутреннюю сеть(192.168.0.0/24) с ip-адресом 192.168.0.1
Ретрансляция адресов это когда вся внутренняя сеть 192.168.0.0/24 выходит в интернет по средством одного IP. Для чего это нужно, а очень просто для локальной сети доступен весь интернет, а для интернета доступен только один ip-адрес 195.195.195.100 трудно не заметить плюсы безопасности данной модели.
Реализация
IPFW
/sbin/natd -p 8668 -u -n rl0IP-FILTER
Command(ipnat -CF -f <имя файла содержащая нижнюю строчку>)
map rl0 192.168.0.0/24 -> 195.195.195.100/32
PF-FILTER
Command(pfctl -N -f <имя файла содержащая нижнюю строчку>)
nat on rl0 from 192.168.0.0/24 to any -> 195.195.195.100/32
Как же работает NAT а очень просто когда кто-нибудь из внутренней сетки 192.168.0.0.24
Отправляет пакет в интернет то NAT фиксирует в таблице состояний адрес назначения, порт назначения, адрес источника, порт источника и в самом пакете подменяет ip-адрес источника(192.168.0.10) на свой адрес 195.195.195.100 при получении ответа он делает обратную операцию на основе информации хранящийся в NAT таблице
9.Динамические правила Keep-state
С помощью динамических правил, мы создаем в таблице состояний файрвола правило двунаправленного действия.
IP-filter start command(ipf -Fa -f <имя файла содержащие нижние строчки>)
Block in quick on rl0 proto all from any to any
pass in quick on rl0 proto tcp from 195.195.195.195 to any port = 22 keep state
PF-filter start command(pfctl -R -f <имя файла содержащие нижние строчки>)
Block in quick on rl0 proto all from any to any
pass in quick on rl0 proto tcp from 195.195.195.195 to any port = 22 keep state
IPFW
Ipfw add check-state
Ipfw add deny tcp from any to any via rl0
Ipfw add pass tcp from 195.195.195.195 to any 22 keep state
В данном примере будет создано двухсторонние динамическое правило для доступа 195.195.195.195 к порту 22 и это правило обработается самым первым перед полным блокированием. То есть, проще говоря, в памяти в таблице состояний соединений будет создана на определений момент запись, разрешающая проход пакета в обеих стороны
Поведением динамических правил можно управлять через sysctl переменные. Можно реализовывать сложные конструкции правил, можно защищаться от некоторых видов DOS атак и улучшать доступ к некоторым из портов. Отличие IPFW от IP-FILTRA и PF-FILTRA в том что у IPFW можно выставить место в правилах FIREWALL в каком месте будет вход в динамические правила, то есть можно выставить метку CHECK-STATE не в начале как это принято делать а где-нибудь по середине, тогда с начало прогоняются те правила, которые идут до метки а только потом динамически созданные правила.Вообще говоря NAT и Keep-state почти одно и тоже.Nat как и keep-state создает запись в таблице состояний соединений только при этом еще подменяет IP адрес.
Для более хитрого использования KEEP-STATE рассмотрим такой пример
IP-FILTER
Запускаем ретрансляцию адресов
Command(ipnat -CF -f <имя файла содержащая нижнюю строчку>)
map rl0 192.168.0.0/24 -> 195.195.195.100/32
block in quick on xl0 all
pass out quick on xl0 from 195.195.195.1 to any keep state
pass out quick on xl0 from 192.168.0.1/24 to any keep state
PF-filter
Запускаем ретрансляцию адресов
Command(pfctl -N -f <имя файла содержащая нижнюю строчку>)
nat on rl0 from 192.168.0.0/24 to any -> 195.195.195.100/32
block in quick on xl0 all
pass out quick on xl0 from 195.195.195.1 to any keep state
pass out quick on xl0 from 192.168.0.1/24 to any keep state
И что же это нам даст а то, что роутер будет не достижим для пакетов из интернета а сам роутер и его внутренняя ретрансляционная(NAT) сетка, которая имеет IP 192.168.0.0.24 сможет без всяких проблем выходить в интернет, В этом случае от интернета мы полностью огорожены абсолютная защита, нет как сказал КАМИКАДЗЕ абсолютной защиты не бывает. К сожалению, для IPFW этого сделать не удалось по ряду причин.
Но к сожалению я не очень люблю динамические правила по этой причине я дальше рассматривать их не буду.
Разработка структуры правил FIREWALL
Так как мы познакомились немного с синтаксисом давайте разберёмся с порядком написания правил для FIREWALL
IPFW
Тут есть одно и очень простое правило: располагать правила для
IPFW в следующем порядке:
IP-FILTER
PF-FILTER
Не сложно заметить, что в указанных порядках PF-FILTER,PF-FILTER отсутствует запись о ретрансляции адресов (NAT), это связано с тем, что у этих FIREWALL ретрансляционий блок(NAT) вынесен в отдельное приложение для FIREWALL а у IPFW это загружается в месте с правилами FIREWALL. У PF и IP блок NAT не играет роли в следовании правил файрволла и применяется к пакетам в после правил файрвола в самом конце.
У IPFW наоборот пакеты попадают к NAT в том порядке как вы указали в правилах FIREWALL но после.
Теперь давайте разберём действительно сложную конфигурацию правил FIREWALL для IPFW и IP-FILTRA набор правил будет идентичен разница только в написании синтаксиса правил. В конце мы разберем, чего же тут было написано. Для PF-Filtr рассмотрим отдельно, так как у него присутствует другие более продвинутые возможности для решения задач.
Сервер, выполняющий функцию ретранслятора адресов и фильтрацию пакетов
На сервере работают такие сервисы
IPFW
#!/bin/sh
#ochistitj vse ostaljnije pravila firewall'a
ipfw -f flush
/sbin/ipfw check-state
##################### DENY UNUSEFULL TRAFIC ##########################################
#1.1 Fragmented packet
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 frag
#1.2 Strict Source Route zhostkaja privjazka shljuzov cherez kotorije paket dolzhen projti shljuzi v ip-header'e(max9)
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions ssrr
#1.3 Loose Source Route ne zhostkaja privjazka shljuzov cherez kotorije paket dolzhen projti shljuzi v ip-header'e(max9)
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions lsrr
#1.4 Record Packet Route dlja tracerroute fiksiruet v ip-header'e adressa proidenih shljuzov
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions rr
#1.5 Timestamp
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions ts
#2 FOR SCANNERS OF OS DETECTING
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags syn,fin,!ack,
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags syn,fin,urg,psh,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags fin,urg,psh,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags fin,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags urg,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags psh,!ack
# FOR SYN FLOOD THAT HAVE NOT MSS
#с помощью этой строчки мы можем предотвратить часть атак DOS так как флаг syn в TCP заголовке
# посылается для установки соединения то некоторые пакетные генераторы при генерации пакета
#TCP с установленым флагом SYN не расчитывают Maximum segment size то таким образом мы
#блокируем ложные соединения
/sbin/ipfw add deny log tcp from any to any tcpoptions !mss tcpflags syn,!ack
#3 NON ROUTING IP ADRESS
/sbin/ipfw add deny log all from 127.0.0.0/8 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 192.168.0.0/16 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 172.16.0.0/12 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 10.0.0.0/8 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 0.0.0.0/8 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 169.254.0.0/16 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 192.0.2.0/24 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 204.152.64.0/23 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 224.0.0.0/3 to 195.195.195.1 in via xl0
/sbin/ipfw add deny log all from 20.20.20.0/24 to 195.195.195.1 in via xl0
#4 zapreshjajem vihod lokaljogo trafika za predeli servera
/sbin/ipfw add deny log all from 192.168.0.0/24 to 192.168.0.0/24 via xl0
/sbin/ipfw add allow all from 192.168.0.0/24 to 192.168.0.0/24 via xl1
#5 zapreshajem rabotu po portam
#5.1
/sbin/ipfw add deny log udp from any to 195.195.195.1 514 in via xl0
#5.2
/sbin/ipfw add deny log udp from any to 195.195.195.1 137-139 in via xl0
#5.3
/sbin/ipfw add deny log tcp from any to 195.195.195.1 137-139 in via xl0
#5.4
/sbin/ipfw add deny log tcp from any to 195.195.195.1 901 in via xl0
#5.5
/sbin/ipfw add deny log tcp from any to 195.195.195.1 587 in via xl0
#5.6
/sbin/ipfw add deny log tcp from any to 195.195.195.1 953 in via xl0
#5.7
/sbin/ipfw add deny log tcp from any to 195.195.195.1 3306 in via xl0
#5.8
/sbin/ipfw add deny log tcp from any to 195.195.195.1 3000 in via xl0
#5.9
/sbin/ipfw add deny log tcp from any to 195.195.195.1 3001 in via xl0
#5.10
/sbin/ipfw add deny log tcp from any to 195.195.195.1 110 in via xl0
######################################################################################
######### RAZRESHENIJE ######
######################################################################################
#6
/sbin/ipfw add allow icmp from any to 195.195.195.1 icmptypes 8 via xl0
/sbin/ipfw add allow icmp from any to 195.195.195.1 icmptypes 0 via xl0
/sbin/ipfw add deny log icmp from any to any via xl0
#7
/sbin/ipfw add pass all from any to any via lo0
#8
#propuskatj 2 ip na 22 port na vhod a vse ostoljnoje zakrivatj
#na vihod otkrit tak kak inache ne smog bi s servera conectitesja k 22 portu drugih tachek
/sbin/ipfw add pass tcp from 195.216.172.0/24 to 195.195.195.1 22 in via xl0
/sbin/ipfw add pass tcp from 195.195.195.1 22 to 195.216.172.0/24 out via xl0
/sbin/ipfw add deny log tcp from any to any 22 in via xl0
## DNS SERVER ALLOW 80.80.80.53 - SECONDARY DNS SERVER UPDATE
#9
/sbin/ipfw add pass tcp from 80.80.80.53 to 195.195.195.1 53 in via xl0
/sbin/ipfw add pass tcp from 195.195.195.1 53 to 80.80.80.53 out via xl0
/sbin/ipfw add deny log tcp from any to 195.195.195.1 53 in via xl0
## DNS QUERY
#10
/sbin/ipfw add pass udp from any to 195.195.195.1 53 in via xl0
/sbin/ipfw add pass udp from 195.195.195.1 53 to any out via xl0
## WEB SERVER AND SOME LITLE DDOS DEFENCE
#11
/sbin/ipfw add pass tcp from any to 195.195.195.1 80 in via xl0 tcpflags syn,!psh,!ack,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 443 in via xl0 tcpflags syn,!psh,!ack,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 80 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 443 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 80 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 443 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 80 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 443 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 80 in via xl0 tcpflags ack,syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 443 in via xl0 tcpflags ack,syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 80 in via xl0 tcpflags rst,!ack,!syn,!psh,!fin,!urg
/sbin/ipfw add pass tcp from any to 195.195.195.1 443 in via xl0 tcpflags rst,!ack,!syn,!psh,!fin,!urg
## FTP SERVER AND SOME LITLE DDOS DEFENCE
# 12
/sbin/ipfw add pass tcp from any to 195.195.195.1 20 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 20 in via xl0 tcpflags ack,syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 20 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 20 in via xl0 tcpflags rst,!ack,!syn,!psh,!fin,!urg
/sbin/ipfw add pass tcp from any to 195.195.195.1 21 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 21 in via xl0 tcpflags syn,!psh,!ack,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 21 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 21 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 21 in via xl0 tcpflags rst,!ack,!syn,!psh,!fin,!urg
## MAIL SERVER AND SOME LITLE DDOS DEFENCE
# SMTP SERVER 25 PORT
#13
#13.1
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags syn,!ack,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
# SMTP OVER SSL
#13.2
/sbin/ipfw add pass tcp from any to 195.195.195.1 465 in via xl0 tcpflags syn,!ack,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 465 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 465 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 465 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
# POP3 OVER SSL
#13.3
/sbin/ipfw add pass tcp from any to 195.195.195.1 995 in via xl0 tcpflags syn,!ack,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 995 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 995 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 995 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
#sbin/ipfw add deny all from any to any via xl0
#sam nat s zavarotom na nat
#-p 8668 port divert soketa, -d neperedovatj vhodjashije paketi
#kotorije ne imejut zapisej sootvetsvija v NAT tablice no tagda ne pashet SSH no zakrivaet serve dlja vnutrenego dostupa
#-u imenjatj ip toljko s chastnimi adressami istochnika
#-n xl0 na kakom interface vesit NAT
#nevazhno gde idet eta strochka tak kak ona zapuskaetsja vmeste so skriptom tobish pervaja
/sbin/natd -p 8668 -u -n xl0
#/sbin/natd
/sbin/ipfw add divert 8668 all from any to 195.195.195.1 recv xl0
/sbin/ipfw add divert 8668 all from 192.168.0.0/24 to any out via xl0
#razreshenije na vihod nata cherez xl1
#14
/sbin/ipfw add pass all from any to any via xl1 keep-state
#15
/sbin/ipfw add pass all from any to any out via xl0
#iz UDP trafika razreshaem prihoditj toljko DNS'u
#16
/sbin/ipfw add pass udp from 80.80.80.53 53 to 195.195.195.1 in via xl0
/sbin/ipfw add pass tcp from any to 195.195.195.1 in via xl0 established
#vhodjashije pervij paket na soedinenije imeet toljko bit syn poetomu mi ego nahren otrubaem shtobi vhodjashije ne konektilisj k portam
#17
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 setup
#18
/sbin/ipfw add deny log udp from any to 195.195.195.1 in via xl0
IP-FILTR
###############################################################################
############# XL0- internet interface 195.195.195.1 ###############
############# DENY TRAFIC ###############
###############################################################################
######### DENY UNUSEFULL TRAFIC
#1.1
block in log level local3.info quick on xl0 from any to 195.195.195.1 with frags
#1.2
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt ssrr
#1.3
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt lsrr
#1.4
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt rr
#1.5
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt ts
# PORT SCANNERS OF OS DETECTING
#2
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags SF/SF
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags SFUP/SFUP
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags FPU/FPU
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags F/F
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags U/U
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags P/P
# don't allow anyone to spoof non-routeble adresses
# 3 IN
block in log level local3.info quick on xl0 from 127.0.0.0/8 to 195.195.195.1
block in log level local3.info quick on xl0 from 192.168.0.0/16 to 195.195.195.1
block in log level local3.info quick on xl0 from 172.16.0.0/12 to 195.195.195.1
block in log level local3.info quick on xl0 from 10.0.0.0/8 to 195.195.195.1
block in log level local3.info quick on xl0 from 0.0.0.0/8 to 195.195.195.1
block in log level local3.info quick on xl0 from 169.254.0.0/16 to 195.195.195.1
block in log level local3.info quick on xl0 from 192.0.2.0/24 to 195.195.195.1
block in log level local3.info quick on xl0 from 204.152.64.0/23 to 195.195.195.1
block in log level local3.info quick on xl0 from 224.0.0.0/3 to 195.195.195.1
block in log level local3.info quick on xl0 from 20.20.20.0/24 to 195.195.195.1
# zapreshajem vihod lokaljnogo trafika za predeli servera
# 4
block in log level local3.info quick on xl0 from 192.168.0.0/24 to 192.168.0.0/24
block out log level local3.info quick on xl0 from 192.168.0.0/24 to 192.168.0.0/24
# Zapreshenije raboti po portam
# 5
###############################################################################
##### DENY SYSLOG
# 5.1
block in log level local3.info quick on xl0 proto udp from any to 195.195.195.1 port = 514
##### DENY SAMBA
#5.2
block in log level local3.info quick on xl0 proto udp from any to 195.195.195.1 port 136 >< 140
#5.3
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port 136 >< 140
##### DENY SWAT
#5.4
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 901
##### DENY SENDMAIL
#5.5
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 587
##### DENY BIND CONTROL PORT
#5.6
block in log level local3.info quick on xl0 proto tcp from any to 127.0.0.1 port = 953
##### DENY MYSQL
#5.7
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 3306
##### DRWEB
#5.8
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 3000
##### DRWEB-SMF
#5.9
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 3001
##### POP3
#5.10
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 110
###############################################################################
############# XL0- internet interface 80.249.194.125 ###############
############# ALLOW ###############
###############################################################################
##### ICMP TRAFIC
#6
pass in quick on xl0 proto icmp from any to any icmp-type echo
pass in quick on xl0 proto icmp from any to any icmp-type echorep
pass out quick on xl0 proto icmp from any to any icmp-type echorep
pass out quick on xl0 proto icmp from any to any icmp-type echo
block in log level local3.info quick on xl0 proto icmp from any to any
block out log level local3.info quick on xl0 proto icmp from any to any
#### ALLOW LOCALHOST
#7
pass in log quick on lo
pass out log quick on lo
##### SSH 6
#8
pass in quick on xl0 proto tcp from 195.216.172.0/24 to 195.195.195.1 port = 22
pass out quick on xl0 proto tcp from 195.195.195.1 port = 22 to 195.216.172.0/24
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 22
### DNS SERVER ALLOW 80.80.80.53 - SECONDARY DNS SERVER UPDATE
#9
pass in quick on xl0 proto tcp from 80.80.80.53 to 195.195.195.1 port = 53
pass out quick on xl0 proto tcp from 195.195.195.1 port = 53 to 80.80.80.53
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 53
### DNS QUERY
#10
pass in quick on xl0 proto udp from any to 195.195.195.1 port = 53
pass out quick on xl0 proto udp from 195.195.195.1 port = 53 to any
### WEB SERVER
# 11
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 flags AF/AF
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 flags AF/AF
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 flags AS/AS
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 flags AS/AS
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 flags R/R
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 flags R/R
### FTP SERVER
# DATA PORT
#12
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 20 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 20 flags AS/AS
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 20 flags AF/AF
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 20 flags R/R
# COMMAND PORT
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 21 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 21 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 21 flags AF/AF
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 21 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 21 flags R/R
### MAIL SERVER
# SMTP SERVER 25 PORT
# 13.1
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags AF/AF
# SMTP OVER SSL
#13.2
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 465 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 465 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 465 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 465 flags AF/AF
# POP3 OVER SLL
#13.3
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 995 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 995 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 995 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 995 flags AF/AF
# RAZRESHENIJE LOKALJNOGO TRAFIKA
#14
pass in quick on xl1 from any to any keep state
pass out quick on xl1 from any to any keep state
#15
pass out quick on xl0 from any to any
## DNS TRAFIK
#16
pass in quick on xl0 proto udp from 80.80.80.53 port = 53 to 195.195.195.1
###### BLOCK ALL #######
#17
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 flags S
#18
block in log level local3.info quick on xl0 proto udp from any to 195.195.195.1
Не для кого не секрет что протокол TCP/IP разработан уже давно и в принципе кардинальных изменений в него уже не вносили тоже давно по этой причине в нем присутствуют проблемы безопасности. В данных правилах с начало идёт шапка для устранения проблем с безопасностью протокола.
1.1Запрещение фрагментированных пакетов. Есть вид атаки, который нацелен именно на фрагментацию пакетов. Но давайте разберём с начало, что такое фрагментированные пакеты и когда они образуются.
И. Сказал Аллах да' будет сеть и возникла сеть', и сказал Аллах тогда, ' пусть будет много сетей и возникло много сетей'
В мире существуют множество разных технологий компьютерных сетей(Token Ring.Fast Ethernet.Frame Relay и.т. д) отличие и сходство мы описывать не будем, но кое что все таки опишем. Известно, что у технологии Ethernet максимальный размер пакета 1500 байт включая заголовок, а у технологии Token Ring этот размер составляет 4500 байт.
Рассмотрим такой пример: эти две сети соединены по средством моста и обе работают на протоколе TCP/IP когда мы передаем пакет из сети Ethernet в сеть Token Ring даже при максимальном пакете 1500 байт не превысит лимит в 4500 байт тут всё гладко, но если на оборот мы передаем из сети Token Ring в сеть Ethernet, то максимальный пакет 4500 больше предела 1500, в этом случае и поможет фрагментация. Мост, который связывает две сети при получении пакета из Token Ring с размером 4500 фрагментирует его на 3 пакета по 1500 байт и в IP заголовке Получившихся пакетов укажет смещение в байтах, принимающая сторона с начало примет все три пакета, а потом по смещению последовательно соберет в один пакет. В современном мире существуют множество технологий сетей, так что данный пример далеко не редкость. Как это может повлиять на фильтр. Атака состоит из запроса TCP соединения, фрагментированного на два IP-пакета. Первый IP-пакет состоит из 68 байт и содержит лишь первые восемь байт заголовка TCP (порты источника, назначения, и порядковый номер). Данные второго IP-пакета содержат запрос на TCP соединение (Флаг SYN установлен, ACK снят). Пакетные фильтры применяют одно и то же правило ко всем фрагментам пакета. По первому фрагменту (смещение = 0) выбирается правило, в соответствии с которым обрабатываются все остальные фрагменты пакета безо всякого дополнительного контроля. А во втором пакете содержится кусок не законченного TCP заголовка первого пакета. Таким образом, при сборке фрагментов на целевой машине формируется пакет с запросом на соединение. В результате устанавливается соединение, несмотря на то, что пакетный фильтр должен был предотвратить такую ситуацию.
1.2.Strict source route record - опция IP заголовка пакета, которая жестка задает до 8 IP-адресов маршрутизаторов через которые должен пройти пакет проблема безопасности в этом случае понятна
1.3.Loose source route record - почти тоже самое, что и Strict source route record только задает, не жестка прохождение пакета. Достигается это при достижении указанного в заголовке адреса маршрутизатора происходит замещения адреса доставки на следующий адрес маршрутизатора.
1.4.Router Record - используется для сбора IP-адресов маршрутизаторов через которые прошел пакет к пункту назначения. Используется такими программами как TRACEROUTE и TRACERT.
1.5. Timestamp - не помню точно но тоже что-то связанное с количеством ячеек под адреса маршрутизаторов.
2.Блок использующейся для запрещения определения операционной системы сканерами NMAP и.т.д. А также для запрещения атаки типа FIN flood. Правило запрещает вхождение TCP пакетов с неправильно установленными флагами.
3.Блок, запрещающий атаку типа Router-Spoofing при которой в источника IP-адресе указывается IP-адрес из внутренней сети в нашем случае это могло бы быть 192.168.0.0/24
при этом можно получить весь доступ, который доступен для внутренней сети.
4.Запрещаем случайный выход внутреннего трафика за пределы внутренней сети
5.Запрещаем для интернета соединение с некоторыми портами
5.1. Порт UDP 514 для удалённого приема событий программой журналом событий SYSLOG
5.2. Порты UDP 136 - 140 для протокола SMB который использует файловый сервер SAMBA(nmbd)
5.3. Порты TCP 136 - 140 для протокола SMB который использует файловый сервер SAMBA(smbd)
5.4. Порт TCP 901 используется для SWAT(Веб интерфейс для настройки SAMBA)
5.5. Порт TCP 587 Использующийся для почтового сервера SENDMAIL для балансировки нагрузки и ускорения работы сервера.
5.6.Порт TCP 953 порт для управления действиями DNS сервера BIND
5.7. Порт TCP 3306 порт, на котором работает по умолчанию MYSQL сервер баз данных
5.8. Порт TCP 3000 порт на котором работает по умолчанию DRWEB MONITOR
5.9. Порт TCP 3000 порт на котором работает по умолчанию DRWEB MAIL CHECKER
5.10. Порт TCP 110 порт для протокола POP3 принятие почты клиентами, Делаем его доступным только для внутренней сети.
6. Разрешаем из протокола ICMP только пинговать и получать ответы на пинги.
7. Разрешаем хождение трафика по локальному интерфейсу (lo0)
8. Разрешаем доступ к SSH серверу только из сети 195.216.172.0/24 для всех остальных запрещаем
9. TCP порт 53 используется для DNS серверов при передачи зоны с PRIMRY DNS SERVER SECONDARY DNS SERVER для всех остальных запрещаем.
10. UDP порт 53 для запросов на преобразования доменного имени в IP-адрес DNS сервером
11. Следующий блок правил относится к WEB-Server который работает по протоколам HTTP(порт 80) и HTTPS(порт 443) а также с последующей защитой его от разного рода атак путем разрешений определенного набора флагов в TCP заголовке которые в свою очередь допускают только правильную установку связи с сервером последующем этапом передачи данных и конечной фазой раз соединение.
В последующем описании PF-Filtra эти наборы будут заменены на более рациональное решение.
12.Как известно у FTP есть два режима работы пассивный и активный, в пассивном режиме связь устанавливается по 21 порту, а потом переводится на порт выше чем 1024,в активном режиме авторизация и команды для сервера идут по порту 21, но как только начинается передача данных то, сразу открывается порт 20. Тут также присутствует набор допустимых TCP флагов для большей безопасности.
13. Порты Почтовой системы
13.1. 25 Порт главный порт почтового сервера, через который осуществляется пере ссылка писем между серверами. Также защищен комбинацией флагов TCP заголовка.
13.2. 465 Порт на нем работает программа STUNNEL обеспечивающая перевод соединения на порт 25(SMTP) локально с шифрованием от внешнего клиента до сервера с портом 465. Также установлена допустимая конфигурация флагов в TCP заголовке
13.3. 995 Порт на нем работает программа STUNNEL обеспечивающая перевод соединения на порт 110(POP3) локально с шифрованием от внешнего клиента до сервера с портом 465. Также установлена допустимая конфигурация флагов в TCP заголовке.
14.Создает Динамическое правило, разрешающее хождению трафика во внутренней сети на интерфейсе xl1. Динамическое правило применено, для того чтобы внутренний трафик сети не проходил проверку всех правил FIREWALL и за счёт этого выигрываем во времени.
15.Разрешает выход любого трафика в интернет через внешний интерфейс (xl0).
16. Разрешаем вход UDP пакетов для DNS запросов с DNS сервера 80.80.80.53 порта 53 на наш внутренний интерфейс. Зачем нам запросы на внешний DNS ведь у нас есть свой собственный, Не хорошо загружать наш DNS сервер, когда это мог бы сделать DNS сервер провайдера тем более это входит в предоставляемые услуги нашим провайдером.
17. Последние строчки особенно важны, потому что с их помощью мы закрываем все что не нужно. По протоколу TCP не пропускаем любые пакеты с флагом SYN которые служат для установки соединения но если б мы не поставили этого флага то любые ответы пришедшие обратно не попавшие под вышестоящие правила были бы заблокированы, касается это в первую очередь ретрансляции ведь тогда все ответы которые должны были бы пройти через ретранслятор для внутренней сети были бы заблокированы. Хотя почтовый и веб и ftp сервера были бы доступны из интернета.
18. Так как udp только используется для DNS который мы разрешили выше мы закрываем весь доступ по протоколу udp.
Итог только что были рассмотрены сложные наборы правил FIREWALL для
IPFW и IP-FILTER я специально сгруппировал эти 2 FIREWALL в месте так
как приблизительно
одного ранга, в свою очередь PF-FILTER он был
разработан сравнительно не давно и обладает более прогрессируемыми
средствами, чем IPFW,IP-FILTER. По этой причине я его буду
рассматривать отдельно.
PF-FILTER
Был признан лучшим пакетным фильтром 2004 года, хотя бы факт что он был изначально разработан для OpenBSD по всемирному признанию самой защищенной операционной системе в мире по данным статистики не было еще не одного взлома OpenBSD в конфигурации по умолчанию уже заслуживает отдельного рассмотрения.PF Превосходит многие коммерческие продукты, и даже способен составить достойную конкуренцию таким всемирным продуктам как CHECK-POINT.Перечисление всех его достоинств может, не вместится в толстую книгу.
Первый раз миру открытых систем был дан продукт который даёт даёт возможность без изнурительной и кропотливой настройки защитить своё виртуальное пространство от всяческих атак даже DoS,DDoS.
Приступим во первых у многих может сложиться мнение что описание правил PF будет идентичным с IP-FILTR да по синтаксису они будут близки но вот по идее, в прочем всё будет видно дальше.
#!/bin/sh
###############################################################################
############# BEGIN RULES ###############
############# NORMALIZACIJA ###############
###############################################################################
#1.1Vhodjashjie fragmenti nakaplivajutsja i peredajutsja daljshe filjtru
scrub in on xl0 all fragment reassemble min-ttl 20 max-mss 1440
#1.2Ubiraet opciju don't fragment iz ip-zagalovka
scrub in on xl0 all no-df
#1.3 Ni odnoj iz storon ne pozvoljaetsja umenjshitj IP TTL TTL dlja vseh paketov ustanavlivaetsja v maksimum
scrub on xl0 all reassemble tcp
#2.1 PORT SCANNERS FOR OS DETECTING
block in quick proto tcp from any to 195.195.195.1 flags SF/SFRA
block in quick proto tcp from any to 195.195.195.1 flags SFUP/SFRAU
block in quick proto tcp from any to 195.195.195.1 flags FPU/SFRAUP
block in quick proto tcp from any to 195.195.195.1 flags F/SFRA
block in quick proto tcp from any to 195.195.195.1 flags U/SFRAU
block in quick proto tcp from any to 195.195.195.1 flags P/P
#3.1 don't allow anyone to spoof non-routeble adresses
# IN
block in log-all quick on xl0 from { 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 204.152.64.0/23, 224.0.0.0/3, 20.20.20.0/24 } to 195.195.195.1
#3.2 OUT
block out log-all quick on xl0 from any to { 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 204.152.64.0/23, 224.0.0.0/3, 20.20.20.0/24 }
#4 Zapreshenije raboti po portam
###############################################################################
#####4.1 DENY SYSlog-all
block in log-all quick on xl0 proto udp from any to 195.195.195.1 port = 514
#####4.2 DENY SAMBA
block in log-all quick on xl0 proto udp from any to 195.195.195.1 port 136 >< 140
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port 136 >< 140
#####4.3 DENY SWAT
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 901
#####4.4 DENY SENDMAIL
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 587
#####4.5 DENY MYSQL
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 3306
#####4.6 DRWEB
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 3000
#####4.7 DRWEB-SMF
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 3001
#####4.8 POP3
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 110
###############################################################################
############# XL0- internet interface 80.249.194.125 ###############
############# ALLOW ###############
###############################################################################
#####5 ICMP TRAFIC
pass in quick on xl0 proto icmp from any to 195.195.195.1 icmp-type echoreq
pass in quick on xl0 proto icmp from any to 195.195.195.1 icmp-type echorep
pass out quick on xl0 proto icmp from 195.195.195.1 to any icmp-type echoreq
pass out quick on xl0 proto icmp from 195.195.195.1 to any icmp-type echorep
block in log-all quick on xl0 proto icmp from any to any
block out log-all quick on xl0 proto icmp from any to any
####6 ALLOW LOCALHOST
pass in log-all quick on lo
pass out log-all quick on lo
#####7 SSH 6
pass in quick on xl0 proto tcp from 195.216.172.0/24 to 195.195.195.1 port = 22
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port = 22
###8 DNS
pass in quick on xl0 proto tcp from 80.80.80.53 to 195.195.195.1 port = 53
pass out quick on xl0 proto tcp from 195.195.195.1 port = 53 to 80.80.80.53
pass in quick on xl0 proto udp from any to 195.195.195.1 port = 53
pass out quick on xl0 proto udp from 195.195.195.1 port = 53 to any
###9 WEB SERVER
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 80 synproxy state (max 10 tcp.finwait 5 tcp.opening 10 tcp.established 30 tcp.closing 20)
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 443 synproxy state (max 10 tcp.finwait 5 tcp.opening 10 tcp.established 30 tcp.closing 20)
###10 FTP SERVER
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 20 flags S/SA synproxy state
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 21 flags S/SA synproxy state
###11 EMULE
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 4661
pass out quick on xl0 proto tcp from 195.195.195.1 port = 4661 to any
###12 MAIL SERVER
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags S/SA synproxy state
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 465 flags S/SA synproxy state
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 995 flags S/SA synproxy state
##13 DNS
pass in quick on xl0 proto udp from 80.80.80.53 port = 53 to 195.195.195.1
pass in quick on xl0 proto udp from 217.199.96.2 port = 53 to 195.195.195.1
###14.1 BLOCK ALL
pass out quick on xl0 proto tcp from 195.195.195.1 to any
pass out quick on xl0 proto udp from 195.195.195.1 to any
###14.2
block in log quick on xl0 proto tcp from any to 195.195.195.1 flags S/SAFRP
block in log quick on xl0 proto udp from any to 195.195.195.1
###############################################################################
############# XL1- internel interface 192.168.0.1 ###############
############# ###############
###############################################################################
### 15
pass in quick on xl1 from any to any keep state
pass out quick on xl1 from any to any keep state
Описание
Не для кого не секрет что протокол TCP/IP разработан уже давно и в принципе кардинальных изменений в него уже не вносили тоже давно по этой причине в нем присутствуют проблемы безопасности. В данных правилах с начало идёт шапка для устранения проблем с безопасностью протокола.
1.1 "Scrubbing" - это нормализация пакета таким образом, чтобы не осталось
двусмысленности в определении адресата пакета. Директива scrub также
таким образом, осуществляя защиту некоторых операционных систем от определенного вида атак и отбрасывает пакеты с недопустимыми флагами. Самая простая форма: scrub in all
После прохождения правила Scrubbing и нормализации пакета пакет передается дальше правилам фильтра.
Scrub может принимать следующие опции:
fragment reassemble
Приходящие фрагменты накапливаются и собираются в законченный пакет, который затем передается на механизм фильтрации. Преимущество - возможность фильтрующему правилу игнорировать фрагменты. Недостаток - увеличение расхода памяти. Это опция по умолчанию, если никакая другая опция работы с фрагментами не установлена. Также это единственная опция, с которой работает NAT.
max-mss num
Устанавливает Maximum Segment Size (MSS) в заголовке TCP пакета. Расчёт делается исходя из MTU(Maximum Transfer Unit)-Maximum IP Header length.
min-ttl num
Устанавливает минимальное значение Time To Live (TTL) в заголовке пакета.
1.2 no-df
Убирает бит "don't fragment" из заголовка IP пакета. Как уже
говорилось, некоторые операционные системы генерируют
фрагментированные пакеты с флагом "не фрагментировать", особенно
это характерно для NFS. Такие пакеты будут отброшены, если не
использовать no-df. Поскольку некоторые ОС генерируют "don't
fragment" пакеты с нулевым идентификатором IP в заголовке,
использование no-df лучше сочетать с опцией random-id.
1.3 reassemble tcp
Постоянно нормализует TCP пакеты. При использовании scrub пере собирает пакет, может быть не определено направление (in/out). Может быть выполнена следующая нормализация:
2.1 Блок использующейся для запрещения определения операционной системы сканерами NMAP и.т.д. А также для запрещения атаки типа FIN flood. Правило запрещает вхождение TCP пакетов с неправильно установленными флагами.
3.Блок, запрещающий атаку типа Router-Spoofing при которой в источника IP-адресе указывается IP-адрес из внутренней сети или адреса зарезервированные в нашем случае это могло бы быть 192.168.0.0/24 при этом можно получить весь доступ, который доступен для внутренней сети.В данном примере можно видеть использование таблиц
Когда pfctl(8) доходит до списка при загрузке наборов правил, он раскладывает их на отдельные правила, для каждого элемента списка. Для примера:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
Будет преобразован в:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
4.Запрещаем для интернета соединение с некоторыми портами
4.1. Порт UDP 514 для удалённого приема событий программой журналом событий SYSLOG
4.2. Порты UDP 136 - 140 для протокола SMB который использует файловый сервер SAMBA(nmbd)
Порты TCP 136 - 140 для протокола SMB который использует файловый сервер SAMBA(smbd)
4.3. Порт TCP 901 используется для SWAT(Веб интерфейс для настройки SAMBA)
4.4. Порт TCP 587 Использующийся для почтового сервера SENDMAIL для балансировки нагрузки и ускорения работы сервера.
4.5. Порт TCP 3306 порт на котором работает по умолчанию MYSQL сервер баз данных
4.6. Порт TCP 3000 порт на котором работает по умолчанию DRWEB MONITOR
4.7. Порт TCP 3000 порт на котором работает по умолчанию DRWEB MAIL CHECKER
4.8. Порт TCP 110 порт для протокола POP3 принятие почты клиентами, Делаем его доступным только для внутренней сети.
5. Разрешаем из протокола ICMP только пинговать и получать ответы на пинги.
6. Разрешаем хождение трафика по локальному интерфейсу (lo0)
7. Разрешаем доступ к SSH серверу только из сети 195.216.172.0/24 для всех остальных запрещаем
8. TCP порт 53 используется для DNS серверов при передачи зоны с PRIMRY DNS SERVER SECONDARY DNS SERVER для всех остальных запрещаем.
UDP порт 53 для запросов на преобразования доменного имени в IP-адрес DNS сервером
9. Следующий блок правил относится к WEB-Server который работает по протоколам HTTP(порт 80) и HTTPS(порт 443) а также с последующей защитой его от разного рода атак путем разрешений определенного набора флагов в TCP заголовке которые в свою очередь допускают только правильную установку связи с сервером последующем этапом передачи данных и конечной фазой раз соединение.
В последующем описании PF-Filtra эти наборы будут заменены на более рациональное решение. TCP SYN Proxy: Обычно, когда клиент устанавливает соединение с сервером вне сети, pf передает пакеты [22]установления связи между клиентом и сервером по10.Как известно у FTP есть два режима работы пассивный и активный, в пассивном режиме связь устанавливается по 21 порту а потом переводится на порт выше чем 1024,в активном режиме авторизация и команды для сервера идут по порту 21 но как только начинается передача данных то сразу открывается порт 20. Тут также присутствует набор допустимых TCP флагов для большей безопасности.
11. Для пиринговой системы под названием E-Mule открываем порт и потом перекидываем его во внутреннюю сеть.
12. Порты Почтовой системы
25 Порт главный порт почтового сервера через который осуществляется пере ссылка писем между серверами. Также защищен комбинацией флагов TCP заголовка.
465 Порт на нем работает программа STUNNEL обеспечивающая перевод соединения на порт 25(SMTP) локально с шифрованием от внешнего клиента до сервера с портом 465. Также установлена допустимая конфигурация флагов в TCP заголовке
995 Порт на нем работает программа STUNNEL обеспечивающая перевод соединения на порт 110(POP3) локально с шифрованием от внешнего клиента до сервера с портом 465. Также установлена допустимая конфигурация флагов в TCP заголовке.
13. Разрешаем вход UDP пакетов для DNS запросов с DNS сервера 80.80.80.53 порта 53 на наш внутренний интерфейс. Зачем нам запросы на внешний DNS ведь у нас есть свой собственный, Не хорошо загружать наш DNS сервер когда это мог бы сделать DNS сервер провайдера тем более это входит в предоставляемые услуги нашим провайдером.
14
14.1.Разрешает выход любого трафика в интернет через внешний интерфейс (xl0).
14.2 Последние строчки особенно важны потому что с их помощью мы закрываем все что не нужно. По протоколу TCP не пропускаем любые пакеты с флагом SYN которые служат для установки соединения но если б мы не поставили этого флага то любые ответы пришедшие обратно не попавшие под вышестоящие правила были бы заблокированы, касается это в первую очередь ретрансляции ведь тогда все ответы которые должны были бы пройти через ретранслятор для внутренней сети были бы заблокированы. Хотя почтовый и веб и ftp сервера были бы доступны из интернета.
Так как udp только используется для DNS который мы разрешили выше мы закрываем весь доступ по протоколу udp.
15.Создает Динамическое правило разрешающее хождению трафика в внутренней сети на интерфейсе xl1. Динамическое правило применено для того чтобы внутренний трафик сети не проходил проверку всех правил FIREWALL и за счёт этого выигрываем во времени.
Итоги
Давайте подведем итоги и сведём все особенности и характеристики в одну таблицу для более наглядного представления. В таблице мы выведем всё то что было описано раньше.
Если в графе стоит x значит такая опция в Пакетном фильтре отсутствует.
Характеристики |
IPFW |
IP-FILTER |
PF-FILTER |
Фильтрация по портам и IP-адресам |
Есть |
Есть |
Есть |
Фильтрация по протоколам определённых в файле /etc/protocols |
Есть |
Есть |
Есть |
Фильтрация по опциям установленных в IP заголовке |
ipoptions ssrr |
with opt ssrr |
По умолчанию pf блокирует пакеты с установленными опциями IP или pass in quick on fxp0 all allow-opts Но при использовании scrub опции пакеты с IP-опциями допускаются и нормализуются. |
Фильтрация по опциям установленных в TCP заголовке |
Tcpoptions mss |
Нету |
В Pf фильтре не используется фильтрация по TCP опциям так как там предусмотрена другая идея под названием Нормализация Scrub |
Фильтрация по установленным флагам в TCP заголовке |
tcpflags syn,fin,!ack, |
flags S автоматически будет заменено на flags S/SAFRUP |
flags S такая комбинация не допустима и в место ней надо обязательно указывать flags S/SA |
Логирование или занесение в лог файл информации о пакете |
В файле /var/log/security заносится информация о совпавшем правиле при условии если в правиле стоит log. Заносится полная информация с адресом источника и адресом назначения |
В файл /var/log/ipf.today Есть список всех правил содержащих слово log и ведется просто подсчёт сколько пакетов попало под это правило.Для более расширенной информации надо запустить ipmon -sD и в правиле поставить log level local3.info что означает логировать через SYSLOG Facility local3 level info |
Строчкой/sbin/pflogd -f /var/log/pflogll мы запускаем демон который ведёт логирование В файл по /var/log/pflogll Для просмотра tcpdump -n -e -ttt -r /var/log/pflog Опция в правилах для логирования log-all или log. |
Характеристики |
IPFW |
IP-FILTER |
PF-FILTER |
Логирование через демона системных журналов SYSLOG |
НЕТУ |
ЕСТЬ |
ЕСТЬ но посторонним программным обеспечением. |
Создание динамических правил |
Keep-state |
Keep state |
Keep state |
Ограничение количество соединений с одного или более IP адресов |
В IPFW этого нету но есть дополнение под именем IPFW2 |
НЕТУ |
В разрешающем правиле указываем (max 10) |
Управлением временем задержки для TCP соединений |
В IPFW этого нету но есть дополнение под именем IPFW2 |
НЕТУ |
В разрешающем правиле указываем (tcp.finwait 5 tcp.opening 10 tcp.established 30 tcp.closing 20) |
Принудительное Перенаправление пакета то есть маршрутизация правилами |
В место allow или deny указываем fwd |
НЕТУ |
НЕТУ |
Ограничение затрачиваемой памяти |
Через sysctl переменные в UNIX системах |
Через sysctl переменные в UNIX системах |
Через sysctl переменные в UNIX системах и через правила set limit |
Проксирование соединения. установить связь с клиентом, инициирует установление связи с сервером и затем соединит клиента и сервер. |
НЕТУ |
НЕТУ |
synproxy state |
Нормализация трафика к примеру сбор фрагментированных пакетов |
НЕТУ |
НЕТУ |
Опция SCRUB |
Характеристики |
IPFW |
IP-FILTER |
PF-FILTER |
Ответ на блокируемый пакет |
Reject для UDP пакетов RESET для TCP пакетов Нет возможности не других ответов на блокируемые пакеты |
return-icmp(host-unr) для UDP return-rst для TCP пакетов Есть возможность ответа другими пакетами |
return-icmp(host-unr) для UDP return-rst для TCP пакетов) Есть возможность ответа другими пакетами |
Ретрансляция Адресов(NAT) |
Демон Natd |
Демон ipnat |
С помощью pfctl |
Переброска соединений через NAT |
Опция для natd redirect_address |
Опция для ipnat Bimap |
Опция для pfctl Binat |
Переброска порта через NAT |
Опция для natd redirect_port |
Опция для ipnat rdr |
Опция для pfctl rdr |
Трафик шейпер и организация очередей для проходящих пакетов |
DUMMYNET |
НЕТУ |
ALTQ |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |