[recovery mode] Вы все еще храните 404backup.zip на сервере? Я на 200ДА

Сумеречными зимними вечерами под песнь вьюги, укутавшись в овечий плед с бокальчиком «яблочной самогонки», я люблю почитывать логи на сервере. Авторизация по ключам упрощает сие, так что если в если в публичное помещение меня и не пустят, то сервер всегда рад приютить, старый чертяга.
В мире много чего происходит, у кого счастливое 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 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 дней этой же самой жизни. Я счастлив, что я могу сделать этот мир лучше и подарить неполную неделю счастья и практически рождественского ожидания подарка из моего правого носка.
image

© Habrahabr.ru