Переводится как Blitzed Open Proxy Monitor - мониторинг открытых прокси - защитник IRC-сервера от флуд/спам-ботов, использующих proxy.
С появлением дешевого безлимитного интернета флуд - уже обычное явление. Это способ устранения конкурентов, а если твой IRC-сервер пользуется хоть какой то популярностью, конкуренты у тебя обязательно найдутся (из личного опыта) и будут регулярно флудить твой сервер ботами, в результате чего люди по-просту разбегутся, а если ботов будет очень много, то твой сервер может загнуться. Поэтому BOPM нужен для защиты IRC-сервера/сети от флуд/спам/ddos-ботов, использующих proxy.
Всех ботов вручную не забанишь, поэтому каждый более менее серьзный IRC-сервер имеет в своем арсенале такого защитника сети. Как правило он скрыт от посторонних глаз.
Еще BOPM понадобится для укрощения продвинутых юзеров интеренета, которые обходят любые баны на канале/сервере, используя proxy.

Принцип работы BOPM

Некоторые неприятные моменты:

Установка BOPM

Работаем через SSH клиент в Linux сервере Debian 7 от обычного пользователя.
  1. Переходим в папку, в которую будем устаналивать BOPM:
    cd /home/dim/irc
  2. Скачиваем BOPM:
    wget https://raw.githubusercontent.com/dimst/IRC/master/bopm-3.1.3.tar.gz
  3. Распаковываем скачанный архив:
    tar xf bopm-3.1.3.tar.gz
  4. Для удобства переименовываем распакованную директорию:
    mv bopm-3.1.3 bopm-src
  5. Переходим в папку с исходниками:
    cd bopm-src
  6. Запускаем конфигурацию с указанием папки, куда будет установлен BOPM:
    ./configure --prefix=/home/dim/irc/bopm
  7. Запускаем компиляцию:
    make
  8. Запускаем инсталяцию:
    make install
  9. Переходим в корень папки с установленным BOPM:
    cd ../bopm
  10. Переименовываем дефолтный конфигурационный файл bopm.conf:
    mv etc/bopm.conf etc/bopm.conf-default
  11. Создаём свой файл bopm.conf:
    nano etc/bopm.conf

Настройка BOPM

  1. Редактируем bopm.conf под свой IRC сервер:
    #######################################
    # Конфигурационный файл bopm.conf
    # для BOPM 3.1.3
    # Инструкция по установке и настройке
    # https://dim.st/irc/bopm
    #######################################
    
    #######################################
    # Системные настройки
    #######################################
    
    options
    {
      # укажи верный путь!
      pidfile = "/home/dim/irc/bopm/bopm.pid";
    
      # укажи верный путь!
      scanlog = "/home/dim/irc/bopm/var/scan.log";
    
      dns_fdlimit = 64;
    };
    
    #######################################
    # Основные настройки
    #######################################
    
    IRC
    {
      # ник бота
      nick = "bopm";
    
      # реальное имя
      realname = "Сканер открытых прокси";
    
      # идент бота
      username = "BOPM"; 
    
      # irc-сервер, куда бот подключится
      server = "dreamterra.net";
    
      # порт irc-сервера
      port = 6667;
    
      # оперка - права IRC-операратора: /oper логин пароль
      oper = "ЛОГИН ПАРОЛЬ";
    
      # моды при подключении, которые бот выставит себе
      mode = "+s";
    
      # /away сообщение
      away = "Я бот. Не трогай меня!";
    
      # канал управления и логирования
      channel { name = "#services"; };
    
      # действие по-умолчанию. В данном случае gline на 2 часа по хосту @*
      kline = "GLINE *@%h 2h :Доступ запрещен. Прокси.";
    
      # регулярное выражение, по которому бот отлавливает подключающихся пользователей
      connregex = "\\*\\*\\* Notice -- Client connectin.*: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([^ ]+)\\] .*";
    
      perform = "PROTOCTL HCN";
    };
    
    #######################################
    # ЧЕРНЫЕ ЛИСТЫ
    #######################################
    
    OPM
    {
      blacklist
      {
        # адрес (хост) черного списка, через который
        # бот будет проверять ip адреса подключающихся пользователей
        name = "dnsbl.dronebl.org";
    
        type = "A record reply";
    
        ban_unknown = no;
    
        reply
        {
          2 = "Sample"; 
          3 = "IRC Drone"; 
          4 = "Tor"; 
          5 = "Bottler"; 
          6 = "Unknown spambot or drone";
          7 = "DDOS Drone"; 
          8 = "SOCKS Proxy"; 
          9 = "HTTP Proxy"; 
          10 = "ProxyChain"; 
           255 = "Unknown";
        };
    
        # действие при обнаружении IP пользователя в выше указанном черном списке
        kline = "GLINE *@%h 2h :Доступ запрещен. Прокси.";
      };
    
      blacklist
      {
        name = "dnsbl.proxybl.org";
    
        type = "A record reply";
    
        ban_unknown = no;
    
        reply
        {
          2 = "Open proxy";
        };
    
        kline = "GLINE *@%h 2h :Доступ запрещен. Прокси.";
      };
    
      blacklist
      {
        name = "ircbl.ahbl.org";
    
        type = "A record reply";
    
        ban_unknown = no;
    
        reply
        {
          2 = "Open proxy";
        };
    
        kline = "GLINE *@%h 2h :Доступ запрещен. Прокси.";
      };
    
      blacklist
      {
        name = "tor.dnsbl.sectoor.de";
    
        type = "A record reply";
    
        ban_unknown = no;
    
        reply
        {
          1 = "Tor exit server";
        };
                
        kline = "GLINE *@%h 2h :Доступ запрещен. Прокси.";
      };
    
      blacklist
      {
        name = "rbl.efnet.org";
        
        type = "A record reply";
        
        ban_unknown = no;
    
        reply
        {
          1 = "Open proxy";
          2 = "Trojan spreader";
          3 = "Trojan infected client";
          4 = "TOR exit server";
          5 = "Drones / Flooding";
        };
          
        kline = "GLINE *@%h 2h :Доступ запрещен. Прокси.";
      };
    };
    
    #######################################
    # КАКИЕ МАСКИ НЕ БАНИТЬ ДАЖЕ ЕСЛИ ПРОКСИ (исключения из бана)
    #######################################
    
    exempt
    { 
      mask = "*!*@127.0.0.1";
      mask = "DiM*!*@*";
      mask = "*!*@dim.st";
    };
    
    
    #######################################
  2. В IRC сервере UnrealIRCd в файле unrealircd.conf пропишем права IRC оператора для BOPM:
    oper логин
    {
      from
      {
        userhost *@*;
      };
      password "пароль";
      class clients;
      level global;
      flags
      {
        global;
        can_globalkill;
        can_gkline;
        can_gzline;
        can_kline;
        can_unkline;
      };
      snomask kcfFjveGqSso;
    };
    Если используется оригинальный UnrealIRCd, не русская модификация DalNetRU и т.п., то параметр level global; нужно удалить.
    Если нужно, чтобы бот мониторил только 1 сервер в IRC сети, а не всю сеть и банил локально (kline), а не глобально (gline), то оперка у бота будет такая:
    oper логин
    {
      from
      {
        userhost *@*;
      };
      password "пароль";
      class clients;
      level local;
      flags
      {
        local;
        can_kline;
        can_unkline;
      };
      snomask c;
    };

Запуск BOPM

bin/bopm
В IRC проверяем, появился ли бот в IRC-сети и взял ли он права IRC-оператора. Если нет, смотрим ошибки в логах сервисов /home/dim/irc/bopm/var/bopm.log.

Настройка автозапуска BOPM (crontab)

Crontab через каждый N промежуток времени запускает указанный в его списке файл. В свою очередь в файле скрипт, проверяющий, запущена на ли программа. Если нет - запускает ее.
  1. Переходим в папку с установленным BOPM:
    cd /home/dim/irc/bopm
  2. Копируем файл bopmchk из исходников BOPM'а, дав ему название bopm.cron:
    cp /home/dim/irc/bopm-src/contrib/crontab/bopmchk bopm.cron
  3. Даём файлу bopm.cron права на выполнение:
    chmod +x bopm.cron
  4. Вызываем редактор crontab:
    crontab -e
    вставляем правило:
    */10 * * * * /home/dim/irc/bopm/bopm.cron > /dev/null 2>&1
    Путь до bopm.cron укажите свой. В конце файла обязательно оставляем пустую строку. Данное правило означает, что каждые 10 минут будет выполняться файл bopm.cron.

BOPM пропускает прокси. Что делать?

BOPM не дает никаких гарантий, что не будет пропускать прокси. Черные листы, которые указаны в конфиге работают с открытыми прокси (open proxy), но не забывай, что есть анонимные/платные/свежие прокси, дедики, ломаные компы, поэтому не все ip-адреса перечисленных попали в черные листы и не факт, что попадут.

Аналоги BOPM'a

BOPM - лучший, ничего более достоиного не встречал, но аналоги существуют, а именно: дополнительные модули для NeoStats:
Оба немного кривоваты. blsb можно не ставить, так как с этой функцией отлично справляется BOPM, а с opsb поиграться можно: хотя бы чтобы банил за открытый 3128 порт (самый популярный порт открытых прокси).

BOPM для Windows

Он есть, но мой антивирусник блокирует ссылку. Качайте на свой страх и риск.