Сумеречными зимними вечерами под песнь вьюги, укутавшись в овечий плед с бокальчиком «яблочной самогонки», я люблю почитывать логи на сервере. Авторизация по ключам упрощает сие, так что если в если в публичное помещение меня и не пустят, то сервер всегда рад приютить, старый чертяга.
В мире много чего происходит, у кого счастливое 200, кто-то недоуменно смотрит на 301, кто-то царапает похабщину на 403.
Но самый ценных мех — это исследователи. Это те, кто открывает новый для себя мир на основе своих знаний путем проб и 404.
Вот о 404 и пойдет речь.
Это статья не то, чтобы не о чем. Она о безопасности.
С каждым днем все больше и больше людей разного возраста, религии, пола и установленной системы выбирают себе дорогу ИТ-опасника, чтобы потом стать ИТ-безопасником с хороших плохим послужных списком списком.
Такие креативные ребята и девчата денно и нощно посылают запросы об эксплоитах, которые отдаются им в виде 403 и 404, но это потом.
Все начинают с грубой аналитики поиска backup.zip
, которые должен быть в корне сайта. Многие уходят за рамки backup.zip
, и упираются в стенку archive.zip
. Кто-то, поставив первую в своей жизни MySQL 3.0 ищет dump.zip
, mysql.zip
и, компьютерныхбоже алилуйя, home.zip
. О .7z
или .tar.gz
даже мыслей нет!
Каждый раз, когда я вижу 404 в логе на против очередного head, или того хуже get, мое сердце сжимается от боли, которую они чувствуют, читая ошибку с экрана, как вы читаете эту статью.
В один прекрасный день, я сказал себе — «Довольно, %username%! Ты жесток! Ты не даешь им шанса, так нельзя, это не по человечески».
Я возразил, что жизнь вообще такая штука, нельзя им подать на блюде файл, да еще и с каемочкой. Третий голос молвил «моя преелесссть..», я не понял к чему, но рука потянулась в карман…
В итоге, после сделки с совестью и железным супергероем, которые есть почти в каждом из нас и из вас, я написал вот это:
location ~* "^/(archive|auth|backup|clients|com|dat|dump|engine|files|home|html|index|master|media|my|mysql|old|site|sql|website|wordpress)\.zip$" { access_log /usr/local/nginx/logs/dummy.log; default_type application/zip; root /usr/local/nginx/html/dummy; rewrite ^(.*)$ /mydummy break; max_ranges 0; limit_rate 4k; include param/zone1rs; }
max_ranges 0;
— запрещает «докачку»
limit_rate 4k;
— ограничивает скорость скачивания
include param/zone1rs;
— Зона, где разрешен 1 коннект на 1 ип. В разных версиях nginx свой листинг. Главное — limit_conn one 1;
, где one
это имя вашей зоны.
mydummy
получается очень просто:
dd bs=1024 count=1572864 </dev/urandom >mydummy
Затем нужно показать недоверчивым, что это zip архив:
echo -ne \\x50\\x4b\\x03\\x04\\x14\\x00\\x00\\x00\\x08\\x00 | dd conv=notrunc bs=1 count=10 of=mydummy
Теперь даже плохая погода мне нипочем! Ежели на дворе печальная осень, или мертвая зима, я бережно сдуваю хлебные крошки с консоли вызываю
tail -n 16 /usr/local/nginx/logs/dummy.log
… и на моем лице появляется улыбка! Я счастлив за будущее человечества, я горд за тех adsl
или cablenet
, кто целеустремленно в течении пяти суток бережно скачивает этот архив, этот маленький билетик в жизнь, весом в 1.5 гигабайта и ценой 5 дней этой же самой жизни. Я счастлив, что я могу сделать этот мир лучше и подарить неполную неделю счастья и практически рождественского ожидания подарка из моего правого носка.
ссылка на оригинал статьи http://habrahabr.ru/post/272261/
Добавить комментарий