LINUX.ORG.RU

Правила для PF

 , ,


0

1

Всем привет!

Впервые работаю с PF на FreeBSD, и вот возникли вопросы..

Немного покурив мануалы, также нашел частично готовый конфиг, который немного изменил и хотел спросить по поводу настройки... Может где-то ошибся, либо что-то стоит убрать/добавить.

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

Вот собственно и сам конфиг:)

ext_if="em0"

## tcp порты использующиеся на сервере
tcp_services="{ 22, 53, 80, 443 }"

## udp порты использующиеся на сервере
udp_services="{ 53, 514 }"

## разрешенные icmp типы запросов
icmp_types="{ echoreq, unreach }"


## траблица спаммеров
table <spammers> persist file "/var/db/pf/spammers" 

## траблица заблокированных за подбор паролей 
table <bruteforce> persist file "/var/db/pf/bruteforce" 


## сбрасываем соединение грубо
set block-policy drop

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

## включаем логирование на интерфейсе
set loginterface $ext_if 

## оптимизация
set optimization normal


## нормализуем все входящие пакеты на всех интерфейсах
scrub in all
scrub on $ext_if all reassemble tcp

## правило для антиспуфинга
antispoof quick for $ext_if

## блокируем вход
block in log all

## блокируем выход
block out log all


## блочим всех кто попался в таблицу <blocked>
block in quick on $ext_if from <spammers> to any

## блочим всех кто попался в таблицу <bruteforce>
block in quick on $ext_if from <bruteforce> to any


## разрешаем с внешки ломится на разрешенные tcp порты
pass in on $ext_if proto tcp from any to $ext_if port $tcp_services flags S/SA keep state

## чистим траф www от SYN flood
pass in on $ext_if proto tcp from any to $ext_if port www flags S/SA synproxy state

## www режим тех кто превысил лимиты и ложим в таблицу 
pass in on $ext_if proto tcp to $ext_if port www flags S/SA keep state \(max-src-conn 60, max-src-conn-rate 15/5, overload <spammers> flush)

## ftp режим тех кто превысил лимиты и ложим в таблицу
pass in on $ext_if proto tcp to $ext_if port ftp flags S/SA keep state \( max-src-conn 400, max-src-conn-rate 400/2, overload <spammers> flush)

## ssh режим тех кто превысил лимиты и ложим в таблицу
pass quick proto { tcp, udp } from any to any port ssh keep state (max-src-conn 50, max-src-conn-rate 8/60, overload <bruteforce> flush global)

## пропускаем udp на разрешенные порты
pass in on $ext_if proto udp from any to $ext_if port $udp_services keep state

## разрешаем только некоторые типы icmp
pass in on $ext_if inet proto icmp all icmp-type $icmp_types keep state

## разрешаем порты выше 49151 для passive FTP mode
pass in quick on $ext_if proto tcp from any to any port 49151 keep state

## разрешаем все модуляции для исходящих tcp соединений 
pass out on $ext_if proto tcp all modulate state flags S/SA

## разрешаем исходящие протоколы
pass out on $ext_if proto { tcp, udp, icmp } all keep state

Может где-то ошибся, либо что-то стоит убрать/добавить.

Каков статус ipv6? Если надо тотально запретить, я бы добавил в конец

block drop inet6 all
и, для удобства отладки, добавил бы inet перед всеми словами proto.

Не знаю, какая там сейчас версия PF во FreeBSD, но keep state уже давно в OpenBSD PF по умолчанию, а потому можно явно это не писать.

cryptos ()
Ответ на: комментарий от cryptos

Вот у меня появилась проблема, что при включении PF, когда подключаюсь по 80 порту (допустим на сайт захожу), то сразу попадаю в бан.. хотя всего лишь смотрел phpinfo

devil0704 ()
Ответ на: комментарий от devil0704

Почему в конфиге только один интерфейс? Так должно быть? Одна сетевая карта обслуживает как локалку, так и внешнюю сеть? Конфиг надо строить с самого простого и постепенно усложнять его, проверяя на каждом шаге работоспособность. Перед тем, как задавать вопросы, надо предоставить блок-схему сети и описать задачи, которые она должна решать. Реверсить конфиг на предмет «что же хотел добиться юзер» неинтересно.

Я бы включил pflog и запустил

# tcpdump -i pflog0 -n -e -tttt
и смотрел в реальном времени, какие пакеты блокируются. pfctl -vvsr пишет, сколько пакетов прошло через каждое из правил pf. Ещё
# pftop -vrules -s1
позволяет наблюдать эту статистику в реальном времени.

cryptos ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.