Фильтрация http и syn флуда средствами nginx

Включаем фильтрацию синфлуда ядром — в файле /etc/sysctl.conf правим/добавляем

net.ipv4.netfilter.ip_conntrack_max=1548576
net.ipv4.tcp_syncookies=1

sysctl -p

В /etc/nginx/nginx.conf добавляем как то так

http {
 limit_conn_zone $binary_remote_addr zone=perip:10m;
 limit_conn perip 4;
 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;
...
server {
 server_name lalala.com;
...
 location / {
 limit_req zone=one burst=6 nodelay;
...
 location @fallback {
 limit_req zone=one burst=6 nodelay;
...

service nginx restart

Смотрим сколько запросов пролезло в nginx и SYN пакетов в секунду примерно так

tail -f /var/log/nginx/access.log | pv -lr -i 10 >/dev/null
tcpdump "tcp[tcpflags] & tcp-syn != 0" | pv -lr -i 10 >/dev/null

перекинуть процесс в screen

Частенько бывает что что то долгое запустил в консоли, и забыл про скрин. Чтобы утащить работающий процесс в скрин, заходим второй сессией, ставим yum install reptyr, потом смотрим PID чего нужно утащить. Далее просто screen, reptyr PID, готово!

VestaCP FTP не работает

FTP passive mode timeout

подгружаем модуль
modprobe ip_conntrack_ftp
CentOS — в файле /etc/sysconfig/iptables-config
строку приводим к виду
IPTABLES_MODULES=»nf_conntrack_ftp nf_conntrack»

Перезагрузить IPMI из консоли

Ставим ipmitool

Если не видит девайс и ругается «Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory», подключаем модули

modprobe ipmi_devintf ; modprobe ipmi_si

# ipmitool mc reset cold
Sent cold reset command to MC

Если IPMI жив и доступен по сети хоть как то, можно так

ipmitool -H 1.2.3.4 -U ROOT mc reset cold

TCPdump

К каким доменам идут запросы

tcpdump -n -A -s 0 -c 100 dst port 80 and greater 70 | grep Host

Подробно что идёт

tcpdump -n -A -s 0 -c 100 dst port 80 and greater 70

TOP talkers

tcpdump -tnn -c 2000 -i eth0 | awk -F «.» ‘{print $1″.»$2″.»$3″.»$4}’ | sort | uniq -c | sort -nr | awk ‘ $1 > 10 ‘

Отключаем OOM-Killer

Чтобы при нехватке памяти OOM-Killer не высчитывал «нужность» процессов и не прибивал самые «бесполезные» типа MySQL, нужно заставить OOM-Killer стрелять именно тот процесс, которому памяти не хватило.

Смотрим состояние

cat /proc/sys/vm/oom_kill_allocating_task

Говорим

echo «1» > /proc/sys/vm/oom_kill_allocating_task

Затем в sysctl.conf добавляем /правим строку

vm.oom_kill_allocating_task = 1

VestaCP и SpamAssassin

Спасассиссин прикручиваем к весте
Собственно, устанавливаем
yum install spamassassin

Создаём файлик, благодаря которому меняется тема у того, что очень похоже на спам.
vi /etc/exim/system.filter
if $header_X-Spam-Score matches «^[^-0][0-9\.]+» and ${sg{$header_X-Spam-Score:}{\\.}{}} is above 30
then
headers add «Old-Subject: $h_subject»
headers remove «Subject»
headers add «Subject: *** SPAM ($header_X-Spam-Score points) *** $h_old-subject»
headers remove «Old-Subject»
endif

Включаем спамассассин
chkconfig spamassassin on
sed -i «s/^#SPAMASSASSIN/SPAMASSASSIN/g» /etc/exim/exim.conf
sed -i «s/ANTISPAM.*/ANTISPAM_SYSTEM=’spamassassin’/» /usr/local/vesta/conf/vesta.conf
sed -i «s/nobody:true/spamd:true/g» /etc/exim/exim.conf

Перезапускаем всё что нужно
service exim restart
service spamassassin start

Конфиг спамассассина
/etc/mail/spamassassin/local.cf
Если нужно поменять вес, добавляем в него правила, которые в заголовках пролезшего спама, например
score URIBL_JP_SURBL 4.5

Чтобы проверял письма больше 100КБ,  в конфиге экзима
.ifdef SPAMASSASSIN
warn   !authenticated = *
hosts          = !+relay_from_hosts
condition      = ${if < {$message_size}{250K}}