Зачем нужен 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?

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 72

      0
      >>всего лишь около 1 дня
      Согласитесь, день это не так уж и мало…
      А вообще интересно, но часто провайдер сам по себе (да, знаю что за ОС, какой PHP и прочее, но о фаирволлах обычно не уведомляют)
        +3
        Я сам потратил 1 день и не жалею, даже имею теперь большее представление о возможностях фаервола и о прохождении пакетов.
        Возможно так оно и есть, но всегда можно попросить администраторов помочь, т.к. этот трекер очень популярен среди клиентов провайдера, думаю не отказали бы в помощи
        –20
        «фаервол» по-русски правильно пишется «брандмауэр»
          +5
          Не нравиться мне это название. Поменял на firewall.
            +26
            «брандмауэр» это не по-русски, а по-немецки, сударь.
            По-русски — «межсетевой экран»
              +5
              Самое главное — это чтобы все поняли
                +6
                Это точно, а еще, чтобы не резало слух. Файрвол — вполне себе прижившееся слово, хоть и неофициальное, потому придираться к его использованию мягко говоря нехорошо, я считаю
                  –1
                  Почти десяток вариантов написания — это не «прижившееся слово», ты вчитайся — вы с автором о разном говорите. Как не придраться к терминологии, есть в статье «виновник торжества» ни разу не упоминался ни в оригинальном написании, ни в словарном варианте перевода. Как вообще кто-то потом сможет найти статью? Жаргонизмы хороши в меру, и когда они однозначны.
                    –1
                    и вообще — правильно — «пакетный фильтр»!
                      0
                      не правильно. пакетный фильтр и фаервол разные вещи.
                        0
                        а вот отсюда поподробнее. насчет того, что файерволл не является пакетным фильтом.
                        +2
                        огненная стена блин еще осталось сказать
                        Какая разница, как? Статья интересная и все всё поняли
                    0
                    Терминология это все таки важно. Тут нежно все намекают, что если ошибку в одной букве google пропустит, то вот как вы найдете по «брандмауэр» эту статью — большой вопрос.

                    Кхм, правда уже нет, мы его уже раза три употребили: ) Ребята, просто пишите в комментариях альтернативные названия для поисковиков: )
                    +1
                    Это противопожарная стена.
                      +1
                      ага, но тогда топик «зачем нужна противопожарная стена в веб-проектах» должен быть про что-нибудь типа обустройства серверной или датацентра )
                        0
                        угус. И советы по предотвращению размножения всяких вирусов и паразитов в этйо стене, котоыре снижают ее противопожарные качества.
                        –1
                        Скорее наоборот — это огненная стена. :)

                        fire — огонь, wall — стена и никаких «противо» тут нет. Просто «стена огня» или «огненная стена».
                          0
                            0
                            firewall переводится на русский как брандмауер
                            lingvo.yandex.ru/en?text=firewall&st_translate=on
                              +1
                              садись, два — пишется через «э»
                              как бы его ни ругали, копипаст — великая вещь!
                                –1
                                это не меняет того факта что слово «брандмауэр» немецкого происхождения. ну забрело оно из забугорья, к нему привыкли и вписали его в словарь как «заимствованное» слово. что с того? пройдет несколько лет и то же произойдет со словом «фаервол» и очень надеюсь с другими словами вроде «роутир», «свитч» и т.д. очень раздражает назойлевая потуга «переводить» терминологию «русскими» словами, которые на самом деле нефига не русские: один из примеров роутир — маршрутизатор, последнее производное от слова маршрут, которое заимствовано опять же у немцев — Marschroute.

                                вобщем в этом плане «граммар-наци» не в ту степь воят.
                                  0
                                  Да и я вот все думаю — надо маршрутизатор путеведом называть, в самый раз.
                                    0
                                    я не это имел ввиду. :( я хотел сказать что нужно называть вещи своими, родными, именами. и коли уж терминология у ойти вся англоязычная, то нечего стеснятся и пытаться переводить, а принять такими какие они есть.
                                0
                                Я вдруг понял, что меня ностальгически замучало при прочтении этого коммента. Аллоды. Заклинание огненная стена:)) Ээээх, детство…
                                  –1
                                  обычно такие сочетания слов означают что-то вроде «стена ОТ огня». Перевод «в лоб» не канает…
                                0
                                немцы кириллицей обычно не пишут, не находите? ;-)
                                0
                                Похоже большинство так не считают.
                                habrahabr.ru/blogs/infosecurity/69446/
                                +1
                                >Делал это я для того, чтобы что-то сломать
                                Опечатка? :)
                                  +2
                                  Надеюсь не по Фрейду ;)
                                  +13
                                  Кроме фаервола, такие вещи как апач, мемкеш, БД и другое, что используется только с одного сервера, стоит просто биндить либо на 127.0.0.1 либо на локальный сокет.

                                    +2
                                    Многие хостеры также предоставляют локалку (vlan-изированную) на свободной сетевой карте (в серверах часто их две. Одна, таким образом, смотрит наружу, вторая — внутрь). Т.е. если нужен memcached больше чем на одном сервере, он вешается только на внутреннюю сеть.

                                    Всё дело в волшебных пузырьках в директиве listen, фаервол тут не при чём.
                                    +1
                                    Взял себе ВДС, настроил слегка фаервол. Через день глянул логи — 200-300 попыток соединится к smtp в час! И это на новом ИП. После этого закрыл на все доступ из вне кроме своего статик ИП и сплю спокойно :)
                                      +1
                                      Есть такая штука, fail2ban называется. И спасает от попыток брутфорса, и от ДДоСа, и от того, что поменяв свой статический адрес, невозможно будет админить сервак.
                                        0
                                        fail2ban процессор сильно нагружает.
                                          0
                                          Не замечал никогда. Работает себе спокойно на 600-МГц серваке.
                                            0
                                            может быть, подробно я с ним не разбирался, удалил почти сразу и поставил обратно политику тотального дропа и доступа только откуда надо. можно предположить, что большая нагрузка была вызвана высокой активностью попыток брутфорса :)
                                          0
                                          Каким образом он от ddos-а защищать будет? Да и медленный он для этого.

                                          А от брутфорса — это да, must have.
                                            0
                                            Я предпочел для тех же целей denyhosts.
                                            0
                                            Я замечал, что некоторые почтовые сервера пытаются при получении письма соединиться с отправляющим хостом, и если там нет smtp — отказываются принимать письмо.
                                            –3
                                            Некоторые админы вместо фаервола вешают все на нестандартные порты
                                              +2
                                              Некоторые хакеры, которым нужно сломать конкретный хост, не леняться просканировать все порты и проверить ответы по ним…
                                                +2
                                                некоторые хакеры и попробовать сбрутфорсить knockd не поленятся.
                                                  0
                                                  простите, но сколько времени необходимо на перебор knock последовательности хотя бы из 3 портов?
                                                  65535 ^ 3 = 281462092005375 вариантов.

                                                  при условии, что на сканирование хоста с drop правилом по умолчанию может уходить в среднем 2-3 минуты.

                                                  итого: ~1071012526 лет на перебор всех возможных вариантов упомянутой выше knock последовательности.
                                                    0
                                                    чтож вы все так придираетесь. То «некоторые админы» не нравятся тем что фаерволы не используют. То «некоторые хакеры» не вызывают доверия попыткой перебора…

                                                    Да. Долго. Да. От них есть эффективная защита.
                                                0
                                                Это спасёт от скрпит кидди, возрастом до 13 лет.
                                                  –4
                                                  это спасет и от взрослых хакеров, которые не умеют сканировать порты.
                                                    0
                                                    хакеров?)
                                                      +7
                                                      если угодно — ХаТсКеРоВ
                                                  0
                                                  Кто минуснул видимо считает что таких админов нет в природе.
                                                    +1
                                                    Это хорошо что такие есть, хехе :)
                                                  +2
                                                  Это только верхушка айсберга. Я занимаюсь профессиональной защитой серверов и могу сказать, что программисту лучше тратить время на написание программ, а сисадмину — на настройку сервера.
                                                  Каждому свое.
                                                    0
                                                    Понятно, что эта сфера требует более глубого изучения и полностью согласен с тем, что каждый должен заниматься своим делом, но можно для себя написать 1 скрипт настройки firewall и использовать его на всех проектах.
                                                      +1
                                                      с таким подходом главное не написать скрипт для рассчета зарплаты чтобы использовать его на всех проектах :)
                                                      +1
                                                      Вы тоже считаете что «закрывать порты» надо на тех серверах, на которых ничего лишнего не слушает внешний адрес? ) Или все-таки согласитесь, что при настройке этого сервера «квалифицированным админом FreeBSD» были допущены и другие ошибки?
                                                        0
                                                        Я думаю, он имел в виду, что для полноценной настройки фаервола нужно иметь некоторый опыт и знать множество неочевидных мелочей, упомянуть которые в нескольких комментариях к такой статье не представляется возможным. Дьявол в деталях, короче.
                                                    • UFO just landed and posted this here
                                                        0
                                                        А ещё не надо вешать внутренние сервисы на внешний ip, memcached, apache — всё должно быть на 127.0.0.1 (или интерфейсе внутренней сети).
                                                          0
                                                          Меня, кстати, удивил дефолтный конфиг memcached в последнем дебиане. Там он зачем-то слушает все интерфейсы. И если вовремя это не заметить — ты попался.
                                                            0
                                                            «Обычно apache перевешивают на порт 8080.»

                                                            нет, не «обычно». хотя бы потому что если кому то больное воображение подсказало свешать десяток вебсерверов на один сервер, то хотя бы вешать их на лупбак, а не на все интерфейсы подряд. и никаких фаерволов не надо.

                                                            скажу больше, правильно сконфигурированый апач со всем справился бы сам и не было надобности ни в nginx'е ни в фаерволе.

                                                            наглядный пример когда «мозг» важнее софта. «крутой одмин» это вовсе не тот кто может высрать рекордный по количеству буков конфиг. :(
                                                              0
                                                              Смелое утверждение.
                                                              Видимо, что мы на своих проектах (где сервера с nginx и 200.000 коннектов держат), и яндексы с рамблерами и прочими — просто не умеем настраивать apache :D
                                                                0
                                                                а причем здесь ваши коннекты и яндыксы? я про это ничего не говорил. речь о том что фаерволлы в контексте топика совсем не причем и уж тем более целый день для их настроек. что решает голова, а не количество используемого софта. а вы увидели в тексте «не было надобности в nginx'е» и завели заученную шарманку.

                                                                к слову, о шарманках, нет ничего глуппее apache'а, как баккенда для nginx'а, и уж тем более все это на одном хосте. :(
                                                              0
                                                              Полсотни комментариев и никого уже не смущает «безопасТность».
                                                                0
                                                                Спасибо, исправил
                                                                  0
                                                                  Хотите бесплатной вычитки вашей статьи? Разместите её на Хабре!
                                                                    0
                                                                    Толпы корректоров набегут…
                                                                0
                                                                Автор> Я понимаю, что это было «удачное» стечение обстоятельств, но просто закрытие портов уже бы помогло.

                                                                Не обязательно firewall'ом. У memcached должны быть свои средства запрета общения с чужими IP или просто возможность биндиться только к локальным интерфейсам. Т.е. если прикладной сервер сам по себе настроен правильно, то ставить «сверху» firewall — это только зря нагружать машину (и добавлять ей глюков).
                                                                  0
                                                                  одна из моих личных Best practice — если машина стоит более чем в метре от вашего раб. места, то файрволл лучше настроить заранее, чтобы потом не пришлось удаленно что-то настраивать рискуя обрубить себе возможность удаленного доступа :)
                                                                  Даже если кажется, что файрволл не нужен на начальном этапе — он может понадобится в любой момент, а при ПЕРЕнастройке отследить ошибку проще, чем при начальной конфигурации.
                                                                    0
                                                                    Моё мнение такое: лучше на любую машину сразу настраивать firewall по принципу что не разрешено, то запрещено. Если экспериментируете, то можно в крон добавить команду iptables -F, или в начало правил вставить полный доступ с вашего ip.
                                                                    В первый раз придётся самому писать или собирать из различных источников все правила, а уже потом пользоваться своей «болванкой».
                                                                      0
                                                                      Да, это само собой, firewall должен по умолчанию запрещать, а в скрипте должно стоять разрешение использовать ssh.
                                                                      Также всем советую не изобретать велосипед, а использовать готовые скрипты для генерации правил, когда это возможно, под debian советую погляде shorewall.
                                                                    0
                                                                    а в mysql на 3306 ты не тыкался?
                                                                    Там должно быть еще интересней :)

                                                                    А вообще о безопасности должны знать и помнить все, а заниматься отдельные люди…
                                                                      0
                                                                      Пробовал, но доступ был только с localhost.
                                                                      Да, конечно, должен заниматься отдельный человек, но не редко получается, что сервером занимается 1 человек.
                                                                        0
                                                                        0,5? :)

                                                                    Only users with full accounts can post comments. Log in, please.