====== Блокировка ftp-bruteforce атак пакетным фильтром pf ======

По мотивам 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