Archive for the ‘ BSD ’ Category

FreeBSD + IPFW: Блокируем SMTP Bruteforce

На предыдущей работе досталось в подчинение пара почтовых серваков с оооочень древними доменами, огромным количеством ящиков и не менее огромным количеством бесконечных брутфорсов. Не знаю что было причиной бесконечных атак на эти серваки, но то что он был в like list у всевозможных ботов — это уж точно! Почта была критичным сервисом, но ближайшие планы включали миграцию на MS Exchange, поэтому позиция руководства была примерно такой «Ну онож работает? Да! Вот и не трогаем пока … нам бы побыстрее мигронуть на эксчендж да вырубить их нафик!» Но один раз случился инцидент который заставил изменить позицию неприкосновения. Несмотря на рендомные пароли, один ящик был сбрутен, и как результат — отправка через наш сервак порядка 40.000 спам писем со ссылками на различные ресурсы интимного направления 🙂
Короче было дано задание «Чтото с этим сделать!» Читать полностью

Zabbix — CPU Time & Memory Usage для процесса

Задача — мониторить zabbix-ом Memory и CPU Time Usage для конкретного процесса в Linux/Unix.
Больше конкретики …
Есть вот такой процесс:

black@linux9:~$ sudo ps aux |grep java
bioc 8607 40.4 1.2 11097680 418576 pts/0 Sl Feb25 423:27 /usr/java/jdk1.7.0_67/bin/java -classpath /opt/bioc/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/opt/bioc/maven/bin/m2.conf -Dmaven.home=/opt/bioc/maven org.codehaus.plexus.classworlds.launcher.Launcher tomcat7:run
black@linux9:~$

Как узнать сколько ресурсов он потребляет? И не просто узнать, но еще и запихнуть в zabbix для сбора статистики и накручивания триггеров.
Процессор!
CPU Time процесса — в дефолте Zabbix не умеет собирать агентом этот параметр. Но есть возможность написать свой UserParameter в конфиг zabbix-agent. Вот мой вариант:

UserParameter=proc.cputime.fc[*],CPUS=$$(grep -c ^processor /proc/cpuinfo); /bin/ps -A --no-headers -o user:16,cputime,args | /usr/bin/awk -v CPU_C="$$CPUS" 'BEGIN {SUM=0; SNAME="$3"; COMM="$2"; USER="$1"} {if (($$9 ~ SNAME || SNAME == "") && ($$3 ~ COMM || COMM == "") && ($$1 == USER || USER == "")) {d[1]=0; d[2]=0; split($$2, d,"-"); if (d[2] != 0) {split(d[2], t, ":"); SUM+=86400*d[1]+3600*t[1]+60*t[2]+t[3]} else {split($$2, t, ":"); SUM+=3600*t[1]+60*t[2]+t[3]}; }} END''{printf "%.1f", 100*SUM/CPU_C}'

На zabbix-server можно использовать Item «proc.cputime.fc» с дополнительными параметрами которые нужны для выборки awk:
USER=$1 — username, в моем случае «bioc»
COMM=$2 — command name, в моем случае «java»
SNAME=$3 — some unique parameter, в моем случае «tomcat7»
В моем случае это:

black@linux9:~$ /bin/ps -A --no-headers -o user:16,cputime,args |grep bioc |awk '{print $1,$3,$9}'
bioc /usr/java/jdk1.7.0_67/bin/java tomcat7:run
black@linux9:~$

Тоесть в моем конкретном случае Item выглядит так: proc.cputime.fc[bioc,java,tomcat7]
Читать полностью

Перестраиваем apache22 + mod_php5 -> nginx + apache22 + mod_php5

На одном из серверов понадобилось добавить чуть больше гибкости web-серверу. Система FreeBSD, web-сервер настроен по олдскульной классике: Apache22 -> mod_php5 -> MySQL. Поскольку ковырять старичка апача особо желания нет, решил просто «накрыть» его nginx-ом и докрутить в нем все свои хотелки (GeoIP, bandwidth limit, различные варианты отдачи в зависимости и User Agent и тд.) Тоесть нужна вот такая схема: Nginx -> Apache22 -> mod_php5 -> MySQL
Основная задача — свести к минимуму Downtime.
Итак, поехали … Читать полностью

FreeBSD 9.3 — portsnap error «Empty error message»

Последнее время только то и делаю что натыкаюсь на досадные баги, которые отнимают время и не дают работать 🙁 В этот раз бага из розряда «тупее не придумаешь!»
Свежеустановленная FreeBSD 9.3 не хочет обновлять порты командой portsnap. Сразу скажу что в процессе инстала порты были установлены.
Вот такой прикол …

root@fr1:~ # portsnap fetch update
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Feb 10 02:01:06 EET 2015:
9528fd262c49a418579faa6f58bfc3c4040fe96c58d92d100% of   56 MB  601 kBps 01m36s
Extracting snapshot... snap/8bd2f2d1e85bb98a760022703eac8ff47d51700559cfedcb0b158e4eca2fc992.gz: (Empty error message)
tar: Error exit delayed from previous errors.
root@fr1:~ #

Решение этой досадной проблемы нашлось тут. Читать полностью

MySQL — online change storage engine.

Достались мне в наследство некоторые MySQL базы. Случайно обратил внимание что таблицы а базе используют MyISAM Engine. Поскольку базы создавались «за царя Гороха», а свежий MySQL Server был жестко оптимизирован конфигом под InnoDB Engine — решено сменить storage engine с MyISAM на InnoDB «на лету».
Делается это очень просто … Читать полностью

Bye-bye SSH/FTP Bruteforce

Сегодня утром был злой. Задолбал брутфорс ssh и ftp. Освоил новый инструмент бана. Не секрет что бан фаерволом дороже чем blackhole/nullroute. Опробовал в FreeBSD, забанил пару сеток:

root@black:~# route add -net 46.151.48.0/21 127.0.0.1 -blackhole
add net 46.151.48.0: gateway 127.0.0.1
root@black:~# route add -net 62.201.212.0/22 127.0.0.1 -blackhole
add net 62.201.212.0: gateway 127.0.0.1
root@black:~# route add -net 222.161.0.0/16 127.0.0.1 -blackhole
add net 222.161.0.0: gateway 127.0.0.1

Читать полностью

FreeBSD and portupgrade — «HASH: Out of overflow pages. Increase page size error»

Последнее время только то и делаю что разгребаю какието досадные баги разных ОС … То CentOS на ровном месте взбрыкнет, то FreeBSD …. Но фряху на этом поле не переплюнуть, эта система заточена под одну статичную конфигурацию и полную заморозку в вакууме после настройки и проверки. Динамика, обновления системы, обновление пакетов и их зависимостей — нет … не слышали про такое 🙂 Но то вопрос отдельной статьи, которую я обязательно напишу чуть позже, после миграции на Debian последнего сервера с фрёй в моем подчинении …. а пока продолжаем жрать кактус. Ой, ну тоесть админить фряху!
Казалось бы, банальнейшая вещь — обновить пакетик vim-lite, но не тут то было!

root@gw:~# portupgrade vim-lite
[Reading data from pkg(8) ... - 314 packages found - done]
[Updating the portsdb <format:dbm_hash> in /usr/ports ... - 24506 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.........24000..... ....HASH: Out of overflow pages.  Increase page size
 error] Remove and try again.
[Updating the portsdb </format:dbm_hash><format:dbm_hash> in /usr/ports ... - 24506 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.........24000..... ....HASH: Out of overflow pages.  Increase page size
 error] Remove and try again.
[Updating the portsdb </format:dbm_hash><format:dbm_hash> in /usr/ports ... - 24506 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.........24000..... ....HASH: Out of overflow pages.  Increase page size
 error] Remove and try again.
[Updating the portsdb </format:dbm_hash><format:dbm_hash> in /usr/ports ... - 24506 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000...^C
Interrupted.
^C
Interrupted.
root@gw:~#

После поверхностного гугления стало ясно что проблема в том что ruby версии 2 не всегда корректно работает с ruby19-bdb5, а именно эта версия ruby-bdb у меня установлена:

root@gw:~#
pkg version -v |grep ruby
ruby-2.0.0.598,1                   < needs updating (index has 2.0.0.598_1,1)
ruby19-bdb5-0.6.6_4                =   up-to-date with index
root@gw:~#

Давайте исправим руками то что с легкостью должен был сделать нормальный пакетный менеджер … Читать полностью

PHP Warning — /usr/local/lib/php/20100525/memcache.so: Undefined symbol «php_session_create_id»

Все время забываю как в FreeBSD лечится вот такая проблема:

root@web5:~# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20100525/memcache.so' - /usr/local/lib/php/20100525/memcache.so: Undefined symbol "php_session_create_id" in Unknown on line 0
PHP 5.4.35 (cli) (built: Nov 22 2014 21:51:24)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
root@web5:~#

Читать полностью

Win.Trojan.Agent в почте и headers_check в Postfix

Тут недавно отгребал кучу вирусни в почте, к сожалению наличие ClamAV с актуальными базами на почтовом сервере ниразу не спасало 🙁 Письма были шаблонные, тема одна и та же, вложение — zip файл photo.zip или iphone_photo.zip (несколько раз еще приходили transact_store.zip) который внутри содержит вирус exe-шник … основная разница только в том с какого хоста, от кого и кому шлют.
Вот примеры вложений с вирусом сохраненные из тех спам-писем для анализа, можете проверить на стойкость свои антивирусы 🙂
Надо? — жми!
Архив запаролен: FhiibNAfNm
Для тех кто верит мне на слово будет достаточно скриншота с содержимым данного архива:
Email with Virus
Вся эта беда сыпется по почте, ниже пример сообщения Читать полностью

Dovecot2 + zlib = сжатие сообщений на сервере

При обновлении порта dovecot2 заметил в меню «Config» опцию Zlib, может она уже 100 лет там была … но только сейчас заметил. Сразу подумалось — фишка интересная, надо опробовать. Оказалось настраивается крайне просто, так я сделал в FreeBSD … но думаю конфигурация для Linux ничем не отличается.
Сразу перед настройкой решил отправить себе тестовое письмо для наглядности эффективности сжатия, в google-mail быстренько создал письмецо, влил туда какойто первый попавшийся лог … для иммитации текста и пульнул на свой сервак. Замысел в том чтобы после настройки сжатия кинуть такоеже письмецо и сравнить простое и сжатое 🙂
Настройка проще не придумаешь!
В конфиге /usr/local/etc/dovecot/conf.d/15-lda.conf сделал так:

protocol lda {
  # Space separated list of plugins (default is global mail_plugins).
  mail_plugins = $mail_plugins zlib
}

И в конфиге плагинов /usr/local/etc/dovecot/conf.d/90-plugin.conf сделал вот так:

plugin {
  #setting_name = value
  zlib_save_level = 7 # 1..9
  zlib_save = bz2     # or bz2, xz or lz4
}

После этого перегрузил сервис:

root@mx1:~# service dovecot restart

И повторил отправку тестового письма Читать полностью