fix: формктирование статьи

This commit is contained in:
Олег Казанин 2026-03-13 20:11:09 +00:00
parent 9e0acd35de
commit 6fb1f08915
1 changed files with 36 additions and 27 deletions

View File

@ -9,11 +9,9 @@ categories:
- Безопасность - Безопасность
--- ---
# Debian 12: базовая настройка безопасности для production
Поставил чистый Debian 12 и думаешь сразу накатывать приложения? Не торопись. Сейчас потратишь час на базовую настройку безопасности - сэкономишь недели на разгребание последствий взлома. Поставил чистый Debian 12 и думаешь сразу накатывать приложения? Не торопись. Сейчас потратишь час на базовую настройку безопасности - сэкономишь недели на разгребание последствий взлома.
Эта статья - универсальная база для любого production-сервера. Не важно, будешь ты крутить почту, веб или базу данных - эти настройки нужны всем. {{< lead >}}Эта статья - универсальная база для любого production-сервера. Не важно, будешь ты крутить почту, веб или базу данных - эти настройки нужны всем.{{< /lead >}}
## Что будем делать ## Что будем делать
@ -62,7 +60,7 @@ apt dist-upgrade -y
[ -f /var/run/reboot-required ] && echo "Reboot needed" || echo "No reboot needed" [ -f /var/run/reboot-required ] && echo "Reboot needed" || echo "No reboot needed"
``` ```
Если нужна - перезагрузись: Если нужна - перезагружаемся:
```bash ```bash
reboot reboot
@ -233,7 +231,7 @@ ssh-keygen -t ed25519 -C "admin@srv01"
или так или так
```powershell ```pwsh
cd c:\users\$env:username cd c:\users\$env:username
ssh-keygen ssh-keygen
``` ```
@ -244,17 +242,20 @@ ssh-keygen
Скопируй публичный ключ на сервер: Скопируй публичный ключ на сервер:
{{< tabs >}}
{{< tab label="Windows" >}}
```pwsh
type $env:userprofile\.ssh\id_ed25519.pub | ssh admin@твой-IP "if [ ! -d ~/.ssh ]; then mkdir -m 700 ~/.ssh; fi; if [ ! -f ~/.ssh/authorized_keys ]; then touch ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys; fi; cat >> ~/.ssh/authorized_keys"
```
Команда проверяет наличие `~/.ssh/authorized_keys` и если ее нет - создает с нужными правами.
{{< /tab >}}
{{< tab label="Linux" md=false >}}
```bash ```bash
ssh-copy-id admin@твой-IP ssh-copy-id admin@твой-IP
``` ```
{{< /tab >}}
{{< /tabs >}}
если Windows
```powershell
type $env:userprofile\.ssh\id_ed25519.pub | ssh admin@твой-IP "if [ ! -d ~/.ssh ]; then mkdir -m 700 ~/.ssh; fi; if [ ! -f ~/.ssh/authorized_keys ]; then touch ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys; fi; cat >> ~/.ssh/authorized_keys"
```
Команда проверяет наличие `~/.ssh/authorized_keys` и если ее нет - создает с нужными правами.
Введи пароль пользователя `admin`. Введи пароль пользователя `admin`.
@ -318,7 +319,7 @@ AddressFamily inet
**Port 2222:** **Port 2222:**
- Нестандартный порт вместо 22 - Нестандартный порт вместо 22
- Отсекает 90% ботов - Отсекает 90% ботов
- **ВАЖНО:** Запомни новый порт! - `ВАЖНО:` Запомни новый порт!
**PermitRootLogin no:** **PermitRootLogin no:**
- Запрет входа под root - Запрет входа под root
@ -346,9 +347,9 @@ sudo sshd -t
Если ошибок нет - ничего не выводит. Если ошибок нет - ничего не выводит.
**КРИТИЧЕСКИ ВАЖНО:** {{< alert cardColor="#e63946" iconColor="#ffffff" >}}
**КРИТИЧЕСКИ ВАЖНО:** Перед перезапуском SSH открой **вторую сессию** и не закрывай её:
Перед перезапуском SSH открой **вторую сессию** и не закрывай её: {{< /alert >}}
```bash ```bash
ssh admin@твой-IP ssh admin@твой-IP
@ -423,7 +424,7 @@ sudo apt install -y ufw
### Базовые правила ### Базовые правила
**ВАЖНО:** Сначала настроим правила, потом включим. Иначе можешь заблокировать себя. {{< alert >}}**ВАЖНО:** Сначала настроим правила, потом включим. Иначе можешь заблокировать себя.{{< /alert >}}
Политика по умолчанию - блокировать все входящее: Политика по умолчанию - блокировать все входящее:
@ -491,7 +492,9 @@ ufw allow 443/tcp
sudo ufw enable sudo ufw enable
``` ```
Скажет: `Command may disrupt existing ssh connections. Proceed with operation (y|n)?` Спросит: `Command may disrupt existing ssh connections. Proceed with operation (y|n)?`
т.е. `Выполнение команды может прервать существующие SSH-соединения. Продолжить операцию? (y|n)`
Жми `y`. Жми `y`.
@ -539,7 +542,7 @@ sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local
``` ```
Запиши: Внеси:
```ini ```ini
[DEFAULT] [DEFAULT]
@ -651,7 +654,7 @@ sudo fail2ban-client set sshd unbanip IP-адрес
sudo nano /etc/sysctl.d/99-hardening.conf sudo nano /etc/sysctl.d/99-hardening.conf
``` ```
Запиши: Внеси:
```ini ```ini
# IP Forwarding (отключаем если не роутер) # IP Forwarding (отключаем если не роутер)
@ -820,7 +823,7 @@ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
### Настройка swappiness ### Настройка swappiness
Swappiness - насколько активно использовать swap. `Swappiness` - насколько активно использовать swap.
Проверь текущее значение: Проверь текущее значение:
@ -860,6 +863,8 @@ cat /proc/sys/vm/swappiness
Защита от fork-бомб и исчерпания дескрипторов. Защита от fork-бомб и исчерпания дескрипторов.
`fork-бомба` - это программа (вредоносная или написанная по ошибке), которая бесконечно создаёт собственные копии через системный вызов `fork()`, пока ресурсы системы полностью не иссякнут.
Открой: Открой:
```bash ```bash
@ -1342,6 +1347,9 @@ sudo smartctl -a /dev/sda
### Алерты на критичные события ### Алерты на критичные события
> [!TIP] Для работы почтовых уведомлений должен быть настроен MTA (например Postfix).
Создай скрипт проверки: Создай скрипт проверки:
```bash ```bash
@ -1380,9 +1388,9 @@ if [ $LOAD_INT -gt $((CORES * 2)) ]; then
echo "ALERT: Load average is $LOAD on $HOSTNAME ($CORES cores)" | mail -s "Load Alert" $ALERT_EMAIL echo "ALERT: Load average is $LOAD on $HOSTNAME ($CORES cores)" | mail -s "Load Alert" $ALERT_EMAIL
fi fi
``` ```
{{< alert >}}
**ВАЖНО:** Замени `admin@example.ru` на свой email. **ВАЖНО:** Замени `admin@example.ru` на свой email.
{{< /alert >}}
Права: Права:
```bash ```bash
@ -1395,13 +1403,13 @@ sudo chmod +x /root/health-check.sh
sudo crontab -e sudo crontab -e
``` ```
Если отправка почты настроена:
``` ```
*/15 * * * * /root/health-check.sh */15 * * * * /root/health-check.sh
``` ```
Для работы почты должен быть настроен MTA (например Postfix). Если отправки почты нет - можешь логировать:
Если почты нет - можешь логировать:
``` ```
*/15 * * * * /root/health-check.sh >> /var/log/health-check.log 2>&1 */15 * * * * /root/health-check.sh >> /var/log/health-check.log 2>&1
@ -1433,4 +1441,5 @@ telnet твой-IP 2222 # Должен быть доступен
Все специфичные настройки делаются поверх этой базы. Все специфичные настройки делаются поверх этой базы.
**Главное:** Не забывай регулярно проверять логи и обновлять систему. Безопасность - это процесс, а не состояние. > [!TIP]+ **Главное:**
> Не забывай регулярно проверять логи и обновлять систему. Безопасность - это процесс, а не состояние.