Compare commits

...

2 Commits

3 changed files with 14 additions and 57 deletions
@@ -49,7 +49,7 @@ Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg02-opt 262141952 486209 261655743 1% /opt /dev/mapper/vg02-opt 262141952 486209 261655743 1% /opt
``` ```
Деталь, которая зацепила взгляд: всего 67424 инода на 29-гигабайтном томе - по привычке принял это за фиксированное значение, заданное при создании файловой системы, как это работает в ext4. При 99% занятости с таким скромным лимitom легко вылететь по инодам даже без аномального количества файлов. Отложил мысль на потом - и, как выяснится в финале статьи, отложил с неверной гипотезой в основе. Деталь, которая зацепила взгляд: всего 67424 инода на 29-гигабайтном томе - по привычке принял это за фиксированное значение, заданное при создании файловой системы, как это работает в ext4. При 99% занятости с таким скромным лимитом легко вылететь по инодам даже без аномального количества файлов. Отложил мысль на потом - и, как выяснится в финале статьи, отложил с неверной гипотезой в основе.
## Первая ошибка: du без -x ## Первая ошибка: du без -x
+11 -54
View File
@@ -261,7 +261,7 @@ Ubuntu 24.04 хранит конфигурацию SSH в `/etc/ssh/sshd_config.
Создай файл с настройками: Создай файл с настройками:
```bash ```bash
sudo nano /etc/ssh/sshd_config.d/99-hardening.conf sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
``` ```
``` ```
@@ -297,6 +297,8 @@ AcceptEnv LANG LC_*
AddressFamily inet AddressFamily inet
``` ```
**Важно:** Ubuntu 24.04 хранит файлы конфигурации SSH в `/etc/ssh/sshd_config.d/` и применяет **первое** вхождение каждой директивы. Облачные образы Ubuntu часто поставляются с файлом `50-cloud-init.conf` который содержит `PasswordAuthentication yes` - он загружается раньше `99-hardening.conf` и его значение побеждает. Файл `00-hardening.conf` загружается первым и корректно перекрывает дефолты cloud-init.
**Важно:** Ubuntu 24.04 использует socket-активацию через `ssh.socket` - порт слушает не sshd напрямую, а сокет-юнит. Обычный `systemctl restart ssh` перезапускает только сервис, порт остаётся прежним. Для применения нового порта нужно перезапускать именно сокет. **Важно:** Ubuntu 24.04 использует socket-активацию через `ssh.socket` - порт слушает не sshd напрямую, а сокет-юнит. Обычный `systemctl restart ssh` перезапускает только сервис, порт остаётся прежним. Для применения нового порта нужно перезапускать именно сокет.
**КРИТИЧНО:** Перед перезапуском открой вторую сессию и не закрывай её. **КРИТИЧНО:** Перед перезапуском открой вторую сессию и не закрывай её.
@@ -331,7 +333,7 @@ LISTEN 0 4096 0.0.0.0:2222
sudo systemctl cat ssh.socket sudo systemctl cat ssh.socket
``` ```
Строка `ListenStream=0.0.0.0:2222` подтверждает что порт применился. Строка `ListenStream=2222` подтверждает что порт применился.
В новом терминале проверь подключение: В новом терминале проверь подключение:
@@ -356,7 +358,7 @@ sudo nano /etc/ssh/banner
############################################################################### ###############################################################################
``` ```
Добавь в `/etc/ssh/sshd_config.d/99-hardening.conf`: Добавь в `/etc/ssh/sshd_config.d/00-hardening.conf`:
``` ```
Banner /etc/ssh/banner Banner /etc/ssh/banner
@@ -461,59 +463,11 @@ sudo nano /etc/fail2ban/jail.local
```ini ```ini
[DEFAULT] [DEFAULT]
# Бан на 1 час
bantime = 3600 bantime = 3600
# За 10 минут
findtime = 600 findtime = 600
# После 3 неудачных попыток
maxretry = 3 maxretry = 3
# Не банить свои IP
ignoreip = 127.0.0.1/8 ::1 ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
```
Замени `2222` на свой SSH порт.
**Особенность Ubuntu 24.04:** `systemd-journald` по умолчанию не пишет в `/var/log/auth.log`. Если файл отсутствует или пустой:
```bash
ls -la /var/log/auth.log
```
Включи запись в файл:
```bash
sudo nano /etc/rsyslog.d/50-default.conf
```
Убедись что строка не закомментирована:
```
auth,authpriv.* /var/log/auth.log
```
Перезапусти rsyslog:
```bash
sudo systemctl restart rsyslog
```
Или используй journald backend в fail2ban - он умеет читать логи напрямую из journald без файлов:
```bash
sudo nano /etc/fail2ban/jail.local
```
Добавь в секцию `[sshd]`:
```ini
[sshd] [sshd]
enabled = true enabled = true
port = 2222 port = 2222
@@ -523,7 +477,9 @@ maxretry = 3
bantime = 3600 bantime = 3600
``` ```
При `backend = systemd` параметр `logpath` не нужен - fail2ban читает journald напрямую. Замени `2222` на свой SSH порт.
`backend = systemd` — обязательно для Ubuntu 24.04. На этом дистрибутиве journald является основным хранилищем логов, файл `/var/log/auth.log` может отсутствовать или не заполняться. При `backend = systemd` параметр `logpath` не нужен — fail2ban читает journald напрямую.
Запусти: Запусти:
@@ -1065,8 +1021,9 @@ sudo ufw status verbose
# Статус fail2ban # Статус fail2ban
sudo fail2ban-client status sshd sudo fail2ban-client status sshd
# Состояние диска # Определить имя диска и проверить его состояние (только физический сервер)
sudo smartctl -H /dev/sda lsblk -d -o NAME,TYPE | grep disk
sudo smartctl -H /dev/ИМЯ_ДИСКА
# Swap # Swap
free -h free -h
@@ -262,7 +262,7 @@ sudo systemctl restart docker
Проверь: Проверь:
```bash ```bash
docker info | grep -E "Storage Driver|Logging Driver|live-restore" docker info | grep -E "Storage Driver|Logging Driver|Live Restore"
``` ```
## sysctl для Docker-хоста ## sysctl для Docker-хоста
@@ -768,7 +768,7 @@ sudo truncate -s 0 /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
### Финальная проверка ### Финальная проверка
```bash ```bash
sudo systemctl status docker sudo systemctl status docker
docker info | grep -E "Storage Driver|Logging Driver|live-restore" docker info | grep -E "Storage Driver|Logging Driver|Live Restore"
docker run --rm alpine nslookup google.com docker run --rm alpine nslookup google.com
ss -tulnp | grep docker ss -tulnp | grep docker
docker system df docker system df