Настройка безопасности Debian 11 и оптимизация

Настройка безопасности Debian 11 и оптимизация

Настройка безопасности Debian 11 и оптимизация — инструкция и история того, как это сделал я. Искал что-то подобное в интернете, но находил примерно следующее: устаревшие инструкции; инструкции в духе «удали всё и точно станет работать лучше»; неполные инструкции. Этой публикацией я постараюсь восполнить этот пробел, систематизировав все те действия, которые использую я сам. Пост является продолжением статьи «Перенос сайта с Centos 7 + Vesta CP на Debian 11«. Если вам интересно, можете и его прочитать.

Изменения на стороне WordPress

Если вы не используете WordPress, то можете пропускать этот пункт. Хотя, возможно, будут и универсальные советы, которые можно применить и с другими CMS. Первым делом хочу напомнить не забывать об обновлении плагинов и других компонентов вроде самого же WordPress, так как это очень важно. Ставить ли автоматическое обновление — на ваше усмотрение. У меня оно не включено, так как я меняю тему под себя. Точнее, у меня включено обновление при выпуске исправлений и других важных деталей для самого WP. Этот пункт уж точно упускать не стоит, так как это вовсе не бесполезные минорные обновления, которые могут сделать только хуже. Хотя, кто знает…

Используйте плагины для оптимизации сайта. Даже если у вас nginx, либо какие-то ещё средства, плагины тоже могут быть полезны. Лично я использую «PajeSpeed Ninja» для оптимизации в целом и Smush для оптимизации картинок. Ну и плагин для «Яндекс турбо», если его тоже можно считать. Но и тут лучше не перестарайтесь. Советую ограничиться одним-двумя плагином для ускорения сайта, а не отдавать каждому плагину свою часть по оптимизации, это сделает только хуже. Так сказать, не «переоптимизируйте».

Не знаю как вы, но я не люблю мусор в html и css сайта, постоянно убираю оттуда все комментарии и всячески стараюсь оптимизировать. Не могу на это смотреть. Изображения же я сжимаю с помощью сторонних сайтов. То есть, сначала я уменьшаю изображение картинки (максимум 1000, другая величина зависимая) через Paint, потом на каком-нибудь сайте для сжатия я сжимаю картинку, а напоследок их проверяет ещё и Smush. Ненужные темы я советую удалить, оставив лишь 2 — используемую и запасную. Запасная нужна будет на случай проблем с основной.

Отдельным пунктом хочу рассказать вам о том, как уменьшить время загрузки главной и не только страниц, то есть со списком публикаций. В редакторе тем ищите файл с настройками списка публикаций. У меня этот файл называется «content-grid.php», но у вас может отличаться. Там находим следующий пункт:

<php the_post_thumbnail(); ?>

И в скобках пишем «thumbnail». Это позволит отображать вместо полных изображений миниатюры, что поможет вам уменьшить скорость загрузки.

Настройка безопасности Debian 11 и оптимизация

Поскольку я совершал перенос, я удалил ненужные файлы, которые зря занимали место. Также я оптимизировал саму тему и поменял картинки на главной странице на более маленькие, как объяснил чуть выше. Кажется банальностью, но это именно то, что нужно сделать первым делом — самое очевидное.

Отключаем отображение версии Apache. Эту информацию получить легко. Либо воспользовавшись сайтами для проверки заголовка сайта, либо зайдя на несуществующую страницу.

Открываем конфиг Apache2

nano /etc/apache2/apache2.conf

И добавляем (либо редактируем) следующие пункты:

ServerSignature Off
ServerTokens Prod
Настройка безопасности Debian 11 и оптимизация

Настройка sysctl. Настраиваем защиту от DDOS’а на уровне ядра.

nano /etc/sysctl.conf

Там нас интересуют следующие пункты:

#Защита от спуфинга
net.ipv4.conf.default.rp_filter = 1
#Фильтрация пакетов по адресу назначения
net.ipv4.conf.all.rp_filter = 1
#Проверка TCP-соединения каждую минуту
net.ipv4.tcp_keepalive_time = 60
#Интервал проверки
net.ipv4.tcp_keepalive_intvl = 10
#Количество проверок перед закрытием соединения
net.ipv4.tcp_keepalive_probes = 3
#Очередь соединений
net.ipv4.tcp_max_syn_backlog = 512
#Количество попыток передачи SYN-пакета
net.ipv4.tcp_syn_retries = 3
#Количество попыток ответа на запросы
net.ipv4.tcp_synack_retries = 3
#TCP Syncookies
net.ipv4.tcp_syncookies = 1
#Время ожидания приёма FIN
net.ipv4.tcp_fin_timeout = 15
#Обмен значениями максимального размера TCP окна
net.ipv4.tcp_window_scaling = 0
#Количество попыток до передачи сетевому уровню
net.ipv4.tcp_retries1 = 3
#Количество попыток до разрыва соединения
net.ipv4.tcp_retries2 = 5
#Запрет на новые соединения если их слишком много (на ваше усмотрение)
net.ipv4.tcp_abort_on_overflow = 1
#Ну и остальное
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.bootp_relay = 0
net.ipv4.conf.all.proxy_arp = 0
net.ipv4.conf.all.proxy_arp_pvlan = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_ecn = 0

Защита от DDOS’а с помощь iptables. Ещё одна мера.

#Снятие ограничений для localhost
iptables -A INPUT -i lo -j ACCEPT
#Разрешение пакетов по уже установленным соединениям
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Разрешение доступа только по http, https, ssh
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
#Сохраняем
service iptables save

Удаление или закрытие phpmyadmin. На прошлом VPS он у меня был установлен всё время, теперь же я использовал его лишь для импорта БД при переносе, в дальнейшем использовать его не буду, потому решил его удалить. Если не хотите, то можете закрыть к нему доступ, чтоб никто не мог зайти.

Удаление:

apt-get purge phpmyadmin
nano /etc/apache2/apache2.conf (Если удаляете, убираете ссылку на него, иначе сервер не включится)

Закрытие доступа:

nano /etc/phpmyadmin/apache.conf
<Directory /usr/share/phpmyadmin>
Order Deny,Allow
Deny from All
Allow from ВАШIPЛИБОNONE
</Directory>

Обходимся без NGINX. Apache я люблю больше, Nginx пока ещё использовать не хочу даже в связке, потому обойдёмся другими возможностями.

Включаем модули для кеширования:

sudo a2enmod deflate headers
systemctl restart apache2

Добавляем строку в конфиг Apache:

nano /etc/apache2/apache2.conf
Header set Cache-Control "max-age=31536000, public"

Используем PHP-FPM и FastCGI. Это будет полезно не только для улучшения производительности и безопасности, но ещё и поможет нам перейти на HTTP/2.

sudo a2dismod php7.4
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif
sudo apt install php7.4-fpm
a2enmod proxy_fcgi setenvif
a2enconf php7.4-fpm
systemctl reload apache2
sudo systemctl enable php7.4-fpm
sudo a2enconf php7.4-fpm

Используем HTTP/2. Это так же ускорит нас и увеличит безопасность. Поскольку мы выполнили предыдущий пункт, будет гораздо проще выполнить действия из этого пункта.

Настраиваем конфиги:

nano /etc/apache2/sites-enabled/САЙТ.conf

После строки «ServerName» добавляем следующий текст:

Protocols h2 http/1.1

Если у вас настроен ещё и https, к нему тоже дописываем.

Настройка безопасности Debian 11 и оптимизация

После этого:

sudo a2enmod http2
sudo reboot

Проверить можете либо через браузер, либо на сторонних сайтах.

Устанавливаем Fail2Ban. Очень полезное оружие против любителей подбирать пароли. Полюбилось мне ещё на прошлом VPS, так как помогло бороться со «злоумышленниками».

sudo apt install fail2ban
nano /etc/fail2ban/jail.conf

Настраиваем. Можете поставить более «мягкие» либо более «жёсткие» настройки. Как показала практика, эти настройки оказались достаточно работоспособными и отбили желание подбирать пароли.

bantime = 7d
findtime = 2m
maxretry = 2

Потом в другой файл.

nano /etc/fail2ban/jail.d/defaults-debian.conf

И тут:

[DEFAULT]
ignoreip = 127.0.0.1/8
[sshd]
enabled = true
findtime = 120
maxretry = 2
bantime = 604800

Настраиваем заголовки безопасности.

nano /etc/apache2/apache2.conf

Дописываем:

Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always append X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
Header always set X-Permitted-Cross-Domain-Policies "none"
Header always set Referrer-Policy "strict-origin"

На этом всё. Благодаря таким действиям я поднял оценку Google Pajes с 57 для мобильной версии и 75 компьютерной я смог поднять оценки до 74 для мобильной версии и 99 для компьютерной версии.