13 янв. 2015 г.

Разгружаем и защищаем север nginx с помощью fail2ban

Разгружаем и защищаем север nginx с помощью fail2ban

Задача: простыми для самоучки средствами максимально разгрузить сервер и/или ВДС-ВПС от множества дурных запросов.

Два вида паразитных запросов:
  • роботы как роботы
  • роботы как люди
Вводная: роботы как люди хитрят и меняют:
  • юзерагент через 5-100 запросов, но ИП меняют редко;
  • ИП через 5-100 запросов, но юзерагент меняют редко;
  • лимитировать по числу коннектов и/или их скорости/частоте не хочется, потому что в век скоростного интернета и 128 поточных браузеров потеряем много юзеров и гуглоботов.
Идея:
  • роботам как роботам сразу отдаём ошибку 444 по юзерагенту;
  • роботам как людям сразу отдаём ошибку 444 по специфичным подстрокам в URI запроса;
  • баним найденные ИП на часок, чтобы робот отдохнул и выкинул наш сервер из своей базы данных.
Реализация:

Прочитать полностью...

12 янв. 2015 г.

Test VDS-VPS vs Dedicated Server by HDD

Чем отличается VDS-VPS (XEN 3.1GHz, ОЗУ 256MB, диск 15Gb, Канада) за 10 баксов от Dedicated Server за 10 баксов (Atom N2800 1,86 GHz, ОЗУ 2Gb, диск 500Gb, Франция)?

Методика тестирования:

идем в темп:

cd /tmp

создаем файлик из 16384 кусочков по 65536 байтиков, примерно будет 1 гигабайт:

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

на сервере за 10 баксов получим (не останавливая nginx и имея 100 PHP вызовов в секунду):

16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB) copied, 10.1663 s, 106 MB/s

уберем мусор за собой:

rm -f test

на VDS-VPS за 10 баксов получим:

1073741824 bytes (1.1 GB) copied, 270.881 seconds, 4.0 MB/s

при остановленном nginx (соответсвенно PHP-FPM тоже ничего не делает):

1073741824 bytes (1.1 GB) copied, 127.868 seconds, 8.4 MB/s

Вывод: нунах эти ВДС. К тому же на VDS-VPS за постоянную большую нагрузку на процессор/диск/сеть вас погонят и на XENe тоже, хотя и не так быстро как на OpenVZ.



И да, Ceterum censeo Moskva esse delendam! Прочитать полностью...

9 янв. 2015 г.

Дополнение 4. Максим, Виктор, Сергей, Александр, Александр. Слава героям.

Начало, продолжение, дополнение, дополнение 3.

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



Нефть стремительно дешевеет, нормандский формат переговоров уже согласовывается, Восточная Сибирь уже продана Китаю, может и война скоро закончится?

Но Париж взрывают и обстреливают, месть за Мистрали следует понимать. Есть ещё агентура не спаленная у НКВД/КГБ/ФСБ. Даже в Турции россиянка подорвала тамошних ментов http://youtu.be/KlsOEPxjwcs . Много ещё гадостей они успеют сделать до тех пор.

И да, Ceterum censeo Moskva esse delendam! Прочитать полностью...

8 янв. 2015 г.

Дополнение 3. Максим, Виктор, Сергей, Александр, Александр. Слава героям.

Начало, продолжение, дополнение.

Оказывается у меня сохранилась ещё одна газета - "Вiче-iнформ". Вот вырезка, кликабельно.



Вспоминается детство, моя первая толстая книга "Повесть о настоящем человеке", прочитанная вместо той, которую читали все мои ровесники в тот момент "Тим Таллер или проданный смех". Я Тима так и не прочитал, случайно посмотрел фильм. Да, Мересьев - это советская пропаганда, но подвиг то был. Так почему бы нам не повторить подвиг народа в борьбе против агрессора?

И да, Ceterum censeo Moskva esse delendam Прочитать полностью...

7 янв. 2015 г.

Дополнение 2. Максим, Виктор, Сергей, Александр, Александр. Слава героям.

Начало, продолжение.

Проезжая через Луцк случайно купил газету "Волинь-нова".


Прочитал две заметки (обе картинки кликабельны)


Утер слёзы, пожелал Путину побыстрее встретиться в Данилом Шумуком, снова вспомнил "зелёный коридор смерти" в исполнении НКВД/КГБ/ФСБ.

И да, Ceterum censeo Moskva esse delendam! Прочитать полностью...

Защита nginx на сервере

Защита nginx на сервере многогранна.

Одна из граней, пока у нас не увели рута или юзера с правами рута, то логи nginx нужно обогатить:

if ($request_method ~ "^POST$") {
    access_log /var/log/nginx/access-POST-$server_name.log main_post;
}
if ($request_method ~ "^(PUT|OPTIONS|HEAD|PATCH|DELETE|TRACE|CONNECT)$") {
    access_log /var/log/nginx/access-PUT-$server_name.log main_post;
}

ну и:

log_format main_post '$remote_addr [$time_local] $host "$request" '
    '$status $body_bytes_sent [$request_body] "$http_referer" '
    '"$http_user_agent"';

ну и client_body_buffer_size в /etc/nginx/nginx.conf установить как вам нужно, чтобы ваши запросы помещались, а хакерские нет :)
или наоборот, ставьте побольше, чтобы любой хакерский запрос поймать.

и защитить:

chown nginx:nginx /var/log/nginx
chmod 200 /var/log/nginx

последнее особенно удивительно для меня, самоучки, но логи пишутся, а больше убирать там нечего :)

UPDATE уже ночью
логи то пишутся, но после рестарта nginx хочет прочитать старое, чтобы добавить новое и не может.
поэтому

chmod 600 /var/log/nginx

и наблюдаем дальше...

И да, Ceterum censeo Lugansk esse delendam! Прочитать полностью...

5 янв. 2015 г.

Защита PHP на сервере

По следам наших выступлений раз, два.

Я считаю обязательным  в файле /etc/php.ini установить disable_functions = длинный список функций под катом


Прочитать полностью...