Публикация в GitHub
avatar
70 минут читать

UbuntuHardeningFramework — Bash скрипты для автоматического усиления защиты на сервере Ubuntu

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)

Комментарии