Facebook Twitter
Linkedin LJ
Git Instagram
IPv6
40 posts tagged

IT

Later Ctrl + ↑

Backuping mysql

Recently I have to backup mysql database on quite heavily loaded server and I wanted to make backup daily on one hand and I wanted them not to affect production on the other. DB size is more than 150 Gb, about 50k users daily.

First approach was ty try to simply run musqldump and see what would happen. Site was down right after the backup has begun. Then I have tried to nice the mysqldump with

/usr/bin/nice -n 10 ionice -c2 -n 7

The result was better, site was down at about 10% of the job. Next I add --single-transaction, that have solved about 95% of problems, still some time site was down, so I had to add -q option. The final command was:

/usr/bin/nice -n 10 ionice -c2 -n 7 /usr/bin/mysqldump --plugin-dir=/usr/lib/mysql/plugin --user=dbuser -h bd.lxc --port=3306 --all-databases --single-transaction -q|/bin/gzip >  /var/bcp/backup-db-`/bin/date -I`.sql.gz
 7   2016   IT   linux   mysql   web

Interesing “feature” of the Mediawiki

Just have a bit digged in the Mediawiki, that is quite popular Wiki engine :-) Found out that the  articles are located in the “prefix_text” table, with all the changes, obviously. So changes are being stored as a new copy of the article: if you have 100kb article and you need to save a change in 1 symbol, there would be 100kb growth (plus additional data) of the table. No wonder that the Wikipedia need new servers all the time! Cannot imagine size of their DBs.

 13   2016   internet   IT   php   wiki

E-mail notification on every login

It’s useful sometimes to get notifications on every ssh login that is happen on the server (though, could be used to monitor logins made by other means). First method is based on the /etc/profile, but it should not be used because user can override it with setting own variables if home directory is writable for him. Most convenient is to use PAM, putting in the /etc/pam.d/sshd execution of the script that whould send the mail in the session section:

session optional pam_exec.so seteuid  /usr/local/bin/send_mail.sh

I would not recommend to set “required” here because the fail of the scrip should not be critical. The script just sends notification mail:

#!/bin/sh
if [ "$PAM_TYPE" != "open_session" ]
then 
	exit 0

else
  {
    echo "User: $PAM_USER"
    echo "User: $PAM_TYPE"
    echo "Remote Host: $PAM_RHOST"
    echo "Service: $PAM_SERVICE"
    echo "TTY: $PAM_TTY"
    echo "Date: `date`"
    echo "Server: `uname -a`"
 } | mail -s "$PAM_SERVICE login on `hostname -s` for account $PAM_USER" admin@example.com
fi

exit 0

Don’t forget to put +x permissions on it with:

chmod +x  /usr/local/bin/send_mail.sh
 4   2016   IT   linux

DNSBL checkers list

Since I am now running my own smtp-server, I have to deal with different black list servers myself and check my IP from time to time if it’s there or not.To cover pretty much everything valuable:

https://www.whatismyip.com/blacklist-check/
http://whatismyipaddress.com/blacklist-check
http://mxtoolbox.com/SuperTool.aspx?action=blacklist%3a85.17.249.170&run=toolpage

My IP was in 2 lists, DAN ME, APEWS and Barracuda.

DAN ME is a list maintained by some loser, who lists there all TOR-related IP addresses he can find. Unfortunately he lists not only the exit-points, but relays as well. Fortunately, his list is automated, but I had to shut down the TOR node.

Barraccuda removes by request, however, sells “subscription” for $20, so you will not be in the list again. That’s low!

At the moment it’s in the APEWS for 3(!) years and the owner has a long faq where he is explaining why he would not remove you ever.

Thinking of extra VPS for the additional MX.

 5   2016   dns   IT   linux   networking

SUDO !-rules

Checked one insecure approach to use sudo not to allow commands, but to prohibit commands for user with the NOT-operator “!”. Why it’s a bad idea we can see in the sudoers man page:

” Limitations of the ‘!’ operator
It is generally not effective to “subtract” commands from ALL using the ‘!’ operator. A user can trivially circumvent this by copying the  desired command to a different name and then executing that. For example:

bill ALL = ALL, !SU, !SHELLS

Doesn’t really prevent bill from running the commands listed in SU or SHELLS since he can simply copy those commands to a different name, or use a shell escape from an editor or other program. Therefore, these kind of restrictions should be considered advisory at best (and reinforced by policy).”

RHEL 5,6 – works
RHEL 7 – does not work, which is good. Still, wanted by some customers.

 5   2016   IT   linux   sudo

Переезды сервисов из страны в страну

Смена страны проживания в разных сервисах:

  • Google: просто нельзя переехать из РФ в Чехию. Поддержка говорит, что можно воспользоваться услугами партнера и перенести, но в реальности ни один партнер на захотел со мной возиться. Сценарий “удалить все и зарегистрировать новый” меня не устраивает, проще переехать на собственный сервер (что я и сделал).
  • Steam: просто прописать новую страну, адрес и карточку. Можно делать не чаще чем раз в пол года.
  • Apple: можно поменять страну проживания, когда у тебя нет платных подписок. Но от платной подписки до конца периода оплаты отказаться нельзя. Ждем декабря.
  • Blizzard: по запросу в поддержку. Там надо показать локальный документ.
  • Adobe: смена платежных реквизитов меняет страну. Есть тонкость с использованием уникального адреса, но про нее говорят в саппорте
  • Различные мессенджеры: просто поменять телефон и адрес. По подтверждению кода с телефона меняется и страна.
 4   2016   IT   жизнь   интернет

Sieve: фильтрация почты на стороне сервера

осле того, как Google закрыл Reader, я утратил веру в большую компанию, которая делает для меня инструмент, решающий важные мне задачи. Я решился строить свой собственный Луна-парк с читалками, агрегаторами, болжеком и т.п. Почта на своем домене — первое, что приходит в голову. Не вопрос прописать MX запись, поставить Postfix на локальную доставку, установить IMAP-сервер Dovecot и почтовый веб-клиент Roundcube, вопрос повторить функциональность «большой» системы, в первую очередь, сортировку. Я не буду дублировать существующие инструкции, опишу только неочевидные моменты.

Что меня не устраивает в Gmail? Это идеология меток (labels), которых можно прицепить к одному и тому же письму несколько, а в IMAP отобразить их в виде папок. В результате корневая папка всегда полна писем, а я такой человек (возможно, мой случай уникален), что всю «лишнюю» почту я удаляю, а всю «нужную» раскладываю по папкам. Я стираю все уведомления от веб-магазинов, форумов, сервисов и т.п., что не укладывается в идеологию Гугла «зачем удалять, если место бесконечно?». Гугл хочет видеть у меня как можно больше, а я не хочу видеть мусор. Далее, я пользовался iCloud/me.com, там все просто: правила сортировки входящей почты просто не работают и все.

Итак, задача: чтобы Dovecot сам раскладывал почту по папкам IMAP’а. Честно говоря, я провел минут 20 в поиске «а где же у Roundcube’а настройки фильтрации?», а потом начал читать инструкции. К сожалению, все, что можно найти в вебе, не содержит полного списка граблей, на которые можно наступить, постараюсь по горячим следам описать их тут.

Сперва, надо выучить слово sieve, это целый язык описания правил фильтрации, созданный Cyrusoft’ом во время работы над почтовым сервером Cyrus (не к ночи помянут). Он позволяет писать такие вот самоочевидные правила
в ~/.dovecot.sieve:

require ["fileinto"];
# rule:[LinkedIn]
if header :contains "From" "linkedin.com"
{
	fileinto "INBOX/LinkedIn";
	stop;
}
# rule:[Drupal Alerts]
if header :contains "Subject" "yet another home page"
{
	fileinto "INBOX/Drupal Alerts";
	stop;
}
if header :contains "From" [ "user@example.com" ] {      
  addflag "\\flagged";
  fileinto "Trash";
  stop;
}
# rule:[Paypal]
if allof (header :contains "From" "paypal")
{
	fileinto "INBOX/Ebay, Paypal";
	stop;
}

Конечно, не очень хочется лезть в консоль, чтобы прописать новое правило фильтрации, к счастью, есть протокол managesieve, который позволяет почтовому клиенту рулить правилами на сервере. Удачно, что и Dovecot, и Roundcubе поддерживают обе функциональности. А дальше, начинаются грабли.

Во-первых, самое простое и естественное, что делается для включения seive, это установка mail_plugins = sieve где-то глобально для всего Dovecot’а. Это неправильно! Будет так:

Error: dlopen(/usr/lib64/dovecot/lib90_sieve_plugin.so) failed: /usr/lib64/dovecot/libdovecot-sieve.so.0: undefined symbol: mail_deliver_get_log_var_expand_table

Переменную следует выставить в /etc/dovecot/conf.d/15-lda.conf, для lda, локальной доставки. Включение managesieve и в Dovecot’е и в Roundcube проблем не вызывает (плагины есть в стандартной поставке), надо только не забыть прописать порт. Можно начинать писать правила, только работать они не будут, так как хотя почта раскладыватеся по папкой из клиента, «локальный доставщик» по-прежнему Postfix и INBOX не в /home/username, а в /var/mail/username. Надо прописать в main.cf mailbox_command = /usr/lib/dovecot/deliver -d «$USER». Теперь кажется, что все нормально: почти все письма раскладываются по почти всем правилам. Я потратил день на то, чтобы выяснить почему почта не попадает в папку и вывел коллег-из себя своими экспериментами. Я думал, что неправильно описываю свойства заголовка, так как там данные конверта и доставки отличаются (потому что общение происходит на сервере рассылки в рассылке, а выглядеть все должно как от собеседника собеседнику). Потом я увидел ошибку:

Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): Error: write() failed with mbox file /home/shaman007/mail/INBOX/LOR: File too large (process was started with ulimit -f limit)
Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): Error: sieve: msgid=<d068a42487535146ce3e7ec8b6557b27@andreybondarenko.com>: failed to store into mailbox 'INBOX/LOR': Internal error occurred. Refer to server log for more information. [2013-03-16 17:52:57]
Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): sieve: msgid=<d068a42487535146ce3e7ec8b6557b27@andreybondarenko.com>: stored mail into mailbox 'INBOX'
Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): Error: sieve: execution of script /home/shaman007/.dovecot.sieve failed, but implicit keep was successful (user logfile /home/shaman007/.dovecot.sieve.log may reveal additional details)
Mar 16 17:53:01 DJBZ002 postfix/local[13359]: 4575811F76E: to=<shaman007@andreybondarenko.com>, orig_to=<me@andreybondarenko.com>, relay=local, delay=3.9, delays=0.21/0.02/0/3.7, dsn=2.0.0, status=sent (delivered to command: /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT")
Mar 16 17:53:01 DJBZ002 postfix/qmgr[29435]: 4575811F76E: removed

File too large! Целых 100 мегабайт! Оказалось, что хотя инициирует ошибку Dovecot, дело в параметре mailbox_size_limit Postfix’а. По умолчанию там 5 что-ли мегабайт, надо выставить в 0. Кажется, это все грабли.

 5   2016   IT   linux

Доклад по вопросам сравнения антиспамов и построения спам-фильтров

Ссылка на конференицию UNИX;

Презентации: ODPPDF;

Спам

Сколько вам приходит спама в день? Мне около 1000-1500 сообщений на abondarenko@gmail.comи корпоративный ящик. Это много, друзья, моя жена, спам-аналитик, не даст мне соврать, но эти адреса принадлежат живому человеку и им больше 5 лет.

Нормальные люди решают задачи минимизации потока мусора в свои ящики, а мне как-то довелось решать обратную задачу, мне нужно было сделать спам-ловушки, то есть адреса, на которые будет приходить 100% спам дабы можно было обучать фильтры и смотреть статистику их работы. Казалось бы, чего проще! Ну зарегистрируем мы немного ящиков на разных сервисах платных и не очень, заведем какой-нибудь неприметный домен с ничего не говорящим именем digitalhardcore.us, будем эти адреса оставлять в регистрационных карточках заказа рекламы Pfizer’a и еще какой-нибудь дряни (естественно, отписавшись сразу же от легитимной рекламы) и дело в шляпе. И так, что было сделано:

  • Несколько адресов на mail.com, yahoo.com и еще где-то с форвардом на приемник потока у нас.
  • digitalhardcore.us, вся почта с которого форвардится на тот же приемник.
  • Регистрируемся на множестве сайтов разной направленности от торрент-трекеров и обзоров железа до секс-шопов оставляя там эти адреса.
  • Постим на форумах разные нейтральные комментарии указывая в подписях адреса.

Результат выполнения пунктов 3 и 4 ночными дежурными за 1 год – около 100 писем в день на адрес (плюс-минус), хотя ожидался на порядок больше.

Второй интересный момент: на 1 адрес мы собирали “не спам”, то есть рекламу уважаемых контор вроде cocacola или hp чтобы тестировать себя на ложные срабатывания. Результат через год – 10-20 спамовых писем в день в потоке честной рекламы, хотя адрес живым людям кроме меня был не известен.

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

Отсюда лично я делаю выводы:

  • крупные неуважаемые места торгуют базами пользователей (удав, фишки).
  • крупные уважаемые места ими не торгуют (LOR, Lepra), но некоторые все-таки торгуют. основной метод сбора адресов для набития баз – это не прочесывание стайтов и перебор имен, а потрошение записных книжек почтовиков троянами.

По этому можете смело писать свои адреса без дурацких _at_ или _здесь_была_собака_, форумы – капля в море.

Антиспам – отстой

Антиспамами принято меряться, давать им разные крутые награды и хвалить на форумах. Я хочу рассказать о том, как ими меряться правильно и что следует из измерений.

Сначала надо определиться, что есть спам. Вопрос не так прост, как кажется. Вот так определяет спам Лаборатория Касперского: “Массовая не запрошенная анонимная рассылка”. Массовая – потому, что единичный blackmail не есть результат работы спамера, а есть просто частный конфликт двух-трех людей. Незапрошенная – потому, что запрошенная реклама – не спам, ведь пользователь сам хотел ее у себя видеть и спамфильтр ее резать не должен. Анонимная (технически), потому, что с непрошенными письмами людей, которые себя никак не скрывают вопрос решают административно. Яркий пример таких писем – разные повестки или оповещения. Важность этого определения в том, что например, Яндекс спам определяет иначе, у него это “вся нежелательная почта и все рассылки”. Можно дискутировать на тему правы они или нет, но это однозначно надо учитывать при сравнении результатов их работы. Вообще на сколько мне известно, на сегодняшний момент консорциум по борьбе со спамом определение термина так и не утвердил, но рабочий вариант максимально приближен к определению ЛК.

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

Третье – что сравнивать кроме скорости. Сравнивать надо 2 величины – уровень детектирования (Detection Rate) и уровень ложных срабатываний (False Positive Rate). Первое число – это число верно распознанных как спам писем поделенное на общее число спама. Это число НИКАК нельзя посчитать при помощи робота потому, что робот не видит собственных ошибок. Уровень ложных срабатываний – это число распознанных как спам нормальных писем поделенное на общее число нормальных писем. Если первый параметр указывают, то второй либо замалчивают либо пишут откровенные небылицы. Нужно помнить, что FPR резко растет с увеличением агрессивности фильтра и, например, при замене антиспама на тупой скрипт “помечать как спам вообще все” и DR и FPR будут равны 100%: 100% спама мы распознаем уверенно, но и все чистые письма тоже зарубим.. Пример реальных цифр – Spam SLA Message Labs гарантирует деньгами 95%DR, 0.0004%FPR.

А теперь, почему антиспам – отстой. Потому, что хороший антиспам при низком FPR (одно на 10000) имеет в реальности DR около 93-96%. То есть например я при хорошем эгрегоре и чистой карме получу 40-70 спамовых писем в день (что собственно и происходит). По опыту, спам начинает бесить пользователя где-то на 14-16 письмах в день, так что меня ярость должна разорвать на куски :-).

Персональный спам

Для того, чтобы понять как нам сделать жизнь удобнее, надо разобраться, как вообще работают антиспамы. Есть 3 больших класса методов борьбы со спамом (классификация моя, можете поправить):
Разграничение прав доступа. То есть блокировка письма по признаку отправителя, не важно как мы его ограничиваем: авторизацией или урезанием пулов IP по DNSBL, greylist’у или как-то еще.

Анализ контента. Когда какой-то нормализованый кусочек письма рассматривается как образец спама, характеристический термин, URI из блек-листа чего угодно (IP, телефоны, URL, whatever).
Статистика. Ведение персональной базы по отдельно взятому потоку спама-неспама любым удобным алгоритмом, например байесом.

Недостаток первого метода в том, что слишком грубая резка порождает ложные срабатывания и RBLы часто обслуживаются полностью невменяемыми людьми. Второго в том, что база сигнатур-признаков-терминов всегда в большей или меньшей степени не поспевает за спамерами и отражают некий усредненный поток, а рассылки нынче уникальные с очень коротким временем жизни. Третьего (кроме традиционной убогости реализации) в вечном мусоре в базе, опасностью перекормить спамом и необходимостью вести статистическую базу для каждого пользователя (если мы хотим хорошего результата), а по сему по моему глубокому убеждению подкрепленному опытом Байесу на серверах делать совершенно нечего. Первый метод используют все, второй – практически все коммерческие вендоры (Message Labs, Yandex, Kasperksy, Symantec), третий – spamassasin и производные, а так же все персональные.

Так как спамассасин все-таки ставят на сервера, а ведением персональных баз никто себя не утруждает, то можно смело заявлять, что ваш серверный антиспам использует анализ некоего усредненного потока, и то, что все-таки проходит к вам в ящик – это либо очень хороший спам, либо “выбросы” из этого среднего потока. Так как хороший спам – это наверняка инновации и его поимку через некоторое время лечит вендор серверного антиспама, то нам следует сосредоточится на “выбросах” – вот тут-то нам и поможет Байес. Он встроен во все персональные антиспамы в том или ином виде с разной степенью убогости (самая убогая реализация – у Microsoft при совершенном отсутствии причин делать плохо очевидные вещи по известным алгоритмам имея в общем полноценный почтовый клиент и не полхой сервер) и так как он наш, то настроить и обучить его мы вполне способны так, чтобы снизить вредное влияние его традиционно большого false positive rate. Мой рецепт счастья: скидывать спам, отфильтрованный им в отдельный ящичек не смешивая со спамом отфильтрованным сервером, чтобы просматривать его перед удалением. Первое время там окажется довольно много нужной почты и потребуется явные корректировки настройки, но месяца через 3 он перестанет фалсить.

 3   2016   IT   linux   spam

Простой личный анонимайзер

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

Конечно, можно воспользоваться публичным анонимайзером, ТОРом или VPN’ом, но это не всегда удобно и не всегда возможно: например, публичный терминал в интернет-кафе или любой компьютер, на котором у нас нет прав, не позволит нам воспользоваться TOR’ом или VPN, а “анонимные прокси” вообще вещь в себе: никогда не знаешь как монетизирован именно этот хост. Личный анонимайзер же будет работать на любом устройстве и с большой вероятностью не будет заблокирован на бордере. Предлагаемый метод не отменяет TOR или VNP, а дополняет их возможностью доступа с чужих хостов.

Нулевое необязательное требование: домен. Это около 10 долларов в год, в принципе не обязательно, но удобно и желательно.

Во-первых, нам понадобится личный экзит-поинт в нужной стране. К нашим услугамhttps://www.leaseweb.com/, где всего за 9 евро в месяц можно пользоваться VPS’кой. Очень полезный в хозяйстве инструмент для многих нужд! На этом хосте должен быть настроен Apache и PHP, я опущу этот вопрос, так как он достаточно подробно освещен другими.
Во-вторых, нам понадобится скрипт, который будет показывать собственную адресную строку, искомый сайт во фрейме ниже и будет обладать другими полезными опциями вроде скрэмблера URL’ов, выкидывания всего embedded-хлама и кукисов, хранение кукисов на стороне сервера и т.п. Решений несколько, простое и работающее – Glype Proxy, который можно взять наhttp://glype.com/.

Установка скрипта проста.

  1. скачиваем сам архив со скриптом.
  2. создаем директорию в своем DocRoot’е c ничего не говорящим названием, например, wabba. Это нужно для обхода потенциального фильтра и для сокрытия его от лишних людей и роботов.
  3. распаковываем скрипт в эту директорию.
  4. поправляем права:
[root@D002 wabba]# cd /var/www/wabba/ 
[root@D002 wabba]# chown apache.apache -R /var/www/wabba/ 
[root@D002 wabba]# chmod 755 includes/ 
[root@D002 wabba]# chmod 755 tmp/ 
[root@D002 wabba]# chmod 755 plugins/
  1. заходим по адресу http://yourdoman.com/wabba/, если ошибок нет, то скрипт спросит нас о новом администраторе и пароле для него.
  2. заходим опять на наш анонимайзер и видим, что все работает:  
  1. (optional) – чтобы оградиться от ошибок в Glype и не дать пользоваться инструментом посторонним, мы можем сделать .htacces в котором позволим заходить в директорию wabba только себе.
  2. (optional) – чтобы скрыть работу скрипта от чужих глаз, можно разрешить доступ к wabba только по https. Подойдет и самоподписанный сертификат.
  3. (even more optiolan) – можем заплатить 10 долларов разработчикам, убрать из скрипта все ссылки на его разработчиков, сделать ему новую тему с рекламой и полным логгированием и запустить продажу логов интересующимся Шутка, но многие владельцы анонимайзеров так и делают.

Все! Можно пользоваться, во имя Луны.

 3   2016   IT   linux

Технический анализ поставок IBS

Качество поставки Alt Linux в школы, выполненными компанией IBS, вызвало бурный общественный резонанс. Группа технических экспертов (среди которых некоторые модераторы ЛОР и другие, известные в сообществе специалисты) провели технический анализ материалов — как первоначальной, так и повторно (исправляющей) поставки. Результаты анализа представлены в виде документа.

 2   2016   IT   linux   жизнь   зло
Earlier Ctrl + ↓