ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как обезопасить свой LAMP сервер

Как обезопасить свой LAMP сервер

Стек LAMP, который стоит на Linux и состоит из: Apache, MySQL/MariaDB и PHP/Python/Perl является очень популярным сочетанием свободного и открытого программного обеспечения и используется сегодня для запуска миллионы сайтов. Хотя многие выбирают для более эффективного стека LEMP на основе Nginx вместо Apache, есть еще значительное число пользователей, которые выбирают LAMP для своих проектов. На самом деле, более 30% активных сайтов сегодня работают на верхней части LAMP. Стек считается надежным и очень подходит для работы с высокой производительностью и доступностью веб – приложений. В этой статье мы собираемся показать вам, как защитить стек LAMP на вашем Linux VPS.

Защита Linux

Включение автоматического обновления

Имеется в виду, что стек LAMP основан на Linux и все сообщества с открытым исходным кодом работает над улучшениями, он считается безопасным тоже. На Ubuntu VPS, все обновления безопасности и патчи доступны для автоматической установки, как только они станут доступны в репозиториях Ubuntu, поэтому убедитесь, что вы настроили систему на автоматическую установку обновлений безопасности, если вы беспокоитесь о безопасности, В случае, если эта функция не включена на сервере, и вы не устанавливаете последние обновления и исправления вручную, вы ставите свой сервер под угрозой взлома.

Для включения автоматического обновления без присмотра, вы должны установить пакет unattended-upgrades.

sudo apt-get install unattended-upgrades

 

Чтобы настроить какие категории пакетов будут автоматически обновлены, вы должны отредактировать файл /etc/apt/apt.conf.d/50unattended-upgrades.

Настройка брандмауэра

Имея правильно настроенный брандмауэр очень важно для общей безопасности. UFW является инструментом конфигурации брандмауэра по умолчанию для Ubuntu и изначально отключен. Чтобы включить UFW вы можете использовать:

sudo ufw enable

 

Разрешить доступ к основным услугам, как OpenSSH и Apache:

sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443

 

Включение доступа к другим сервисам довольно легко. Просто замените номер порта в приведенных выше примерах на номер порта службы, который вы хотите, чтобы обеспечить доступ к и это все. Правила брандмауэра будут активны даже после перезагрузки системы.

Отключение неиспользуемых служб

Если у вас есть активные услуги, которые вы не используете, вы можете просто отключить их. Например, если у вас есть службы, как Dovecot и работает на сервере, и вы не используете его, остановите и отключите службу, используя следующие команды:

sudo systemctl stop dovecot.service
sudo systemctl disable dovecot.service

Установка fail2ban

Fail2ban это сервис, который сканирует файлы журнал для слишком многих неудачных попыток входа и блокирует IP – адрес, который показывает вредоносный код. Эта услуга очень полезна, если вы не используете двуфакторную аутентификацию или услуги частных механизмов аутентификации, такие как OpenSSH. Для того, чтобы установить Fail2ban, выполните следующую команду:

sudo apt-get install fail2ban

 

Создайте копию файла конфигурации по умолчанию, так что вы можете смело вносить изменения:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

 

Редактирование файла jail.local:

sudo nano /etc/fail2ban/jail.local

 

Блок [SSHD] должен выглядеть следующим:

[sshd]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5
bantime = 600

 

Сохраните файл и перезапустите Fail2ban для того, чтобы изменения вступили в силу:

sudo systemctl restart fail2ban.service

 

Включить Fail2ban при загрузке системы:

sudo systemctl enable fail2ban.service

Безопасность Apache

Скройте конфиденциальную информацию в Apache

По умолчанию конфигурация в Apache обеспечивает много конфиденциальной информации, которая может быть использована против службы. Необходимо эту информацию скрыть, поэтому мы далее создадим файл конфигурации для новых установок:

sudo nano /etc/apache2/conf-available/custom.conf

 

Вставьте следующее содержание:

ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header unset ETag
Header always unset X-Powered-By
FileETag None

 

Включите заголовки модуля Apache, если он еще не включен:

sudo a2enmod headers

 

Включите конфигурацию:

sudo a2enconf custom.conf

 

Перезапустите Apache для того, чтобы изменения вступили в силу:

sudo systemctl restart apache2.service

Установите и включите mod_security

Mod_security это веб-приложение брандмауэра (WAF), который может быть установлен в качестве дополнительного модуля для Apache. Он может быть использован для защиты веб-сервера от многочисленных атак, таких как инъекции SQL, захват сеанса, межсайтовый скриптинг, плохих пользовательских агентов и многие другие. Для того, чтобы установить и включить mod_security, запустите следующие команды:

sudo apt-get install libapache2-modsecurity
sudo a2enmod security2

 

После установки вы должны настроить модуль и включить OWASP ModSecurity Core Rule Set (CRS).

sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

 

Затем откройте файл /etc/modsecurity/modsecurity.conf и отредактируйте/добавьте следующие параметры:

SecRuleEngine On
SecResponseBodyAccess Off
SecRequestBodyLimit 8388608
SecRequestBodyNoFilesLimit 131072
SecRequestBodyInMemoryLimit 262144

 

Сохраните и закройте файл. Удалите текущий CRS и загрузите OWASP CRS с помощью следующих команд:

sudo rm -rf /usr/share/modsecurity-crs
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs
cd /usr/share/modsecurity-crs
sudo mv crs-setup.conf.example crs-setup.conf

 

Отредактируйте файл /etc/apache2/mods-enabled/security2.conf. Он должен выглядеть как на картинке ниже:

<IfModule security2_module>
 SecDataDir /var/cache/modsecurity
 IncludeOptional /etc/modsecurity/*.conf
 IncludeOptional "/usr/share/modsecurity-crs/*.conf"
 IncludeOptional "/usr/share/modsecurity-crs/rules/*.conf
</IfModule>

 

И, наконец, перезапустите Apache для того, чтобы изменения вступили в силу:

sudo systemctl restart apache2.service

Установите и включите mod_evasive

Mod_evasive является модулем Apache, который может быть использован для защиты веб-сервера от DoS (отказ в обслуживании), DDoS (Распределенный отказ в обслуживании) и грубой силы атаки. Чтобы установить mod_evasive на сервере, выполните следующую команду:

sudo apt-get install libapache2-mod-evasive

 

Откройте файл конфигурации по умолчанию в /etc/apache2/mods-enabled/evasive.conf и измените настройки, чтобы они выглядели, как показано ниже:

<IfModule mod_evasive20.c>
<IfModule mod_evasive20.c>
 DOSPageCount 5
 DOSSiteCount 50
 DOSPageInterval 1
 DOSSiteInterval 1
 DOSBlockingPeriod 600
 DOSLogDir "/var/log/mod_evasive"
</IfModule>

 

Сохраните и закройте файл. Создайте каталог для файлов журнала:

sudo mkdir /var/log/mod_evasive
sudo chown -R www-data: /var/log/mod_evasive

 

Перезапустите Apache:

sudo systemctl restart apache2.service

Безопасный MySQL

Защита сервера MySQL

Первое, что нужно сделать, чтобы защитить службу MySQL, это запустить сценарий mysql_secure_installation.

sudo mysql_secure_installation

 

Сценарий поможет вам выполнить важные задачи по обеспечению безопасности, как настройки корневого пароля, отключение удаленного входа администратора, удаление анонимных пользователей и т.д.

Отключение удаленного доступа MySQL

Если вы не будете выполнять удаленные операции над вашим MySQL сервером, отключите удаленный доступ к сервису. Вы можете сделать это путем редактирования файла /etc/mysql/mysql.conf.d/mysqld.cnf и изменение Bind-адрес на 127.0.0.1.

bind-address = 127.0.0.1

 

Перезапустите службу для того, чтобы изменения вступили в силу.

sudo systemctl restart mysql.service

Создание отдельных пользователей MySQL

Еще одна вещь, которую вы должны рассмотреть, является создание отдельных пользователей MySQL для каждой базы данных и приложения.

Войдите в MySQL как root:

mysql -u root -p

 

Вы можете создать базу данных MySQL и предоставить все привилегии для нового пользователя с помощью следующих команд:

mysql> CREATE DATABASE new_db;
mysql> GRANT ALL PRIVILEGES on new_db.* to 'new_user'@'localhost' identified by 'PaSsW0rD';
mysql> FLUSH PRIVILEGES;
mysql> EXIT

 

Затем вы можете использовать вновь созданную базу данных и пользователя для вашего приложения.

Отключите LOCAL INFILE

Если вы явно не используететсь LOCAL INFILE, то это хорошо, чтобы отключить его. Опять же, отредактируйте конфигурационный файл MySQL и добавьте следующую строку под блоком [mysqld]:

local-infile=0

 

Перезапустите службу MySQL для того, чтобы изменения вступили в силу.

Защита PHP

Если вы выполнили описанные выше действия, ваш сервер должен быть уже в безопасности. Последняя часть защиты сервера LAMP является защита PHP, которая является довольно простым процессом. Найдите местоположение файла ini в PHP:

php --ini | grep "Loaded Configuration File"

 

Все изменения, которые мы будем делать в этот файл.

Скрыть основную информацию в PHP

Первый шаг, это скрыть информацию, предоставленную PHP, который некоторые злоумышленники могут воспользоваться. Откройте файл php.ini и изменить настройки, чтобы они соответствовали следующим образом:

expose_php = Off
display_errors = Off
mail.add_x_header = Off

 

Сохраните файл и перезапустите Apaсhe:

sudo systemctl restart apache2.service

Отключение опасных функций PHP

Директива Disable_functions позволяет отключить некоторые функции, которые могут быть вредны для вашей системы. Измените директиву в вашем файле php.ini, чтобы соответствовать следующим образом:

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

Ограничение загрузки файлов

Если вы не используете функции загрузки файлов полностью, безопасно ограничить загрузку файлов в PHP. Откройте файл php.ini и установите следующий параметр:

file_uploads=Off

 

В случае, если вы используете функции загрузки файлов можно установить следующее:

file_uploads=On
upload_max_filesize=1M

где upload_max_filesize является ограничением размера загрузки.

Перезапустите Apache после внесения этих изменений.

Установить максимальное время выполнения

Опять же, отредактируйте файл php.ini и измените следующие параметры:

max_execution_time = 30
max_input_time = 30
memory_limit = 40M

 

Это устанавливает максимальное время в секундах сценарий, которое разрешено запускать или синтаксического анализа данных, а также установит максимальный объем памяти, который можно выделить скрипту.

Включить open_basedir

Директива open_basedir позволяет установить местоположение, из которого PHP разрешается доступ к файлам. Отредактируйте фал php.ini и установите правильное расположение, чтобы соответствовать текущей конфигурации:

open_basedir="/path/to/the/directory/"

 

Не забудьте перезапустить Apache, чтобы изменения вступили в силу.

Exit mobile version