По мотивам http://www.opennet.ru/tips/info/2140.shtml
/etc/pf/pf.conf
if="fxp0" # файловая таблица для хранения забаненых адресов table <intruder-ftp> persist file "/etc/pf/intruder-ftp.lst" block in log block return-rst in log proto tcp # запрещение доступа адресов нарушителей к ftp-серверу block in quick on $if proto TCP from <intruder-ftp> to any port ftp pass out pass in quick inet proto icmp all icmp-type echoreq code 0 # Определяем адреса, с которых было более 5 коннектов за 40 секунд и заносим их в таблицу блокировки pass in quick on $iface proto tcp to ($if) port ftp keep state (max-src-conn-rate 5/40, overload <intruder-ftp> flush global) # разрешаем коннект к ftp в active и passive pass in quick on $iface proto tcp to ($if) port { ftp, >49152 }
Создаем пустую таблицу:
echo > /etc/pf/intruder-ftp.lst
Сбрасываем таблицу интрудерских адресов в файл каждый час:
crontab -e
/var/cron/tabs/root
#minute (0-59), #| hour (0-23), #| | day of the month (1-31), #| | | month of the year (1-12), #| | | | day of the week (0-6 with 0=Sunday). #| | | | | commands # # _intrud_ftp table update */60 * * * * /sbin/pfctl -t intruder-ftp -Ts > /etc/pf/intruder-ftp.lst
Перечитываем конфигурацию pf:
pfctl -f /etc/pf/pf.conf
Загрузка таблиц, определенных в файле конфигурации:
pfctl -Tl -f /etc/pf/pf.conf
Добавление адреса в таблицу:
pfctl -t intruder-ftp -Ta 1.1.1.1
Удаление адреса из таблицы:
pfctl -t intruder-ftp -Td 1.1.1.1
Полная очистка таблицы:
pfctl -t intruder-ftp -Tf
Выгрузка таблицы в файл:
pfctl -t intruder-ftp -Ts > /etc/pf/intruder-ftp.lst
Просмотр таблицы:
pfctl -t intruder-ftp -Ts
Просмотр статистики:
pfctl -t intruder-ftp -Ts -v
Сброс статистики:
pfctl -t intruder-ftp -Tz