UbuntuHardeningFramework — Bash скрипты для автоматического усиления защиты на сервере Ubuntu
Основные наборы инструментов включают обнаружение вторжений SSH, развертывание RKHunter, Lynis, брандмауэра, усиление защиты сетевого ядра, общей памяти и SSH. Со всеми остальными функциями вы можете ознакомится внутри репозитория или далее в статье на русском языке.
Основной набор инструментов:
- Обнаружение вторжений по SSH (пользовательский демон) /w Оповещения по электронной почте и журналы
- Auditd (усиленная конфигурация) - /w Оповещения по электронной почте и журналы
- Автоматическое развертывание Fail2Ban (усиленная ограничительная конфигурация с постепенными запретами) - /w Оповещения по электронной почте, журналы и белый список
- Автоматическая установка обновления (безопасность и критическое развертывание) - Задания Cron, оповещения по электронной почте и журналы
- Автоматическое развертывание RKHunter - Сканирование, оповещения по электронной почте и задания Cron (ежедневно) (еженедельно) / с отчетами по электронной почте и журналами
- Автоматическое развертывание Lynis - Сканирование, сборка исходного кода, снятие отпечатков пальцев, оповещения по электронной почте и задания Cron (ежедневно) (еженедельно) / с отчетами и журналами электронной почты
- Развертывание брандмауэра (UFW) - Отказ по умолчанию, тестирование перед развертыванием, оповещения и журналы по электронной почте
- Автоматическое развертывание защиты общей памяти и ограничений (/run/shm)
- Автоматизированное развертывание защиты сетевого ядра (защита стека TCP/IP) (например, предотвращение DDoS-атак, ICMP, SYN-Flood и т.д.)
- Автоматизированное развертывание AppArmor - Настраиваемые профили обеспечения безопасности и ведение журнала
- Автоматическое развертывание политики паролей - Очень консервативная конфигурация и ведение журнала (например, сложность пароля, длина и т.д.)
- Автоматическое развертывание защиты SSH - включает в себя MFA, аутентификацию на основе ключей и усиленную конфигурацию (например, AllowUsers, AllowGroups и т.д.)
Дополнительные инструменты:
- Генерация SSH-ключей, сканирование ключей и сценарии развертывания (опционально)
- Создание учетной записи администратора и защита (опционально)
- Наборы инструментов для развертывания конфигурации AWS DKIM и DMARC (опционально)
- Автоматическое развертывание службы Postfix (опционально)
Подготовка к установке
В процессе установки есть несколько важных шагов. Сначала вам нужно убедиться, что ваша система обновлена и в ней установлены необходимые пакеты.
apt update && apt upgrade -y
apt install -y git
Затем вы можете клонировать репозиторий и перейти к каталогу.
git clone https://github.com/error-try-again/auto-harden-ubuntu.git
cd auto-harden-ubuntu/
Если это чистая установка, и вы еще не создали отдельную учетную запись пользователя, которая будет использоваться для входа на сервер, сейчас самое время. Она также будет использоваться для административного доступа. Следующий скрипт автоматизирует этот процесс.
./security/create_administrative_user.sh <your_new_user>
Подготовка ключа SSH
Далее мы можем продолжить и создать новый SSH-ключ для учетной записи пользователя (на вашем локальном компьютере) или использовать существующий один или несколько.
0 % ssh-keygen -t ed25519 -C "void@null"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/void/.ssh/id_ed25519): /home/void/.ssh/void-ed25519
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/void/.ssh/void-ed25519
Your public key has been saved in /home/void/.ssh/void-ed25519.pub
The key fingerprint is:
SHA256:0pOxo... void@null
void@null ~/.ssh
1 % cat void-ed25519.pub # Copy this key
Конфигурация
Далее, важно отметить, что проект может быть выполнен непосредственно с помощью одного скрипта или в виде серии отдельных автономных скриптов. Если вы выполняете его как отдельный скрипт, вы можете изменить файл config.sh, включив в него сопоставления ключей SSH, разрешенных пользователей SSH, IP-адреса из белого списка Fail2Ban и оповещения по электронной почте.
- Сопоставления ключей SSH можно настроить так, чтобы автоматически разрешать доступ PKE к определенным учетным записям пользователей через SSH.
- Доступ к серверу можно ограничить для определенных пользователей, изменив csv-список allowed_ssh_users.
- IP-адреса, внесенные в белый список, могут быть добавлены в csv-список ip_whitelist, чтобы предотвратить их блокировку Fail2Ban.
- Оповещения по электронной почте можно настроить, изменив переменные отправителя и получателей соответственно.
По умолчанию установщик попытается установить и настроить службу переадресации почты на ваш сервер электронной почты, чтобы скрипты могли отправлять оповещения и журналы. Чтобы пропустить это, просто проигнорируйте переменные отправителя и получателей в файле config.sh.
Измените файл config.sh чтобы он выглядел следующим образом:
#!/usr/bin/env bash
# Users are separated by a new line and keys are separated by a comma.
# You can add as many keys or users as you'd like.
allowed_ssh_pk_user_mappings="admin:ssh-rsa AAAAB3NzwnBnmkSBpiBsqQ== void@null
void:ssh-rsa AAAAB3NzwnBnmkSBpiBsqQ== void@null,ssh-ed2551 AAIDk7VFe example.eg@example.com"
# Users are separated by a comma. These are the users that are allowed to SSH into the server.
allowed_ssh_users="your_user,another_user"
# Whitelisted IPs are separated by a comma. These IPs will not be banned by Fail2Ban.
ip_whitelist="your_ip/32"
# Email alerts are sent from the sender to the recipients. If you want to add multiple recipients, separate them by a comma.
sender="void@your-domain.com.au"
recipients="your-main-email@another-domain.com"
# SSH Port for UFW and SSHD
ssh_port=2783
export allowed_ssh_pk_user_mappings allowed_ssh_users ip_whitelist sender recipients ssh_port
Рассылка и оповещения
Следующий сценарий поможет вам настроить службу переадресации почты на ваш сервер электронной почты, чтобы скрипты могли отправлять оповещения и журналы. В противном случае вы можете пропустить этот шаг. Он настроен на установку и настройку Postfix для пересылки всей почты в ваш сервер электронной почты по протоколу SMTP/TLS на порт 587. Скрипт также установит необходимые пакеты аутентификации SASL и настроит ретрансляцию с аутентификацией по паролю. Пароли хэшируются и хранятся в файле /etc/postfix/sasl_passwd. Все конфигурации проверяются, создаются резервные копии и ставятся временные метки.
/mail# ./postfix_forwarding_service_installer.sh public.void@mydomain.com.au email-smtp.ap-southeast-2.amazonaws.com
Скрипт запросит у вас имя пользователя и пароль SMTP. Как только вы введете их, скрипт проверит конфигурацию и перезапустит службу Postfix
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package 'sendmail' is not installed, so not removed
0 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
postfix is already the newest version (3.6.4-1ubuntu1.3).
libsasl2-modules is already the newest version (2.1.27+dfsg2-3ubuntu1.2).
0 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
Updated sendmail_path in /etc/postfix/main.cf.
Updated mailq_path in /etc/postfix/main.cf.
Updated newaliases_path in /etc/postfix/main.cf.
Updated html_directory in /etc/postfix/main.cf.
Updated manpage_directory in /etc/postfix/main.cf.
Updated sample_directory in /etc/postfix/main.cf.
Updated readme_directory in /etc/postfix/main.cf.
Enter SMTP username: TEST
Enter SMTP password: postmap: name_mask: ipv4
postmap: inet_addr_local: configured 4 IPv4 addresses
postmap: open hash /etc/postfix/sasl_passwd
postmap: Compiled against Berkeley DB: 5.3.28?
postmap: Run-time linked against Berkeley DB: 5.3.28?
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri 2024-03-01 22:41:53 AEST; 26ms ago
Docs: man:postfix(1)
Process: 1469773 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1469773 (code=exited, status=0/SUCCESS)
CPU: 940us
Mar 01 22:41:53 null systemd[1]: Starting Postfix Mail Transport Agent...
Mar 01 22:41:53 null systemd[1]: Finished Postfix Mail Transport Agent.
Validating Postfix configuration...
Postfix configuration is valid.
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri 2024-03-01 22:41:55 AEST; 22ms ago
Docs: man:postfix(1)
Process: 1470205 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1470205 (code=exited, status=0/SUCCESS)
CPU: 931us
Mar 01 22:41:55 null systemd[1]: Starting Postfix Mail Transport Agent...
Mar 01 22:41:55 null systemd[1]: Finished Postfix Mail Transport Agent.
Postfix configuration successfully completed.
Установка
Выполняем скрипт:
pwd # /hardening
chmod +x automated_hardening.sh
./automated_hardening.sh
Либо запустить несколько отдельных скриптов - обратите внимание, что при запуске не будут настроены оповещения по электронной почте.
cd /hardening/standalones
find . -type f -name '*.sh' -exec sudo bash {} \;
Чтобы пропустить установку определенного инструмента, вы можете использовать следующую команду:
cd /hardening/standalones
find . -type f -name '*.sh' ! -name 'setup_ssh_intrusion_detection.sh' -exec sudo bash {} \; # Skip SSH Intrusion Detection
```**
Or individually - note certain toolkits use commandline arguments to enable email alerts and more specialized use cases.
```bash
cd /hardening/standalones
chmod +x *.sh
./setup_auditd.sh
# etc...
Если по какой-либо причине вам необходимо переустановить установленные конфигурационные файлы до значений по умолчанию, например, pam.d, вы можете использовать следующую команду:
sudo apt install --reinstall -o Dpkg::Options::="--force-confmiss" $(dpkg -S /etc/pam.d/\* | cut -d ':' -f 1)