Security tips
SSL
Предоставляет шифрование соединения сайта, повышение его в поисковой выдаче и подтверждает аутентичность сайта.
Инструкция к получению SSL сертификата: Lets Encrypt
SSH
- SSH-ключи, а не пароли
Пароли подбираются - Используй актуальные алгоритмы шифрования и размеры ключей
- Следи за файловыми permission-ами на SSH-ключи
- fail2banfail2ban
Защита ОС
-
Вовремя обновляй ядро, пакеты (
apt upgrade
) и дистрибутив (do-release-upgade
) -
Используй unattended-upgradesunattended-upgrades
Пакет, который реализует механизм автоматических обновлений.
Настраивается, по дефолту настроен на security upgrades (обновления пакетов только из security-репозитория).
Является родным механизмом для Debian-based дистов. -
Для “технических” юзеров используй shell /usr/sbin/nologin или просто /sbin/nologin
Даже если такая учётка скомпрометируется - войти в консоль с ней не удастся
Такие юзеры используются для запуска скриптов и т.д. -
Бэкапыbackup
-
auditd (Linux Audit Daemon)auditd
Позволяет отслеживать многие типы событий:- доступ к файлам и изменение прав на них
- выявление пользователей, изменивших конкретный файл
- несанкционированные изменений
- мониторинг системных вызовов и функций
- обнаружение сбоев и т.д.
- мониторинг вводимых команд
Настройки ядра (Sysctl)
/etc/sysctl.conf - конфиг-файл для установки системных переменных. Загружаются и применяются во время запуска системы.
# Защита от атак, связанных с выполнением вредоносного кода
kernel.exec-shield=1
kernel.randomize_va_space=1
# Включает защиту от подмены IP-адресов
net.ipv4.conf.all.rp_filter=1
# Отключение маршрутизации IP-источников
net.ipv4.conf.all.accept_source_route=0
# Игнорирование широковещательных запросов
net.ipv4.icmp_echo_ignore_broadcasts=1
# Настройка, обеспечивающая логирование поддельных пакетов
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Отключение перенаправления маршрутизации IGMP
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
# Отключает ключ magic-sysrq
kernel.sysrq = 0
# Отключает tcp_sack
net.ipv4.tcp_sack = 0
# Отключает tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Включает защиту от TCP SYN Cookie
net.ipv4.tcp_syncookies = 1
# Включает защиту от плохих сообщений об ошибках
net.ipv4.icmp_ignore_bogus_error_responses = 1
Чтобы подтянуть настройки нужно:
sudo sysctl -p
Поиск руткитов, бэкдоров и локальных уязвимостей
Wordpress
- Защити доступ к web-UI админки SSL-сертификатом и ограничь туда кол-во попыток логина
- Юзай всякие security plugins в wordpress
- Запрети запуск PHP-скриптов из untrusted директорий
- Разграничивай роли юзеров wordpress
- Переименуй юзера Admin…
MySQL
- Разграничивай роли юзеров MySQL
- Запрети удаленный доступ в root
- Юзай TLS для защиты соединений с БД
- Юзай скрипт
mysql_secure_installation
Nginx
-
Выставь
server_tokens off
Позволяет не выдавать версию nginx.
Знание версии любого приложения сужает круг поиска уязвимостей. -
Отключи неиспользуемые http-методы
-
Юзай WAF (opensource WAF - mod_security)
-
Включи логи и мониторь их
-
Выставь выбор шифров на стороне сервера
ssl_prefer_server_ciphers on
Заголовки безопасности
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN"
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always
add_header X-XSS-Protection "1; mode=block"
Prometheus
Настрой базовую http-аутентификацию: Prometheus basic auth