суббота, 28 апреля 2012 г.

suhosin и логи

Избавляемся от suhosin спама в логи (писалось под фрю, на линях пока не отлаживалось, может потом дополню)

Открываем конфиг сислога и вписываем:
!suhosin
*.* /var/log/suhosin

На самом деле, с сухосином подстава: даже с указанными строками он в messages пишет, поэтому надо или из строки с messages удалить *.notice, или вписать в конец первой части ;suhosin.none (ДО /var/log/messages), без пробелов.

вариант 2: указываем прямо ему, куда пишем. Например через suhosin.log.script.name, принимает 2 аргумента.

Перезапускаем сервис

Теперь надо настроить ротацию логов - на загруженном веб сервере он может очень быстро расти.
Во фре это newsyslog, конфиг в /etc/newsyslog.conf
/var/log/suhosin 644 15 1024 * ZC

Тут C=create, Z=gzip - сжать gzip, и если такого не было - создать. При создании нового выставить права 644, хранить 15 предыдущих файлов, ограничиваем по размеру файла в 1024кб (если надо по времени - вместо 1024 ставим *, а вместо звёздочки - когда, обычно это @TO0)

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

В линуксах это обычно logrotate, и наши конфиги надо пихать в /etc/logrotate.d/

О причинах:
вариант 1: в скриптах выставлено увеличение памяти, например строка в логе

Apr 28 12:13:46 srv suhosin[25059]: ALERT - script tried to increase memory_limit to 536870912 bytes which is above the allowed value (attacker '1.2.3.4', file '/usr/home/user/data/www/site.ru/bitrix/php_interface/dbconn.php', line 39)

На 39 строке видим
@ini_set("memory_limit", "512M");
а у нас лимит стоит 128М. Так что или уменьшать в этой переменной (что возможно не всегда, например если это чужие сайты на хостинге), или увеличивать выделение памяти сайту.

Вариант 2: просто кривые движки или с частыми проверками "сколько же мне могут отдать"

Apr 27 22:04:24 srv suhosin[8322]: ALERT - script tried to increase memory_limit to 4294967295 bytes which is above the allowed value (attacker '1.2.3.4', file '/usr/home/user/data/www/site.ru/includes/class_xml.php', line 35)

Хотя такие строки как раз надо проверять - ни один нормальный скрипт не запросит 4 гига памяти и это похоже на атаку переполнением. Впрочем, это скорее всего тоже бага в движке сайта. Но в данном случае было прописано
@ini_set('memory_limit', -1);


Вариант 3:
Apr 28 12:18:05 srv suhosin[28777]: ALERT - configured request variable name length limit exceeded - dropped variable '...'

Чаще всего это говорит о криворукости программистов. Или предложить им ввести лимиты на длину, или увеличить эти самые лимиты. Зачастую правильнее следить за длиной...

Вариант 4: это уже 99% - атака

Apr 28 14:09:55 srv suhosin[5007]: ALERT - configured GET variable value length limit exceeded - dropped variable 'q' (attacker '1.2.3.4', file '/home/user/data/www/site.ru/index.php')

1 комментарий:

  1. Hi there, sorry i don't speak russian.

    This error "configured GET variable value length limit exceeded - dropped variable 'q'" is often not an attack.

    For some reason some browser get redirected multiple times and the URL gets longer everytime. These users usually come from facebook links.. I still didn't find the origin of the problem leading to these multiple redirects..

    ОтветитьУдалить