Debian-сервер дома: что закрыто, что открыто
Как проверить с другого устройства, что закрыто и что открыто на домашнем Debian-сервере с Docker: SSH только по ключу, ufw, порт Docker в обход ufw, права на файлы, бэкап с проверкой восстановления и ручные обновления.
- Формат
- PDF RU + EN, 20 страниц
- Файлы
- Конфиги, скрипт бэкапа, команды
- Стек
- SSH · ufw · Docker · Cloudflare Tunnel · rsync
- Сервер
- Debian 13, Docker 29.9.2
Кейс о домашнем сервере на Debian с Docker, n8n за Cloudflare Tunnel и бэкапом на USB-флешку. Я считал сервер закрытым; проверка с другого устройства показала вход по паролю в SSH, неустановленный firewall и файлы конфигурации, доступные группе на запись. В кейсе показано, как я это нашёл, как исправил и как проверил исправления.
Что внутри
- Проверки с другого устройства: сканирование всех TCP-портов и попытки входа по SSH до и после каждого изменения.
- SSH только по ключу и почему вывод
sshd -Tна самом сервере не доказательство. - ufw: запрет входящих, SSH только из локальной сети, сканирование до и после.
- Порт Docker, опубликованный без адреса, открыт вопреки ufw: показано на тестовом контейнере, с порядком правил на сервере и исправлением.
- Конфигурация Cloudflare Tunnel и исправление прав на файлы.
- Скрипт бэкапа на USB-флешку и проверка восстановления файлов и базы n8n из копии.
- Ручные обновления с проверкой после перезагрузки.
- Таблица результатов и чек-лист повторения.
В тексте отмечено, что проверено на сервере, что проверено с ноутбука, а что не проверено.
Что в архиве
- PDF на русском и английском;
10-hardening.conf– настройки sshd;config.ymlиcloudflared.service– конфигурация и служба туннеля;home-backup.sh,home-backup.service,home-backup.timer– скрипт бэкапа и таймер;home-backup.env.example– образец с плейсхолдерами для сообщений в Telegram;commands.txt– все команды из текста по разделам.
Для кого
- Для тех, у кого есть или будет домашний сервер и кто хочет проверить с другого устройства, что сервер действительно закрыт, и иметь бэкап, восстановление которого проверено.
- Нужно заранее: сервер на Debian с Docker и второе устройство в той же локальной сети с nmap и ssh.
- Проверено на Debian 13. На Ubuntu и других системах не проверялось.
Что не входит
- Мониторинг.
- Автоматические обновления.
- Защита панели n8n за туннелем (Cloudflare Access, двухфакторный вход).
- Внешняя копия бэкапа.
- fail2ban.
- Пошаговая установка Debian: описана с моих слов, при подготовке кейса не повторялась.
Состав кейса
Проверки с другого устройства
Сканирование всех TCP-портов и попытки входа по SSH с ноутбука в той же сети до и после каждого изменения.
SSH только по ключу
Отдельный файл в sshd_config.d, sshd -t, перезагрузка настроек и почему sshd -T на самом сервере недостаточно.
ufw
Установка, правило SSH только из локальной сети, ufw status verbose и сканирование до и после. Заметка про VPN на сканирующем устройстве.
Docker и ufw
Тестовый контейнер, чей опубликованный порт открыт вопреки ufw, правила DNAT и FORWARD, из-за которых так происходит, и исправление: публикация на 127.0.0.1.
Туннель и права
config.yml и unit-файл systemd для cloudflared, исправление прав на файлы туннеля и бэкапа, доступных группе на запись.
Бэкап и проверка восстановления
Скрипт бэкапа на rsync и pg_dump, тестовый запуск и восстановление файлов и базы n8n из копии во временные места.
Ручные обновления
apt upgrade с проверкой служб, контейнеров и ufw, перезагрузка при новом ядре и проверка с другого устройства после неё.