| categories:linux
Меры безопасности для защиты сервера - III
Checklist
- Использовать аутентификацию по ключам
- Настроить
firewall
- Использовать
VPN
- SSL/TLS шифрование
- Регулярный аудит работающих сервисов
- Отслеживать нежелательные изменения файлов
- Контейнеризация приложений
Отслеживать нежелательные изменения файлов
Чтобы понимать, что происходит на сервере и не происходит ли чего нехорошего я рекомендую использовать auditd
.
Устанавливается из репозитория.
sudo apt-get install auditd
В комплект пакета auditd
входит 4 утилиты:
auditctl
— управления демономauditd
;autrace
— аналогstrace
, позволяет отследить события в процессах;ausearch
— поиск событий в журналах;aureport
— генератор отчётов.
Правила для аудита задаются в /etc/audit/audit.rules
, укажем там несколько основных правил
-w /etc/hosts -p wa -k hosts_file_change
# -w {path} - директория или папка, которую отслеживаем
# -p {permissions} – какой доступ логировать (rwa)
# -k {key} - все логи записанные по этому правилу будут помечены этим ключом
Перезапускаем демона и проверяем конфигурацию
sudo service auditd restart
sudo auditctl -l
Чтобы не углубляться в подробности работы ядра, а просто включить аудит с приемлемыми настройками по умолчанию
auditd
поставляется с набором готовых конфигураций, соответствующих промышленным стандартам. На мой взгляд, стандарт
NISPOM включает в себя оптимальные правила.
cd /usr/share/doc/auditd/examples
sudo gunzip nispom.rules.gz
sudo sh -c 'sudo cat nispom.rules > /etc/audit/audit.rules'
Полезные команды:
sudo ausearch -m USER_LOGIN --success no --start today # Все неудачные плпытки входа
ausearch -m help 2>&1 | awk -v RS=' ' '/^[A-Z]{2}/{ print }' | sort # Список всех типов событий
Утилита aureport
без параметров показывает сводный отчет по количеству событий каждого типа, с ключом --help
выведет на экран список всех доступных отчетов, которые можно посмотреть и проанализировать по отдельности.
- AIDE - Advanced Intrusion Detection Environment
- rkhunter - Rootkit checker (set
UPDATE_MIRRORS=1
,MIRRORS_MODE=0
andWEB_CMD=""
) - chkrootkit - One more rootkit checker
Контейнеризация приложений
Все меры безопасности, предпринимаемые не имеют смысла, если на нашем сервере нет клиентских приложений. Поскольку эти приложения обрабатывают внешние соединения - это наиболее уязвимая часть сервера. Извне к серверу может обратиться любой злоумышленник, поэтому всё, что находится в открытом доступе, мы изолируем от остальной системы при помощи технологии контейнеризации.
Предположим, что у нас есть бложик на Wordpress. Обернем его в контейнеры, чтобы обезопасить свой сервер.
Ставим свежую версию Docker из внешнего репозитория.
sudo apt-get install apt-transport-https \
ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-compose
sudo usermod -aG docker $USER
Создаем файл docker-compose.yml
со следующим содержимым:
version: "3"
services:
reverse-proxy: # в качестве reverse-proxy используем nginx
image: nginx:stable-alpine
ports:
- "80:80"
- "443:443"
volumes:
# слева - путь к конфигам nginx
- ./nginx:/etc/nginx/conf.d
# логи нам нужны булут для аудита
- /var/log/nginx:/var/log/nginx
# монтируем контент, чтобы nginx отдавал статику напрямую
- ./petrashov.ru:/var/www/html
# и SSL сертификаты тоже нужно не забыть пробросить в контейнер
- /etc/ssl/:/etc/ssl
blog:
image: wordpress:fpm-alpine
volumes:
- ./petrashov.ru:/var/www/html
environment:
- WORDPRESS_DB_NAME: wordpress
- WORDPRESS_TABLE_PREFIX: wp_
- WORDPRESS_DB_HOST: db
# пароль задаем в переменой окружения
- WORDPRESS_DB_PASSWORD: ${WP_DB_USER_PASSWORD}
db:
image: mariadb:latest
volumes:
- ./petrashov.ru_20180808.sql.gz:/docker-entrypoint-initdb.d/db.sql.gz
environment:
- MYSQL_ROOT_PASSWORD: ${WP_DB_USER_PASSWORD}
Содержимое директории /docker-entrypoint-initdb.d/
контейнер при старте исполняет, поэтому туда можно
положить дамп базы.
Для конфига nginx
нужно помнить, что php-fpm
обрабатывающий wordpress
доступен по адресу blog:9000
Поднимаем всё это командой docker-compose up -d
. Несколько полезных команд.
docker-compose logs # Посмотреть логи. Флаг -f работает так же как в tail.
docker-compose ps # Состояние контейнеров описанных в compose файле
docker-compose stop # {имя контейнера} остановить контейнер
На этом считаю чек-лист оконченным. Описанных мер безопасности должно хватить для обеспечения безопасности небольшого личного сервера. Но не стоить успокаивать на этом свою внутреннюю паранойю. Даже если никто не видит суслика, помните — он есть.