Готовый кейс

Debian-сервер дома: что закрыто, что открыто

Как проверить с другого устройства, что закрыто и что открыто на домашнем Debian-сервере с Docker: SSH только по ключу, ufw, порт Docker в обход ufw, права на файлы, бэкап с проверкой восстановления и ручные обновления.

Обложка кейса Net Admin Pro: Debian-сервер дома с проверкой с другого устройства
Формат
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: описана с моих слов, при подготовке кейса не повторялась.

Состав кейса

  1. Проверки с другого устройства

    Сканирование всех TCP-портов и попытки входа по SSH с ноутбука в той же сети до и после каждого изменения.

  2. SSH только по ключу

    Отдельный файл в sshd_config.d, sshd -t, перезагрузка настроек и почему sshd -T на самом сервере недостаточно.

  3. ufw

    Установка, правило SSH только из локальной сети, ufw status verbose и сканирование до и после. Заметка про VPN на сканирующем устройстве.

  4. Docker и ufw

    Тестовый контейнер, чей опубликованный порт открыт вопреки ufw, правила DNAT и FORWARD, из-за которых так происходит, и исправление: публикация на 127.0.0.1.

  5. Туннель и права

    config.yml и unit-файл systemd для cloudflared, исправление прав на файлы туннеля и бэкапа, доступных группе на запись.

  6. Бэкап и проверка восстановления

    Скрипт бэкапа на rsync и pg_dump, тестовый запуск и восстановление файлов и базы n8n из копии во временные места.

  7. Ручные обновления

    apt upgrade с проверкой служб, контейнеров и ufw, перезагрузка при новом ядре и проверка с другого устройства после неё.