Если вы занимаетесь веб-разработкой, вы наверняка знакомы с понятием LAMP. Давайте разберемся, как надежно защитить каждый компонент стэка от атак и посягательств злоумышленников.
Защищаем Linux
1. Автоматические обновления
Исключить возможность взлома поможет автоматическая установка обновлений безопасности. Конечно, многие разработчики считают эту функцию лишней, и оставляют установку обновлений в своих руках, но в таком случае стоит помнить, что ручное обновление может повысить риск незаконного проникновения на сервер.
Чтобы включить автообновления, установите пакет unattended-upgrades.
2. Настройка брандмауэра
В Linux Ubuntu инструмент настройки брандмауэра UFW по умолчанию деактивирован. Включить его можно одной командой: sudo ufw enable. После активации откройте доступ к OpenSSH и Apache, а при необходимости разрешите доступ и к другим сервисам командой sudo ufw allow [номер порта].
3. Отключение ненужных служб
Если вам не нужны какие-то из работающих на сервере служб, деактивируйте их.
4. Защищаем Apache
Fail2ban
Утилита для веб-cервера на Ubuntu, призванная регистрировать несанкционированные вторжения. ПО следит за файлами журналов и регистрирует неудавшиеся попытки входа, их количество, а также обнаруживает автоматические атаки. Когда утилита распознает попытку компрометации, происходит блокировка IP, с которого совершались запросы. В iptables просто добавляется новая цепочка, и атаку на сервер можно считать неудавшейся.
Модуль mod_evasive
Еще одна утилита для защиты Apache от DoS- и DDoS-атак. Модуль также работает с IP-адресами, выявляя те, с которых происходят подозрительные запросы, и помещая добавляя их в черный список.
Защита информации
По дефолту Apache хранит большое количество информации, требующей защиты, поэтому для обеспечения безопасности веб-сервера конфиденциальные данные лучше всего скрывать. Это можно сделать через conf-файл. Сначала создайте файл "custom.conf" в папке conf-available веб-сервера Apache и вставьте туда следующие строки:
***
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header unset ETag
Header always unset X-Powered-By
FileETag None
***
После этого включите конфигурацию командой sudo a2enconf custom.conf и перезагрузите Apache. Вы великолепны!
5. Защита MySQL
Для этого необходимо выполнить всего несколько шагов:
- запустить сценарий безопасности: sudo mysql_secure_installation;
- деактивировать удаленный доступ;
- создать отдельных пользователей и настроить привилегии для каждого из них;
- деактивировать LOCAL INFILE через conf-файл;
6. Защита PHP
Если вы перешли к защите PHP, надеемся, вы действительно обеспокоились вопросами безопасности LAMP-сервера и выполнили все предыдущие шаги. Остался последний этап — защита PHP.
Через php.ini скройте основные данные, полученные от PHP, приведением настроек к следующему виду:
***
expose_php = Off
display_errors = Off
mail.add_x_header = Off
***
Не забудьте выполнить перезапуск Apache, чтобы настройки стали актуальны.
Некоторые функции PHP могут представлять определенную угрозу безопасности веб-сервера. Чтобы минимизировать риски, необходимо деактивировать их через php.ini. Прежде всего, настройте disable_functions:
disable_functions = show_source,system,shell_exec,passthru,exec,phpinfo,popen,proc_open,allow_url_fopen,curl_exec,curl_multi_exec
Затем в том же файле выключите функцию удаленного исполнения PHP:
***
allow_url_fopen=Off
allow_url_include=Off
***
Чтобы ограничить максимальное время исполнения найдите в файле настройки max_execution_time, max_input_time и memory_limit и замените их значения на 30, 30 и 40M соответственно.
Дополнительно можно активировать open_basedir, директиву, регулирующую доступ к файлам на сервере.
Вы прекрасны, а ваш LAMP-сервер защищен. Используете иные методы защиты? Поделитесь ими в комментариях, — коллеги будут вам благодарны.
Понравилась статья? Тогда ставьте лайк и подписывайтесь на канал, чтобы не пропускать новые выпуски!