fix: формктирование статьи
This commit is contained in:
parent
9e0acd35de
commit
6fb1f08915
|
|
@ -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]+ **Главное:**
|
||||||
|
> Не забывай регулярно проверять логи и обновлять систему. Безопасность - это процесс, а не состояние.
|
||||||
Loading…
Reference in New Issue