Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

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

Саморазвитие и психология


OpenBSD: pf обзор правил


Выключение pf из консоли
pfctl –d

Включение pf из консоли
pfctl -e

Применение правил pf из файла
pfctl –f /etc/pf.conf

Включение pf
/etc/rc.conf.local
pf=YES # enable PF

Включение маршрутизации пакетов из консоли, при перезагрузке отменяется
sysctl net.inet.ip.forwarding=1
sysctl net.inet6.ip6.forwarding=1

Включение маршрутизации пакетов на постоянной основе
/etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Начиная с OpenBSD с 4.1 к правилам по умолчанию применяется опция keep-state 
Для отказа создания ответных, динамических правил, добавьте правилу no state

Общий синтаксис правил
action direction quick on interface inet proto protocol from src_addr to dst_port

1. action: разрешить(pass) или блокировать(block) передачу пакета

2. direction: направление прохождения пакета входящий(in) \ исходящий(out)

3. quick: ключевое слово, пакет совпадающий с правилом применяется немедленно, правило считается последним в цепочке

4. on interface: указать сетевой интерфейс

5. inet: inet - протокол IPv4 \ inet6 - протокол IPv6

6. proto: указание протоколов tcp, udp, icmp, icmp6

7. from src_addr: адрес или сеть - источник пакета

8. to dst_port: порт назначения пакета

Примеры

Разрешаем прохождение ssh
pass in quick on de0 proto tcp to port 22
или так
pass in quick on de0 proto tcp to port ssh

Разрешаем ICMP эхо запросы (keep state - отслеживание соединений)
pass inet proto icmp all icmp-type 8 code 0 keep state
или так 
pass in quick inet proto icmp all icmp-type echoreq

Разрешаем исходящий траффик
pass out

Блокируем все
block all
или по отдельности
block out all
block in all

Просмотреть вю цепочку правил pf
pfctl -vf /etc/pf.conf

Проброс портов
rdr on de0 inet proto tcp to de0 port 3389 -> 192.168.0.69 port 3389

Пример с NAT:

Перемнные
ext_if="de0"
int_if="de1"

set skip on lo0 #пропустить проверку на петле

scrub in all #собираем\нормализуем все части пакета перед отправкой

nat on $ext_if from $int_if:network to any -> $ext_if #Правило NAT
 
block all #запретим все отовсюду

pass on lo0 #разрешить траффик на петле (заменяемо первым правилом - set skip on lo0)

pass in on $int_if from any to any #разрешаем всё из локальной сети
или например так (выборочно по портам)
pass in on $int_if proto tcp from $int_if:network to any port {22,80,110,143}
pass out on $ext_if proto tcp from $ext_if to any port {22,80,110,143}

pass out on $ext_if from $ext_if to any #разрешаем opnbsd доступ во вне

pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh

pass in inet proto icmp all icmp-type echoreq #разрешаем ICMP 
или так например
pass on $ext_if proto icmp from any to any
pass on $int_if proto icmp from any to any

либо немного изменив правила можно применить NAT к IP адресам из файла в начале сделаем так:
table <pf-allow-pc> file "/etc/pf-allow-pc"

Добавляем по одному ip на строку
192.168.0.2
192.168.0.3
192.168.0.4

nat on $ext_if from <pf-allow-pc> to any -> ($ext_if)

 

Пример защиты от DDOS атак

В начале добавим таблицу для преступников
table <brute> persist

Правило блокировки
block in log quick from <brute>

Тут:
max-src-conn - число одновременных соединений, позволенных от одного хоста (в нашем примере 30)
max-src-conn-rate - число новых подключений, позволеных от одного хоста. (в нашем примере 10 соединений за 5 секунд)
overload <brute> - превысивший лимит адрес будет добавлен в таблицу
flush global - по достижению лимита все соединения с ним уничтожаются


pass in on $ext_if proto tcp to $ext_if port 80 flags S/SA keep state (max-src-conn 30, max-src-conn-rate 10/5, overload <brute> flush global)

Посмотреть черный список:
pfctl -t brute -T show

Удалить из черного списка:
pfctl -t brute -T flush

Пример очитки через cron каждые 30 минут
*/30    *       *       *       *       root     pfctl -t brute -T flush

Пример очистки через N количество секунд (в нашем примере 12 часов):
pfctl -t brute -T expire 43200

Очереди и балансировка нагрузки
https://ru.wikipedia.org/wiki/ALTQ


ALTQ это альтернативная платформа организации очередей для BSD.

Есть три планировщика, в настоящий момент поддерживаемые FreeBSD в реализации ALTQ:

CBQ Class Based Queueing. Очереди, присоединенные к интерфейсу, создают дерево. 
Таким образом, у каждой очереди могут быть дальнейшие дочерние очереди. 
У каждой очереди могут быть приоритет и присвоенная пропускная способность. 
Приоритет, главным образом, управляет временем, за которое пакеты будут отосланы, в то время как другие будут ждать своей очереди
За счёт этого регулируется пропускная способность.

PRIQ Priority Queueing. У этих очередей не может быть дочерних очередей. 
Каждой очереди присваивается уникальный приоритет, в пределах от 0 до 15
Пакеты с высшим номером имеют высший приоритет.

HFSC Hierarchical Fair Service Curve. 
В родительской очереди определяется суммарная пропускная способность для всех очередей интерфейса.
Указывается общая пропускная способность, предоставляемая провайдером и не зависящая от скорости сетевого интерфейса.
В дочерней очереди эта директива определяет максимальную скорость передачи информации в битах, которая будет обработана очередью в любой момент

список параметров работы очереди:
default – попавший в эту очередь пакет не проверяется дальше, а немедленно обрабатывается
red – Random Early Detection отбрасывает пакеты, которые могут предположительно перегрузить очередь
ecn – Explicit Congestion Notification – похож на red, но red использует более оптимизированный алгоритм и обработка очередей в red происходит гораздо быстрее

параметр borrow – очередь-потомок может брать свободную пропускную способность очереди-родителя в случае необходимости
параметр priority – приоритет очереди. У CBQ и HFSC значения могут быть от 0 до 7, для PRIQ – от 0 до 15. Значение по умолчанию для всех очередей - 1

#Включение очереди на сетевом интерфейсе в 10 мегабит для списка очередей:
altq on de0 cbq bandwidth 10Mb queue { general, web, post, ssh }

#очередь general берет 10% от нашего 10 мегабит канала
queue general bandwidth 10% cbq(default)

#очередь web берет 30%, имеет двух потомков: webchildone, webchildtwo 
#их механизм определения преждевременной нагрузки - red 
#могут брать полосу пропускания у очереди-родителя - web с помощью параметра borrow
#очередь web имеет приоритет 4, в нашей конфигурации он - наивысший приоритет
#т.к значения выше 4 не определены, соответственно очередь web будет обрабатывать пакеты первой
queue web bandwidth 30% priority 4 cbq(borrow red) { webchildone, webchildtwo }

#очереди-потомки имеют скорости в процентном отношении соответственно 50% и 30%
#проценты вычисляются из общей пропускной способности канала, который назначен родительской очереди - web
queue webchildone bandwidth 30%
queue webchildtwo bandwidth 50% cbq(borrow)

#очередь post берет 5% от общей полосы пропускания, имеет низший приоритет - 0
#ее механизм определения преждевременной нагрузки - ecn 
queue post bandwidth 5% priority 0 cbq(borrow ecn)

#очередь ssh имеет двух потомков: ssh_connect, ssh_data имеющие приоритеты 7 и 0
#когда появится пакет на порт назначения 22, правило поместит его в очередь ssh_connect
#после установления соединения пакет перейдет в очередь ssh_data и будет иметь наивысший приоритет для родительской очереди - ssh
queue ssh bandwidth 20% cbq(borrow) { ssh_connect, ssh_data }
queue ssh_data priority 7
queue ssh_connect priority 0

Правила для очередей

Полный синтаксис правила:
action direction [log] [quick] on interface [af] [proto protocol] from src_addr [port src_port] to dst_addr [port dst_port] [tcp_flags] [state]

Для action
Действие, которое будет применяться к пакету — это pass или block. pass передаст пакет назад к ядру для
дальнейшей обработки , в то время как block будет реагировать в соответствии с block-policy. 
Реакция по умолчанию может быть отменена, определяя или block drop или block return.

block return out on de0 inet all queue general

pass out on de0 inet proto tcp from 192.168.1.0/24 to any port 80 keep state queue webchildone
pass out on de0 inet proto tcp from 192.168.0.0/24 to any port 80 keep state queue webchildtwo

pass out on de0 inet proto tcp from any to any port 22 keep state queue(ssh_connect, ssh_data)

pass out on de0 inet proto tcp from any to any port 25 keep state queue post


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект