Pull to refresh

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

Reading time 2 min
Views 42K
Сумеречными зимними вечерами под песнь вьюги, укутавшись в овечий плед с бокальчиком «яблочной самогонки», я люблю почитывать логи на сервере. Авторизация по ключам упрощает сие, так что если в публичное помещение меня и не пустят, то сервер всегда рад приютить, старый чертяга.

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

image
Tags:
Hubs:
+113
Comments 79
Comments Comments 79

Articles