Мы используем PHP, MySQL, SVN и Apache. Я хочу знать, полагаю ли я, что локальная подсеть является надежной, и разрешаю ли все порты в нашей подсети с помощью iptables, а затем разрешаю только порт 80 как открытый для «всех». Если это «хорошая безопасность», то предполагается, что подсеть доверена как предпосылка. Это также предполагает хороший PHP-код и т. Д., И что apache настроен правильно.
Это использует CentOS 5.
Нет, демонстративно нет. На самом деле порт 80, вероятно, самый опасный порт, который вы можете открыть в современной системе. Также отсутствие https: // (tcp 443) означает, что все ваши идентификаторы сеанса утекают. Отказ от использования https является явным нарушением A3: «Сломанная проверка подлинности и управление сеансами» в топ-10 OWASP за 2010 год.
Хороший способ защитить себя - это запустить брандмауэр веб-приложений (WAF), например Mod_Secuirty. WAF сильно отличается от «межсетевого экрана с фильтром пакетов», такого как iptables.
Я также рекомендую запустить сканирование уязвимостей вашей системы, например Acunetix или вапити. Убедитесь, что ваша система регулярно обновляется: yum upgrade
. Бегать PhpSecInfo и настройте свой php.ini так, чтобы не отображался КРАСНЫЙ. Конфигурация PHP по умолчанию ужасно небезопасна, она стала лучше (по умолчанию отключение удаленных файлов и register_globals), но все еще очень плохо.
Я бы сказал, что проблема в следующем:
«Предполагая хороший PHP-код».
Вы не можете принимать это как должное. В идеале этот сервер должен находиться в DMZ, где LAN может получить к нему доступ, но DMZ не может получить доступ к LAN. Идея состоит в том, что вы предполагаете, что ваш общедоступный сервер будет скомпрометирован, а затем вы хотите ограничить ущерб. Имея отдельный брандмауэр между вашей локальной сетью и DMZ, вы, вероятно, ограничите ущерб. Таким образом, при настройке DMZ подрывная деятельность, вероятно, не будет осуществляться на общедоступном сервере. Если вы не можете позволить себе этот дополнительный сервер, создание виртуальной машины и размещение на ней общедоступного сервера может быть своего рода DMZ для бедняков.
Я также предпринял бы дополнительный шаг, чтобы открыть только те порты для локальной подсети, которые необходимы (вам, вероятно, нужно больше доверять своей локальной сети, но все же ограничьте ее, если можете). Вероятно, их будет не так много, если вы используете модуль состояния (настройка по умолчанию redhat / centos).
Также не забывайте об обновлениях безопасности для ОС и приложений.
Если все в безопасности, значит, у вас достаточно безопасности. К сожалению, первая часть этого предложения редко бывает верной. Открывайте только те порты, которые требуются, даже в доверенной сети.
ну .. не ограничивайте только входящие соединения. исходящие тоже фильтровать. и отфильтруйте их как локально в таблице OUTPUT, так и на маршрутизаторе.
в популярных скриптах так много дыр ... минимизируйте потери в случае, если ваш сервер станет владельцем.
разрешить исходящий ESTABLISHED, RELATED [очевидно], возможно, на несколько хостов с обновлениями ОС, возможно, на ваш сервер ретрансляции smtp ... и все. Таким образом, вы предотвратите загрузку вредоносного ПО, распространение спама и т. д.
Я согласен с @The Rook в этом - реальная опасность заключается в огромной функциональности, скрывающейся за 80. Если вы пишете код веб-приложения, независимо от языка, я поспешно рекомендую вам быстро научиться писать безопасный код и создавать безопасные проекты. . Никакая защита брандмауэра не защитит вас от дрянного веб-приложения.