Зачем нужен Firewall на веб-проектах

Не так давно написал статейку на хабре.

Здравствуйте, обычно при создании проектов в интернете при вопросе безопасности большее внимание уделяют веб-приложению, а о защите самого сервера забывают, а именно о firewall’е. Я понимаю, что настройкой сервера, и в том числе firewall’а, должен заниматься специальный человек — сисадмин, но во многих ситуациях получается так, что программист сам себе админ. На настройку firewall’а даже у программиста уйдёт всего лишь около 1 дня — это избавит от потенциальных проблем. От каких? Сейчас расскажу небольшую историю «взлома». В моём городе у провайдера, который занимает лидирующее положение, есть локальный трекер, довольно таки большой (не будем про нелегальность, нас интересует только вопрос безопасности проекта). Т.к. я занимаюсь разработкой другого трекера меня интересуют различные новые возможности, и я периодически захожу на разные трекеры, в том числе и на него. Однажды я увидел ошибку 502 Bad Gateway от nginx, и решил позже зайти прямо на apache. Обычно apache перевешивают на порт 8080. Зашёл — значит firewall не настроен, посмотрел на заголовки ответа — стояла FreeBSD. Я думаю, что те, кто ставит фряху, должен быть довольно опытен в настройке и просто забыл закрыть порт, при установке nginx как фронтэнда, а apache’а как бэкенда. И я решил проверить Nmap проверил, что все порты, которые используют приложения открыты: 21, 22, 25, 80, 3306, 8080 и ещё несколько портов. Т.к. я тоже занимаюсь разработкой, я знал, что этот движок трекера (torrentpier) имеет возможность использования кэширования через memcached. Проверил стандартный порт memcached — порт был открыт. Написал простецкий скрипт соединения к memcached. Изучив исходники torrentpier, я узнал названия ключей, в которых происходит запись кэша. Из них интересными оказались 2 значения: массив настроек трекера и полный html-код главной страницы для незалогиненного пользователя. Из настроек трекера я узнал логин, пароль и адрес smtp сервера, т.е. потенциальный взломщик уже может рассылать спам (smtp же тоже не закрыт). Попробовал пароль от smtp в качестве пароля администратора трекера — получилось, я получил администраторский доступ к трекеру. Я понимаю, что это было «удачное» стечение обстоятельств, но просто закрытие портов уже бы помогло.

Заключение

Кроме безопасности самого веб-приложения (php, python, ruby, etc), но и о безопасности самого сервера (в частности firewall’а) и всех используемых параллельно инструментов. Так же нужно делать разные пароли для всего (почта, БД, ftp) даже на уровне 1 проекта.

P.S.: Делал это я не для того, чтобы что-то сломать, а просто из «спортивного» интереса. Администратор трекера был почти сразу уведомлён о возможности «взлома», в том числе о каждом шаге. %Username%, а у тебя настроен firewall?

Contents

comments powered by Disqus