Не секрет, что современный интернет напичкан различными ботами, которые пытаются проникнуть в "тело" Вашего сайта, попросту говоря - взломать его. Поэтому после установки LAMP сервера требуется настроить его таким образом, чтобы обезопасить себя от таких попыток.
Данная статья написана после обнаружения проникновения вируса на одном из моих сайтов, о чем было написано в этой статье. Поверьте, лучше обезопасить себя заранее, чем потом вычищать следы проникновения, или еще хуже - восстанавливать всю систему. Не повторяйте чужих ошибок! ;)
Итак LAMP сервер, как известно, состоит из Apache, Mysql, PHP. Идём по порядку
Защита Apache
Скрываем вывод версии Apache, информацию об операционной системе в сообщениях об ошибках. Такая информация появляется к примеру на странице, которая не найдена или запрещена для просмотра. Файл конфигурации в Ubuntu лежит тут
/etc/apache2/conf-available/security.conf
Тут выставляем значения
ServerTokens Prod
Server Signature Off
Теперь сервер не будет выдавать информацию о своей версии и версии операционной системы.
В настройках хостов, к Options добавляем
<Directory />
.... Options -Indexes ....
</Directory>
Защита PHP
Смотрим все подключённые модули PHP и отключаем не нужные. Список всех модулей можно увидеть введя в терминале команду
php -m
В файле настроек php.ini отключаем "небезопасные" функции, через которые злоумышленник обычно может получить "ненужную" ему информацию. Если у Вас уже есть отключенные функции в данной строчке, просто добавьте к ним следующие:
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open, eval, curl_exec, curl_multi_exec, parse_ini_file
В том же файле добавляем (раскомментируем или меняем значение)
register_globals=off safe_mode=off allow_url_fopen=Off allow_url_include=Off
Первые две функции были удалены начиная с версии php 5.4, так что, если у вас эта версия или более поздняя, не стоит себя утруждать.
Устанавливаем open_basedir .
open_basedir /home/user/site_dir/
Ограничивает указанным деревом каталогов файлы, которые могут быть доступны для PHP, включая сам файл. Эта директива НЕ подвержена влиянию безопасного режима.
Отключаем вывод версии php, его не за чем знать кому-то кроме вас
expose_php = Off
Защита Mysql
Если базы данных MySQL используются только вашим сервером (localhost), в конфигурационном файле установите
bind-address=127.0.0.1
После того, как изменили конфигурационные файлы apache, php, mysql можно защитить их от перезаписи, выполнив следующие команды из терминала:
# chattr +i /etc/php5/apache2/php.ini # chattr +i /etc/apache2/conf-available/* # chattr +i /etc/mysql/my.cnf
команда chattr +i сделает файлы неизменяемыми, даже root пользователь не сможет их изменить. Если вы применили данный приём, то это нужно запомнить и в дальнейшем, чтобы изменить эти файлы, сначала нужно будет выполнить ту же команду с параметром -i
# chattr -i filename