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 и думаешь сразу накатывать приложения? Не торопись. Сейчас потратишь час на базовую настройку безопасности - сэкономишь недели на разгребание последствий взлома.
Эта статья - универсальная база для любого production-сервера. Не важно, будешь ты крутить почту, веб или базу данных - эти настройки нужны всем.
{{< lead >}}Эта статья - универсальная база для любого production-сервера. Не важно, будешь ты крутить почту, веб или базу данных - эти настройки нужны всем.{{< /lead >}}
## Что будем делать
@ -62,7 +60,7 @@ apt dist-upgrade -y
[ -f /var/run/reboot-required ] && echo "Reboot needed" || echo "No reboot needed"
```
Если нужна - перезагрузись:
Если нужна - перезагружаемся:
```bash
reboot
@ -233,7 +231,7 @@ ssh-keygen -t ed25519 -C "admin@srv01"
или так
```powershell
```pwsh
cd c:\users\$env:username
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
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`.
@ -318,7 +319,7 @@ AddressFamily inet
**Port 2222:**
- Нестандартный порт вместо 22
- Отсекает 90% ботов
- **ВАЖНО:** Запомни новый порт!
- `ВАЖНО:` Запомни новый порт!
**PermitRootLogin no:**
- Запрет входа под root
@ -346,9 +347,9 @@ sudo sshd -t
Если ошибок нет - ничего не выводит.
**КРИТИЧЕСКИ ВАЖНО:**
Перед перезапуском SSH открой **вторую сессию** и не закрывай её:
{{< alert cardColor="#e63946" iconColor="#ffffff" >}}
**КРИТИЧЕСКИ ВАЖНО:** Перед перезапуском SSH открой **вторую сессию** и не закрывай её:
{{< /alert >}}
```bash
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
```
Скажет: `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`.
@ -539,7 +542,7 @@ sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local
```
Запиши:
Внеси:
```ini
[DEFAULT]
@ -651,7 +654,7 @@ sudo fail2ban-client set sshd unbanip IP-адрес
sudo nano /etc/sysctl.d/99-hardening.conf
```
Запиши:
Внеси:
```ini
# IP Forwarding (отключаем если не роутер)
@ -820,7 +823,7 @@ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
### Настройка swappiness
Swappiness - насколько активно использовать swap.
`Swappiness` - насколько активно использовать swap.
Проверь текущее значение:
@ -860,6 +863,8 @@ cat /proc/sys/vm/swappiness
Защита от fork-бомб и исчерпания дескрипторов.
`fork-бомба` - это программа (вредоносная или написанная по ошибке), которая бесконечно создаёт собственные копии через системный вызов `fork()`, пока ресурсы системы полностью не иссякнут.
Открой:
```bash
@ -1342,6 +1347,9 @@ sudo smartctl -a /dev/sda
### Алерты на критичные события
> [!TIP] Для работы почтовых уведомлений должен быть настроен MTA (например Postfix).
Создай скрипт проверки:
```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
fi
```
{{< alert >}}
**ВАЖНО:** Замени `admin@example.ru` на свой email.
{{< /alert >}}
Права:
```bash
@ -1395,13 +1403,13 @@ sudo chmod +x /root/health-check.sh
sudo crontab -e
```
Если отправка почты настроена:
```
*/15 * * * * /root/health-check.sh
```
Для работы почты должен быть настроен MTA (например Postfix).
Если почты нет - можешь логировать:
Если отправки почты нет - можешь логировать:
```
*/15 * * * * /root/health-check.sh >> /var/log/health-check.log 2>&1
@ -1433,4 +1441,5 @@ telnet твой-IP 2222 # Должен быть доступен
Все специфичные настройки делаются поверх этой базы.
**Главное:** Не забывай регулярно проверять логи и обновлять систему. Безопасность - это процесс, а не состояние.
> [!TIP]+ **Главное:**
> Не забывай регулярно проверять логи и обновлять систему. Безопасность - это процесс, а не состояние.