Perl: как избавиться от Wide character in print

Как известно, при запуске программы на Perl автоматически открываются 3 файловых дескриптора: STDIN, STDOUT и STDERR. По умолчанию они не используют кодировку utf8, поэтому print вполне может выдавать вот такой вот warning при выводе кириллических символов:

Wide character in print at line …

Ничего страшного в этом нет, но такие предупреждения засоряют вывод и раздражают меня. Лечится это довольно просто, например, привязкой режима utf8 к уже открытому файловому дескриптору в начале программы:

binmode(STDOUT,’:utf8′);

Но есть и более элегантное решение. Можно прописать в самом начале программы флаг, который скажет интерпретатору Perl открывать файловые декрипторы при запуске программы сразу в utf8, примерно так:

#!/usr/bin/perl -CS

И больше никаких манипуляций с binmode не потребуется

Xfce, screen lock и смена раскладок клавиатуры

Есть у меня одна многолетняя привычка — лочить консоль, если я куда-то отхожу от компьютера. Потом консоль можно разлочить, но вот в xfce обнаружилось одно маленькое неудобство, мешающее работать. Скрин локер в xfce не показывает текущую раскладку клавиатуры, поэтому промахнуться с раскладкой клавиатуры при наборе пароля — как два байта переслать. А при ошибке ввода пароля предстоит ужасно раздражающее 30-секундное ожидание, которое в некоторых ситуациях просто бесит.

И раз нельзя вывести текущую раскладку клавиатуры на скрин локер, то можно попытаться ее сбрасывать в известную раскладку при его запуске. В общем, проблему можно решить следующим образом:

  • Установить xkb-switch
  • Написать скрипт-обертку, подменяющий стандартный скрин локер:
  • > cat /usr/local/bin/xflock4
    #!/bin/bash
    /usr/local/bin/xkb-switch -s us
    /usr/bin/xflock4
    

    И все, проблема решена. При локе экрана теперь всегда пароль будет набираться в английской раскладке клавиатуры.

    OpenSuSe 13.1, ноутбук с видеокартой Nvidia и старые игры в wine

    Так получилось, что ранее я ругал карты ATI Radeon здесь, тут и там. И для разнообразия у меня появился ноутбук Lenovo Z560 с карточкой Nvidia на борту. Пропиетарные дрова с сайта Nvidia ставятся без проблем, все работает хорошо — за исключением одного маленького нюанса.

    Почему-то разработчики драйверов перешли на новую версию протокола randr, и теперь в системе для экрана ноутбука определяется только одно единственное разрешение экрана:

    > xrandr -q
    Screen 0: minimum 8 x 8, current 1366 x 768, maximum 8192 x 8192
    VGA-0 disconnected (normal left inverted right x axis y axis)
    LVDS-0 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
       1366x768       60.0*+   50.0  
    HDMI-0 disconnected (normal left inverted right x axis y axis)
    

    В старой версии протокола разрешений экрана можно было получить гораздо больше:

    > xrandr --q1
     SZ:    Pixels          Physical       Refresh
    *0   1366 x 768    ( 340mm x 191mm )  *50   51  
     1   1280 x 720    ( 318mm x 179mm )   52  
     2   1024 x 768    ( 254mm x 191mm )   53  
     3    800 x 600    ( 199mm x 149mm )   54  
     4    640 x 480    ( 159mm x 119mm )   55  
    Current rotation - normal
    Current reflection - none
    Rotations possible - normal left inverted right 
    Reflections possible - X Axis Y Axis
    

    Если надо кодить, или править документ какой-нибудь, то проблемы это не вызывает. Но если решил порубиться в старую игрушку с древним разрешением экрана (например, 640×480), то игра вполне себе может ругаться на разрешение экрана. Например, у меня fallout не запускался, и появлялось сообщение Error initializing video mode 640×480, и в консоли при этом был виден текст ошибки такого вот содержания:

    err:x11settings:X11DRV_ChangeDisplaySettingsEx No matching mode found 640x480x8 @0! (XRandR 1.2)

    Оказывается, проблему победить можно. Надо лишь наваять 2 скрипта и поместить их куда-нибудь в пути. Первый скрипт позволяет менять разрешение экрана из командной строки:

    > cat setres.sh
    #!/bin/bash
    RESOLUTION=$1
    nvidia-settings --assign CurrentMetaMode="LVDS-0: nvidia-auto-select @$RESOLUTION +0 +0 {ViewPortIn=$RESOLUTION, ViewPortOut=$RESOLUTION}"
    

    Второй скрипт собственно меняет разрешение экрана на правильное, запускает fallout в десктопе со «правильным» разрешением экрана, ну и возвращает настройки разрешения обратно по завершении игры:

    > cat fallout1.sh
    #!/bin/sh
    cd /home/username/.wine/drive_c/Program Files/GOG.com/Fallout
    /usr/local/bin/setres.sh 640x480
    wine explorer /desktop=foo,640x480 falloutw.exe
    /usr/local/bin/setres.sh 1366x768
    cd $HOME
    

    Смена разрешения на 640×480 — необязательный шаг, и если его не сделать, можно играть в оконном режиме. А вот для полноэкранного режима без смены разрешения не обойтись.

    Про письма счастья и личный кабинет налогоплательщика. Подробная инструкция о том, как не надо делать сервис для людей.

    Намедни получил письмо счастья от горячо любимых налоговых органов с налогами на имущество и транспортное средство. И на обратной стороне конверта узрел я дивный текст о том, что оплачивать налоговые платежи теперь можно в личном кабинете налогоплательщика через интернет.

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

    Так получилось, что рядом с домом у нас есть офис налоговой, который относится к другому району. А офис нашей налоговой находится дальше раз в 20. Покумекав немного, я решил пойти в ближайшую налоговую в гости, благо при регистрации было четко сказано — пароль в личный кабинет можно получить в любом отделении ФНС (кроме некоторых). Зашел туда, и там случился фейл номер 2 — оказывается, у налоговых органов нет единой базы, и им пришлось вручную вбивать мою заявку на доступ в личный кабинет. Что в общем-то вызвала некую бурю относительно праведного гнева со стороны местных сотрудников ФНС. Но с горем пополам они все же доступ мне сделали.

    Окрыленный успехом, я добежал до компьютера и залогинился в личный кабинет. Но не тут-то было — он оказался ПУСТОЙ, с нулем ценной для меня информации. Личный кабинет формируется в течение 3-х РАБОЧИХ дней, и судя по скорости внесения данных туда, они попадают в личный кабинет путем ручного вноса доблестных сотрудников ФНС.

    Надо отдать им должное, в течение заявленного срока информация в личном кабинете появилась, и я узнал, сколько я должен родному государству. Сумма была точна, тут претензий нет. И я уж грешным делом подумал — неужели счастье-то наступило? Дай-ка я заплачу все онлайн, но… Третий, и самый ужасный фейл заключается вот в чем.

    Онлайн оплата налогов в настоящий момент лишь обладателям счетов в одном из 15 банков, среди которых я знаю только Сбер. Но так как с филиалом ада на земле я сотрудничать отказался, и этот чудный инструмент по онлайн оплате налогов для меня оказался БЕСПОЛЕЗЕН.

    Еще один непонятный момент мне не понравился. Оказывается, мне нельзя заплатить налоги за супругу или за кого-то еще. Этот запрет явным образом прописан в личном кабинете (в виде вот такого текста): «При списании денежных средств с Вашего счета в банке в уплату налогов, сборов за других физических лиц их обязанность не будет признана исполненной!». Просто все для людей сделано, и для их удобства — просто нет слов.

    Других столь бездарно сделанных личных кабинетов я больше не видел нигде.

    Переезд на новый VDS

    Вот уже 7-й год я пользуюсь услугами FirstVDS, и я впервые написал об этом в статье Лучший хостинг в своем классе еще в 2008 году. С тех пор многое изменилось, и некоторые изменения пошли в лучшую сторону.

    Недавно у них появились уж очень вкусные тарифы, которые по ценам приблизились к европейским; но старым клиентам на FreeBSD 6 эти тарифы были недоступны и для того, чтобы воспользоваться новыми тарифами, пришлось заказать новый VDS, перенести сайты и отказаться от старого.

    Первые впечатления были резко отрицательными, т. к. панель управления ISP Manager 5 очень и очень сырая. Импорта пользователей и сайтов из ISP Manager 4 не предусмотрено, настроить что-либо без глюков в нем проблематично. Но с другой стороны, они не навязывают использование этой панели. В общем, я наваял пару-тройку скриптов по добавлению новых доменов в apache, nginx и в bind — скриптами это делать быстрее, надежнее и лучше.

    Вторая неприятность — IP адрес VDS на московской площадке определяется в базе GeoIP как бельгийский, и в результате чего мой сервис Просмотр сайтов с московского IP-адреса (Proxy View) стал показывать сайты так, как будто вы находитесь в Брюсселе, а не в Москве. Я приношу искренние извинения всем, кто пользовался моим сервисом — но тут я ничего не могу поделать. Возможно когда-нибудь в Maxmind одумаются и изменят запись для моего айпишника; но пока сервис работает как есть и показывает бельгийскую выдачу поисковиков — может, кому-то и пригодится.

    Еще одна претензия к FirstVDS — это скорость реакции техподдержки на сообщения о проблемах с их стороны. При заведении нового VDS мой айпишник не сразу прописался в их базах маршрутизации, поэтому VDS не был доступен. Проблему они решили достаточно быстро — в тот же день, но сам факт возникновения таких ошибок не по моей вине немного настораживает. Хотя их тоже можно понять, в бесплатные запросы техподдержки наверняка валится множество сообщений и они их просматривают в порядке очереди с низким приоритетом.

    Во всех остальных отношениях меня полностью устраивает их хостинг, а особенно — партнерская программа и программа лояльности.

    Вышла OpenSuSe 13.1

    Логотип OpenSuSe

    И вот черт меня дернул попробовать совсем уж новый дистрибутив. Обычно я не ставлю первые версии дистрибувов, т. к. они скорее всего будут сырыми и необкатанными, но в этот раз что-то меня переклинило и я поставил OpenSuSe 13.1 x86_64.

    В Gnome 3 работать невозможно, но об этой проблеме известно уже давно. Все их увещевания о том, что новый дизайн гнома является совершенством — мне очень напоминает историю про Windows 8 и кнопку «Пуск». Но в отличие от Microsoft, разработчикам Gnome было начхать на мнение пользователей, и к стилю проверенного временем Gnome 2 они возвращаться не хотят. Ну что ж, такова жизнь — прощай, Gnome 3.

    От KDE 4 я тоже не в восторге, уж больно он тяжелый. В OpenSuSe 12.2 я пару дней потратил на то, чтобы его допилить до удобного мне вида, но в этот раз даже заморачиваться не стал и решил поставить что-то другое. IceWM конечно очень легкий, но уж слишком он убого выглядит. Поэтому в этот раз в качестве оконного менеджера я выбрал Xfce, и в общем, остался доволен.

    Самое первое, что надо сделать — это поставить пропиетарные дрова на видеокарты ATI Radeon. К великому сожалению, опенсорсный аналог для этого драйвера не умеет пробуждаться после перехода в спящий режим. И тут дело даже не в дистрибутиве, дело в самом драйвере. С похожей проблемой столкнулись и убунтоводы с Хабра.

    Мне очень не понравилась настройка раскладок клавиатуры. Как ее не настравивай, после перезагрузки системы настройки слетали нафиг, и язык оставался только тот, что стоял по умолчанию. Проблему удалось решить вот как. Ставится пакет fsKbsettings вот отсюда, создаются для каждого пользователя директории /home/username/.config/autostart и с помощью этой утилиты под индивидуальные нужды легко и непринужденно настраивается раскладка клавиатуры.

    Вторая серьезная проблема — скайп сразу не заработал. Версия, скачанная с skype.com для SuSe, была 32-битной, и предназначалась для OpenSuSe 12.1. Она без проблем ставилась на 12.2, но отказывалась устанавливаться на 13.1, и выглядело это так:

    # rpm -ivh skype-4.2.0.11-suse.i586.rpm
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:skype-4.2.0.11-suse121           ################################# [100%]
    error: unpacking of archive failed on file /usr/bin/skype;528dc292: cpio: read failed - No such file or directory
    error: skype-4.2.0.11-suse121.i586: install failed
    

    Но если скачать версию dynamic, раскидать иконки, звуки, аватарки и файлы lang в /usr/share/skype — скайп запускается, но голосовые звонки в нем не работают. Да и звук вообще не работает, тут требуется кое-что допилить.

    Во-первых, эта версия skype не там ищет некоторые библиотеки. Я сделал симлинк на новую директорию со старым названием:

    # ln -s /usr/lib/alsa-lib /usr/lib64/alsa-lib
    

    Во-вторых, в свете последних изменений в коде PulseAudio, надо задавать некоторые переменные среды, чтобы скайп корректно заработал со звуком. В результате чего родился вот такой скрипт запуска скайпа:

    $ cat start_skype.sh
    #!/bin/sh                                                                         
    PULSE_LATENCY_MSEC=60 /usr/local/bin/skype

    Вот теперь скайп работает так, как и ожидалось.

    Но в целом, дистрибутив мне понравился. Косяки со скайпом — это скорее проблема Microsoft, которая не успевает релизить свои версии программ под новые дистрибутивы.

    И тем не менее, мораль сей басни такова. Если не хотите стать добровольным бета-тестером, никогда не ставьте дистрибутивы первых версий. Времени на допиливание уйдет довльно много, и далеко не факт, что все заработает как надо.

    Просмотр RTMP-потока на телевизорах Samsung

    Мой телевизор Samsung UE46C5000QW не умеет просматривать видео, транслируемое в UDP или в RTMP. Зато он умеет смотреть фильмы по сети с использованием DLNA, поэтому я решил попробовать настроить связку телевизора UE46C5000QW и роутера D-Link DIR 300 Rev b для просмотра IPTV без использования компьютера — это не так уж и сложно.

    Родная прошивка DIR 300 вполне справлялась с UDP потоками, но преобразовать UDP поток в DLNA-совместимый HTTP поток ей не по зубам. Пришлось сменить прошивку роутера на DD-WRT v24-sp2 (build 14896). Прошивка хороша тем, что под нее можно собирать много линуксовых приложений, загружать их при необходимости и использовать по прямому назначению. Под прошивку были найдены udpxy (преобразователь udp потока в tcp), и upnpd — маленький демон, который публикует плейлисты в DLNA-совместимом формате. Информации о том, как это можно сделать, в сети навалом; так же как и сборок этих приложений под большинство роутеров, работающих под DD WRT или OpenWRT.

    Все бы хорошо, но вот потоки RTMP по-прежнему смотреть на телевизоре было невозможно. Для преобразования RTMP в HTTP был давным-давно написан пакет rtmpdump, в составе которого есть маленький прокси — rtmpgw, который в теории должен справляться с задачей.

    Но тут есть три проблемы. Во-первых, чистый rtmpgw не добавляет правильные заголовки в http-поток, в результате чего телевизор разрывает соединение и ругается на неподдерживаемый формат файла (даже если видео и аудио кодеки абсолютно точно поддерживаются им). Любой расово правильный медиаплеер (mplayer, vlc) показывают такие потоки, но не телевизоры Samsung.

    Во вторых, из-за одной довольно криво написанной функции оригинальный rtmpgw очень нехило кушает CPU, что не есть хорошо.

    В-третьих, я так и не нашел готовой сборки rtmpgw для dd-wrt своего роутера. Поэтому пришлось качать исходники, ковыряться в исходном коде и собирать свой вариант rtmpgw. И в результате у меня получился вот такой бинарник rtmpgw (mipsel, не путать с mips — он не совместим) — качайте на здоровье и можете ставить его в свой роутер.

    Использовать его можно примерно так. На роутере сохраняются команды, выполняемые при каждой загрузке:

    cd /tmp
    wget http://www.bloged.org/downloads/rtmpgw
    chmod +x rtmpgw
    /tmp/rtmpgw --buffer 120000 -v -g 8082 -D 192.168.1.1 >/dev/null 2>/dev/null &

    где 192.168.1.1 — внутренний IP роутера

    Если запуск прошел успешно, то по адресу http://192.168.1.1:8082 будет транслироваться RTMP поток, который можно передать в качестве параметра. Проверить работоспособность можно из локальной сети за роутером:

    vlc "http://192.168.1.1:8082/?r=rtmp:%2F%2Fvipwowza.yacast.net%2Ffrance24_live_en&s=http:%2F%2Fwww.france24.com%2Fen%2Fsites%2Fall%2Fmodules%2Fmaison%2Faef_player%2Fflash%2Fplayer_new.swf&t=rtmp:%2F%2Fvipwowza.yacast.net%2Ffrance24_live_en&p=http:%2F%2Fwww.france24.com&y=f24_liveen.stream"

    VLC покажет англоязычную трансляцию France 24, если мой бинарник совместим с вашей прошивкой и вы все сделали правильно. К сожалению, транслировать такое в телевизор Cамсунг не получится — конкретно в этом потоке он не поймет кодеки (по крайней мере мой телевизор ругается на них). Тут нужен транскодинг, но это уже совсем другая тема для разговора.

    Остальные каналы, которые я нашел с кодеками H264 – MPEG-4 AVC / Mpeg Audio Layer (mpga), транслируются без проблем.

    Заметил одну особенность в некоторых трансляциях. Часть из них транслируются нормально, у другой части наблюдается прогрессирующее отставание звука от картинки на телевизорах Samsung. Убогий самсунговский плеер почему-то не может синхронизировать видео и звук при длительной работе на таких потоках. Причем если поток сохранить в файл и открыть его через DLNA, отставания нет даже в телевизоре; оно наблюдается только при онлайн трансляции. А в vlc или mplayer такая проблема не наблюдается вообще, они умеют синхронизировать картинку со звуком, даже если в потоке есть потери фреймов.

    OpenSuse и интернет через Bluetooth

    Nokia E5

    Я уже писал про использование телефона Nokia E5 в качестве модема, и даже приводил настройки интернета для черногорского оператора M-tel. Все это работает отлично, если бы не одно НО. Длинна USB кабеля для Nokia E5 меньше 10 сантиметров, и уж очень неудобно его крепить к ноутбуку. Телефон постоянно свешивается, дергается; связь может теряться в зоне неуверенного приема. И я решил попробовать использовать телефон в качестве модема при соединении через Bluetooth.

    Оказалось, все делается очень просто. Сначала надо сделать так, чтобы телефон и ноутбук снюхались по Bluetooth. Это делается очень просто — на телефоне разрешается соединение Bluetooth для всех, и с помощью апплета gnome-bluetooth находится телефон среди доступных. Далее следует обмен пин-кодами и вуаля, две железки снюхались.

    Затем надо посмотреть, какой канал модема используется в телефоне. Ищем адрес телефона:

    notebook:~ # hcitool scan
    Scanning ...
            04:A8:2A:93:CE:48       Nokia E5
    

    Далее выясняем номер канала модема:

    # sdptool browse 04:A8:2A:93:CE:48
    …
    Service Name: Dial-Up Networking
    Service RecHandle: 0x10009
    Service Class ID List:
      "Dialup Networking" (0x1103)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 5
    Language Base Attr List:
      code_ISO639: 0x454e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "Dialup Networking" (0x1103)
        Version: 0x0100
    …
    

    В моем случае это Channel 5. Теперь надо настроить модем:

    # cat /etc/bluetooth/rfcomm.conf
    #
    # RFCOMM configuration file.
    #
    
    rfcomm0 {
            # Automatically bind the device at startup
            bind yes;
    
            # Bluetooth address of the device
            device 04:A8:2A:93:CE:48;
    
            # RFCOMM channel for the connection
            channel 5;
    
            # Description of the connection
            comment "Nokia E5 Bluetooth Modem";
    }
    

    Номер канала в настройках модема должен совпадать с номером обнаруженного канала, иначе модем работать не будет. После этого надо создать конфигурационный файл для «звонилки». Привожу свой конфиг для черногорского оператора T-mobile:

    # cat /etc/wvdial.conf
    [Dialer Defaults]
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    Init3 = AT+CGDCONT=1,"IP","tmcg-wnw"
    Modem = /dev/rfcomm0
    Phone = *99#
    Idle Seconds = 30000
    Modem Type = USB Modem
    Stupid Mode = 1
    Compuserve = 0
    Baud = 460800
    Auto DNS = on
    New PPPD = Yes
    Dial Command = ATDT
    Ask Password = 0
    ISDN = 0
    Password = 38167
    Username = 38167
    

    Ну и последний скрипт запуска «звонилки»:

    # cat start_internet_via_bluetooth.sh
    #!/bin/sh
    rfcomm release 0 # разрываем текущую связь устройства с модемом
    rfcomm bind 0 04:A8:2A:93:CE:48 5  # привязываем модем телефона на 5-м канале к устройству rfcomm0
    wvdial # набираем номер и подключаемся к интернету
    

    Вот теперь телефону не обязательно находиться рядом с ноутбуком. Его можно держать, например, на балконе (где уровень сигнала выше чем в помещении). Главное, чтобы ноутбук видел телефон, а телефон видел сеть. Скорости передачи данных более чем достаточно для голосовой связи по SIP или Skype.

    Про уродов и людей: как защититься от UDP флуда.

    Fail2ban очень хорош для блокирования нежелательных TCP-соединений, но для блокирования UDP флуда его применять нельзя. Дело в том, что протокол UDP не подразумевает проверки подлинности IP адреса отправителя, и очень часто его подделывают чужими адресами. Известны случаи, когда fail2ban блокировал по айпишнику вышестоящий роутер, и соединение с интернетом на сервере пропадало, поэтому просто так перекрывать трафик не стоит.

    Обычно флудят UDP сервера, которые отвечают на запросы и шлют ответы на подделанный IP адрес отправителя, усиливая атаку на жертву. И самый распространенный вариант атаки — это атака на DNS-сервера.

    Самый простой, но не самый правильный способ борьбы с UDP флудом — ограничить число принимаемых или отравляемых пакетов UDP в секунду с помощью iptables, примерно так:

    iptables -A INPUT -p UDP -m pkttype --pkt-type broadcast -j DROP
    iptables -A INPUT -p UDP -m limit --limit 3/s -j ACCEPT
    

    Этот способ работает надежно, но довольно грубо. Если мы говорим про флуд DNS-сервера, то указанный способ ограничит и легитимные запросы к моим доменам, и флуд на левые доменные имена. А правильный способ борьбы с флудом DNS выглядит так.

    1. Обновить bind до версии 9.9.3 (или до 9.9.2 с патчем для rate-limit)

    2. Запретить рекурсию для всех доменов и ограничить число ответов в секунду для «левых» доменов и для своих:

      options {
            recursion no;
            allow-query { none; };
            rate-limit {
                responses-per-second 10;
                errors-per-second 1;
                window 5;
            };
      };
    

    2. Для каждого домена в зону прописать allow-query { any; } :

    zone "mydomain.com"
    {
        type master;
        file "/path/to/file/mydomain.com";
        allow-query { any; };
    };
    

    Теперь ограничение стало более интеллектуальным, на правомерные запросы о моих доменах bind будет слать не более 10 ответов в секунду; а на запросы о левых доменах — максимум 1 запрос в секунду. С цифрами в настройках можно поиграться, и добиться желаемого результата.

    Логи bind в случае атаки будут выглядеть примерно так:

    Jul 18 17:30:54 named[24256]: client 188.40.25.2#34598 (help-u.ru): query (cache) 'help-u.ru/A/IN' denied
    Jul 18 17:30:54 named[24256]: client 188.40.25.2#37411 (ns.help-u.ru): query (cache) 'ns.help-u.ru/AAAA/IN' denied
    Jul 18 17:30:54 named[24256]: limit REFUSED responses to 188.40.25.0/24
    Jul 18 17:31:35 named[24256]: client 49.128.63.42#29236 (help-u.ru): query (cache) 'help-u.ru/MX/IN' denied
    Jul 18 17:32:02 named[24256]: stop limiting error responses to 188.40.25.0/24
    

    Т.е. если флудер обнаглел и шлет запросы слишком часто, сервер на какое-то время ограничивает число ответов на айпишк, с которого пришел запрос.

    Про уродов и людей: как защититься от подбора паролей по ssh.

    Сначала меня забавляли нелепые попытки подобрать пароли по ssh на некоторые мои сервера. Возможность зайти сразу под root у меня отключена (PermitRootLogin no в /etc/ssh/sshd_config), да и имя пользователя, которому разрешен su, тоже никто не знает. Но когда число попыток подбора паролей стало переваливать за 17к в сутки, я решил прекратить этот коммунизм и поставил fail2ban.

    Немного пошаманив с настройками, пришел к следующей конфигурации: 3 неверных попытки входа = бан айпишника на сутки. И, как говорят в Одессе, совсем другая картина маслом — нагрузка на сервер незначительно снизилась, и отчеты logwatch стали несколько короче.

    Однако, спустя неделю после эксплуатации fail2ban, обнаружилась неприятная особенность его работы. В дефолтной конфигурации fail2ban делает запросы whois об айпишнике, который банит. И если сервер whois не отвечает, то fail2ban становится немного не живой — виснет, зараза.

    Но если чуть-чуть подправить mail-whois.conf, mail-whois-lines.conf, sendmail-whois.conf и sendmail-whois-lines.conf в /etc/fail2ban/action.d и исключить обращения к whois, fail2ban перестает зависать.