Update readme

This commit is contained in:
2026-01-29 15:50:13 +04:00
parent 5b2b227601
commit e9d09ef2e9
15 changed files with 502 additions and 238 deletions

93
Debian.md Normal file
View File

@@ -0,0 +1,93 @@
# Настройка Debian
## 1. Установка Debian
Стандартная установка Debian Minimal. Занимаем весь виртуальный диск. При установке отключаем графический интерфейс и ставим SSH сервер.
После установки заходим под root и устанавливаем `sudo`.
```bash
apt install sudo
usermod -aG sudo имя_пользователя
```
Перезаходим и дальше работаем под обычным пользователем.
## 2. Статический IP
Смотрим название сетевого интерфейса и устанавливаем resolvconf (для поддержки dns-nameservers):
```bash
ip addr
sudo apt install resolvconf
```
Редактируем настройки
```bash
sudo nano /etc/network/interfaces
```
Добавляем настройки:
```
auto enp0s3
iface enp0s3 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 77.88.8.8 8.8.8.8
```
Перезагружаемся:
```bash
sudo reboot
```
## 3. Установка Podman
> Мы будем использовать Podman вместо Docker в целях безопасности. Podman не требует запущенного демона для работы и по умолчанию нацелен на работу в rootless режиме, что нам очень интересно.
```bash
sudo apt install podman podman-compose
```
Добавляем загрузку контейнеров с параметром `restart: always` при загрузке системы
```bash
systemctl --user enable podman-restart.service
sudo loginctl enable-linger USER
```
## 4. Клонируем этот репозиторий для запуска сервисов
```bash
sudo apt install git
mkdir ~/services
cd ~/services
git clone https://github.com/StepanovPlaton/HomeServerServices .
```
## 5. Монтирование дисков
Смотрим список разделов с их UUID
```bash
sudo blkid
```
Создаём точку монтирования
```bash
mkdir ~/diskN
```
Добавляем запись в fstab
```bash
sudo nano /etc/fstab
```
В конец добавляем
```
UUID=***-***-***-***-*** /home/USER/diskN ext4 defaults,nofail 0 2
```
Монтируем диск
```bash
sudo systemctl daemon-reload
sudo mount -a
```
Для корректной работы с диском может потребоваться изменить права доступа.
```bash
sudo chown -R 1000:1000 path/to/disk
podman unshare chown -R 1000:1000 path/to/disk
```
**Настройка сервисов описана в файле [Services.md](Services.md)**

97
OPNsense.md Normal file
View File

@@ -0,0 +1,97 @@
# Настройка OPNsense
## 1. Установка OPNsense
Ничего не трогаем в момент загрузки. Авторизуемся как `installer`, пароль по умолчанию - `opnsense`.
- Добавляем английскую локаль
- Выбираем ФС - **ZFS RAID0**
- Предупреждение о недостатке ОЗУ можно пропустить
- Устанавливаем систему
## 2. Создаём второй сетевой мост
Создаём второй сетевой мост для второго порта, подключаем сетевое устройство в ВМ OPNsense. Перезагружаем ВМ OPNsense.
## 3. Настройка OPNsense
В меню терминала:
1. Выбираем **1 - assign interfaces**:
- Назначаем одному порту **WAN** (порт для провайдера, во внешний интернет)
- Второму порту **LAN** (порт для локальной сети)
2. Выбираем **2 - set interface ip address**:
- Для LAN указываем статический IPv4 (это будет наш Gateway)
- DHCP можно пока не включать, настроим позже
## 4. Обновляем OPNsense
1. Открываем web интерфейс по адресу установленному для LAN
2. Заходим **Система > Программное обеспечение > Статус > Проверить наличие обновлений**
3. Потом раздел обновления, снизу кнопка **обновить**
4. Ждём обновления всех пакетов
## 5. Устанавливаем плагин Qemu Agent
Нужен для управления OPNsense из Proxmox.
1. Заходим **Система > Программное обеспечение > Плагины**
2. Включаем галочку **показать плагины сообщества**
3. Ставим плагин `os-qemu-guest-agent`
## 6. Настраиваем доступ в интернет
Можно воспользоваться стандартным мастером настройки:
1. Открываем его в разделе **Система > Конфигурация > Мастер**
2. Для доступа в WAN выбираем пункт **PPPoE**
3. Устанавливаем логин и пароль провайдера
4. Остальное уже должно быть настроено, но можно что-то изменить
## 7. Настройка DHCP
В разделе **Службы**:
- Выключаем **Dnsmasq DNS & DHCP**
- Включаем **ISC DHCPv4**
- В настройках DNS первым сервером указываем IP адрес OPNsense. Сам DNS сервер настроем в следущем шаге
## 8. Настройка DNS
> Для безопасности домашней сети от чрезмерной рекламы и сбора статистики добавим фильтр [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome)
> Если для вашей сети достаточно обычного DNS просто включите в настройках **Unbound DNS**
В консоли OPNsense добавим новый репоизторий
```bash
fetch -o /usr/local/etc/pkg/repos/mimugmail.conf https://www.routerperformance.net/mimugmail.conf
pkg update
```
После чего в разделе **Система > ПО > Плагины** появится пакет os-adguardhome-maxit (ставим калочку показать пользовательские пакеты). Устанавливаем его и включаем в разделе **Службы**. Мастер настройки запуститься на IP OPNsense на 3000 порту.
В настройках **указываем внутренний интерфейс LAN** и ставим WebUI AdGuardHome на 3000 порт. В разделе DNS-сервер так же **выбираем только внутренний интерфейс LAN**, порт по умолчанию 53. По какой-то причине AdGuard думает что у нас динамический IP, хотя это не так - игнорируем предупреждение.
В настройках добавляем блоклисты по выбору:
- [Hagezi Multi Pro++ — Идеальный баланс. Блокирует почти всё, при этом редко «ломает» сайты](https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.plus.txt)
- [Hagezi Multi Ultimate — Самый жесткий вариант. Блокирует агрессивно, включая глубокую телеметрию. Может потребоваться ручная разблокировка некоторых сервисов (белый список)](https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/ultimate.txt)
- и любые другие на своё усмотрение
## 9. Проброс портов
> Для начала нужно освободить 80 порт, потому что на нём по умолчанию доступен сам OPNsense. В разделе **Система > Настройки > Администрирование** заменим 80 порт на 8000
В разделе **Межсетевой экран > NAT > Передаресация портов** добавим правило.
- **Interface:** WAN
- **TCP/IP Version:** IPv4
- **Protocol:** TCP
- **Destination:** WAN address
- **Destination port range:** Внешний порт
- **Redirect target IP:** Введите локальный IP вашего сервера
- **Redirect target port:** Порт назначения
- **Pool Options:** Default
- **Filter rule association:** Add associated filter rule
- **Это важно:** OPNsense автоматически создаст разрешающее правило в брандмауэре
Для HTTP нужно добавить перенаправления на 8080 порт сервера, для HTTPS на 8443. Базовые порты 80 и 443 недоступны в rootless контейнере. Сохраняем изменения и проверяем в разделе **Межсетевой экран > Правила > WAN**.
Для доступа из домашней сети нужно добавить зеркальный NAT в разделе **Межсетевой экран > Настройки > Дополнительно** ставим галочки **Отображение для перенаправлений портов** и **Автоматический исходящий NAT для отображения**

62
Proxmox.md Normal file
View File

@@ -0,0 +1,62 @@
# Настройка Proxmox
## 1. Отключаем enterprise репозитории и обновляем пакеты
В разделе **Сервер > Обновления > Репозитории**:
- Отключаем всё с упоминанием enterprise
- Добавляем No-Subscription репозиторий
Затем обновляем пакеты в терминале сервера:
```bash
apt update && apt upgrade
```
## 2. Загружаем на сервер ISO образы
- Для OPNsense выбираем образ типа **DVD**
- Для Debian нужен minimal образ netinst
- Копируем файлы в разделе **Сервер > local > ISO-образы**
## 3. Создаём ВМ с OPNsense
Настройки ВМ:
- **Общее > Запуск при загрузке**: Включаем
- **ОС > Гостевая ОС**: Other (OPNsense - это FreeBSD)
- **Система > Агент QEMU**: включить (нужен для просмотра информации о системе в гипервизоре)
- **Диски > Шина**: SCSI
- **Размер диска**: 16Гб (достаточно)
- **ЦП > Тип**: host
- **ЦП > Кол-во ядер**: 2
- **Объём ОЗУ**: 2Гб (не менее 1Гб)
- **Сеть > Модель**: VirtIO
- **Сетевой экран**: отключаем (OPNsense сам решает эту задачу)
- Остальные настройки по умолчанию
Выбираем загруженный ISO-образ и запускаем ВМ.
**Настройка OPNsense описана в файле [OPNsense.md](OPNsense.md)**
## 4. Создаём ВМ с Debian
> По идее Proxmox работает на ядре Linux и построен на Debian, поэтому мы могли бы использовать LXC контейнер, однако для запуска Docker (Podman) внутри LXC нужны разрешения, и модули ядра, не способствующие безопасности. По сути при таком подходе Docker (Podman) будет работать чуть ли не в самом гипервизоре, что плохо. Поэтому используем ВМ
Настройки ВМ:
- **Общее > Запуск при загрузке**: Включаем
- **ОС > Гостевая ОС**: Linux 6.x
- **Система > Агент QEMU**: включить (нужен для просмотра информации о системе в гипервизоре)
- **Диски > Шина**: SCSI
- **Размер диска**: 48Гб (и более)
- **ЦП > Тип**: host
- **ЦП > Кол-во ядер**: 4 (и более)
- **Объём ОЗУ**: 4Гб (и более)
- **Сеть > Модель**: VirtIO
- **Сетевой экран**: отключаем (нас прикрывает OPNsense)
- Остальные настройки по умолчанию
> Если мы хотим добавить внешние диски для хранения данных, нужно дать ВМ доступ к ним через USB. В разделе **Оборудование** нужно добавить USB-устройство. Лучше всего дать доступ ВМ к самому USB-порту, тогда любое устройство в него вставленное будет доступно внутри ВМ, но можно так же предоставить доступ к конкретному устройству, в какой порт оно не было бы вставлено.
>
> Чтобы посмотреть подключенные USB-устройства и скорости их работы запускаем команду `lsusb -t` и ищем наши диски (`Class=Mass Storage`)
**Настройка Debian описана в файле [Debian.md](Debian.md)**

206
README.md
View File

@@ -1,50 +1,33 @@
# Home Server Services # Home Server Services
> **Home Server Services** - это полный набор сервисов в Docker для организации домашнего сервера! > **Home Server Services** - это гайд по настройке и полный набор сервисов в Docker для организации домашнего роутера/сервера!
> >
> Главное - это **модульность** и **воспроизводимая установка**. Можно развернуть за 15 минут! > Главное - это **модульность** и **воспроизводимая установка**. Можно развернуть за 30 минут!
![](./screenshots/grafana.jpg) ![](./screenshots/grafana.jpg)
![](./screenshots/portainer.jpg) ![](./screenshots/portainer.jpg)
## Мой сервер: ## Мой сервер:
- CheckWay POS88 - CheckWay Sherman Micro
- [Intel Celeron J1900](https://technical.city/ru/cpu/Core-2-Duo-E8400-protiv-Celeron-J1900) @ 1.99GHz (64 bit) - [Intel Celeron J1900](https://technical.city/ru/cpu/Core-2-Duo-E8400-protiv-Celeron-J1900) @ 1.99GHz (64 bit)
- 4Gb RAM - 8Gb RAM
- 120Gb SSD - 120Gb SSD
- Не греется, не шумит, мало потребляет - 2x 1Gbps (WAN+LAN)
- Debian 13 (Trixie) Minimal - Proxmox VE 9.1.4
- [Docker](https://www.docker.com/) - OPNsense 25.7
- [Docker Compose](https://docs.docker.com/compose/) - [CrowdSec](https://www.crowdsec.net)
- Политика частоты работы CPU - `ondemand` - Debian 13 (Trixie) Minimal
- [Podman](https://podman.io)
## Сервисы:
- [Portainer](./portainer/) - Управление контейнерами
- [Grafana](./grafana/) - Загруженность сервера
- [Prometheus](./grafana/prometheus.yml)
- [Node Exporter](./grafana/)
- [Proxy](./proxy/) - Reverse proxy
- [Nginx](./proxy/nginx/)
- [DDNS](./proxy/ddns/) - Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru)
- Let's Encrypt - Автоматическое обновление SSL сертификатов на все домены
- [Samba](./samba/) - Сетевой диск
- [Syncthing](./syncthing/) - Синхронизация данных между устройствами
- [Transmission](./transmission/) - BitTorrent клиент
- [AutoSSH](./autossh/) - SSH тунель
- [Gitea](./gitea/) - Git-сервер
- [Cloud](./cloud/) - FileBrowser - веб-интерфейс для управления файлами
- [Matrix](./matrix/) - сервер Matrix
- [Synapse](./matrix/create_config.sh) - Matrix сервер Synapse
- [Element](./matrix/docker-compose.yml) - Matrix веб-клиент Element
- [Pi-hole](./pihole/) - DNS фильтр (блокировка рекламы, слежки, защита от атак)
## О проекте: ## О проекте:
- **Полнофункциональный домашний сервер** - **Полнофункциональный домашний сервер**
- **Все сервисы настроены через Docker Compose** для легкого управления и быстрого запуска - Две одновременно запущенные операционные системы запущенны в гипервизоре Proxmox
- **Мониторинг системы через Grafana** с готовыми дашбордами - OPNsense выполняет функции роутера, DHCP и NTP сервера, защищает домашнюю сеть от вторжений с CrowSec
- В Debian в Podman запущены контейнеры с сервисами
- **Все сервисы настроены через Docker Compose (совместим с Podman)** для легкого управления и быстрого запуска
- **Мониторинг системы через Grafana** с готовым дашбордом
- **Файловый сервер Samba** для доступа к файлам по сети - **Файловый сервер Samba** для доступа к файлам по сети
- Открытый диск только на чтение - Открытый диск только на чтение
- Доступ на запись только после авторизации - Доступ на запись только после авторизации
@@ -56,172 +39,21 @@
- **Nginx reverse proxy** для маршрутизации трафика к сервисам - **Nginx reverse proxy** для маршрутизации трафика к сервисам
- Автоматическое получение и обновление SSL сертификатов через Let's Encrypt - Автоматическое получение и обновление SSL сертификатов через Let's Encrypt
- Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru) - Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru)
- **Git-сервер Gitea** для хостинга собственных репозиториев - **Git-сервер Gitea** для хостинга репозиториев
- **FileBrowser** - веб-интерфейс для управления файлами через браузер - **FileBrowser** - веб-интерфейс для управления файлами через браузер
- **Matrix Synapse** - собственный сервер для мессенджера Matrix с веб-клиентом Element - **Matrix Synapse** - собственный сервер для мессенджера Matrix с веб-клиентом Element
- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **Pi-hole** - Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **Pi-hole**
- Управление Docker через **Portainer с веб-интерфейсом** - Управление контейнерами через **Portainer**
- Скрипт для снижения энергопотребления - Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигурации
- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигураций
- Автоматический перезапуск контейнеров при сбоях
## Подготовка: ## Подготовка:
- Купить белый IP адрес у провайдера - Купить белый IP адрес у провайдера
- В настройках роутера пробросить 80 и 443 порт на сервер
- Купить домен второго уровня у регистратора [рег.ру](https://www.reg.ru) - Купить домен второго уровня у регистратора [рег.ру](https://www.reg.ru)
- [В настройках API рег.ру](https://www.reg.ru/user/account/settings/api/) добавить CIDR вашего провайдера (чтобы при смене IP наш скрипт смог обновить DNS записи) - [В настройках API рег.ру](https://www.reg.ru/user/account/settings/api/) добавить CIDR вашего провайдера (чтобы при смене IP наш скрипт смог обновить DNS записи)
- В настройках DNS-серверов зоны указать бесплатные DNS-серверы рег.ру: `ns1.reg.ru`, `ns2.reg.ru` - В настройках DNS-серверов зоны указать бесплатные DNS-серверы рег.ру: `ns1.reg.ru`, `ns2.reg.ru`
## Запуск: После этих шагов можно переходить к настройке сервера. **[Первым шагом установим гипервизор Proxmox](./Proxmox.md)**
### 1. Portainer
```bash
cd portainer
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 2. Grafana
```bash
cd grafana
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 3. AutoSSH
```bash
cd autossh
cp .env.example .env && vim .env
sudo docker compose up -d --build
```
### 4. Samba
```bash
cd samba
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 5. Transmission
```bash
cd transmission
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 6. Syncthing
```bash
cd syncthing
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 7. Gitea
```bash
cd gitea
cp .env.example .env && vim .env
sudo docker compose up -d
```
> **Примечание:** Конфигурируется позже, уже в веб-форме.
### 8. Cloud (FileBrowser)
```bash
cd cloud
cp .env.example .env && vim .env
touch filebrowser.db
sudo docker compose up -d
```
### 9. Matrix
```bash
cd matrix
cp .env.example .env && vim .env
```
Создаём конфиг [по примеру](./matrix/create_config.sh). Меняем базу данных на PostgreSQL:
```yaml
database:
name: psycopg2
args:
user: user
password: passw0rd
database: db
host: matrix-db
cp_min: 5
cp_max: 10
```
Запускаем:
```bash
sudo docker compose up -d
```
Создаём пользователя [по примеру](./matrix/create_user.sh).
### 10. Pi-hole
```bash
cd pihole
cp .env.example .env && vim .env
sudo docker compose up -d
```
[Устанавливаем пароль](./pihole/set-password.sh) (оставить пустым для доступа без пароля)
В разделе Settings > DNS выбираем вышестоящие DNS сервер. Включаем сверху расширенные настройки и в блоке interface settings выбираем пункт `Permit all origins`. В разделе Lists добавляем [списки доменов для блокировки](./pihole/block-lists.txt). Затем обновляем их в Tools > Update Gravity. В настройках ПК (роутера) устанавливаем в качестве DNS наш сервер.
### 11. Nginx Reverse Proxy (Entrypoint)
```bash
cd proxy
cp .env.example .env && vim .env
```
Создаём конфиг для DynDNS:
```bash
cp ddns/domains.txt.example ddns/domains.txt && vim ddns/domains.txt
```
Нужно указать ресурсные записи `@` и `www` для доступа к домену второго уровня напрямую. Также нужно добавить домены 3-го уровня для: gitea, cloud (filebrowser), matrix server (synapse), matrix client (element).
В первый раз SSL сертификаты нужно создать вручную.
Запускаем DDNS скрипт и HTTP сервер для Let's Encrypt:
```bash
sudo docker compose -f init-compose.yml up -d --build
```
Проверяем по логам в portainer и в личном кабинете рег.ру что ресурсные записи обновились. Ожидаем пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов). Затем создаём SSL сертификаты на каждый домен(-ы) [по примеру](./proxy/create-first-cert-example.sh).
Настраиваем Nginx:
```bash
cd nginx/conf.d
cp default.conf.example default.conf
vim default.conf
```
Запускаем основной контейнер:
```bash
sudo docker compose -f init-compose.yml down
sudo docker compose up -d --build
```
## Использование: ## Использование:

168
Services.md Normal file
View File

@@ -0,0 +1,168 @@
# Настройка сервисов
## 1. [Portainer](./portainer/) - WebUI для управления контейнерами
> Для запуска Portainer требуется активный Docker сокет. В Podman по-умолчанию его нет, так как это является потенциальным вектором атаки. Запускайте сокет только для конкретного пользователя (не root!)
```bash
cd portainer
cp .env.example .env && vim .env
systemctl --user enable --now podman.socket
podman-compose up -d
podman generate systemd --new --files --name portainer
systemctl --user enable ./container-portainer.service
```
## 2. [Grafana](./grafana/) - Dashboard со статистикой загруженности сервера
> Proxmox предоставляет достаточно информации об использовании ресурсов системы, но если вы ставите Debian как контейнеров сервисов отдельно, вам может потребоваться Grafana
```bash
cd grafana
cp .env.example .env && vim .env
podman-compose up -d
podman generate systemd --new --files --name portainer
systemctl --user enable ./container-portainer.service
```
### 3. [AutoSSH](./autossh/) - SSH тунель, проброс портов
```bash
cd autossh
cp .env.example .env && vim .env
podman-compose up -d --build
```
### 4. [Samba](./samba/) - сетевой диск в локальной сети
```bash
cd samba
cp .env.example .env && vim .env
podman-compose up -d
```
> Samba работает на 139 и 445 порту, для доступа к ним нужны root права. Чтобы не запускать контейнер от имени root пробросим порты из контейнера на 1139 и 1445 порты соответственно, и добавим правила в iptables для переадресации трафика
```bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 139 -j REDIRECT --to-ports 1139
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-ports 1445
sudo iptables -t nat -L -n -v # Посмотреть список правил
# Для сохранения правил iptables после перезагрузки
sudo apt install iptables-persistent
sudo netfilter-persistent save # сохранить текущие iptables
```
### 5. [Transmission](./transmission/) - qBitTorrent клиент
```bash
cd transmission
cp .env.example .env && vim .env
podman-compose up -d
```
В настройках клиента указанная в `.env` папка доступна по пути `/downloads`. Можно подключиться с помощью [Transmission Remote GUI](https://github.com/transmission-remote-gui/transgui) или [Transmission Qt](https://transmissionbt.com/download.html)
### 6. [Syncthing](./syncthing/) - синхронизация файлов между устройствами
```bash
cd syncthing
cp .env.example .env && vim .env
mkdir config && podman unshare chown -R 1000:1000 config
podman-compose up -d
```
### 7. [Gitea](./gitea/)
```bash
cd gitea
cp .env.example .env && vim .env
mkdir config && podman unshare chown -R 1000:1000 config
mkdir data && podman unshare chown -R 1000:1000 data
mkdir db && podman unshare chown -R 1000:1000 db
podman-compose up -d
```
Gitea конфигурируется позже, уже в веб-форме. Обязательно **отключаем самостоятельную регистрацию** и создаём администратора (пользователя по умолчанию). Остальное не трогаем, уже сконфигурировано в `.env`
### 8. [Cloud (FileBrowser)](./cloud/)
```bash
cd cloud
cp .env.example .env && vim .env
touch filebrowser.db && podman unshare chown -R 1000:1000 filebrowser.db
podman-compose up -d
```
### 9. [Matrix](./matrix/)
```bash
cd matrix
mkdir data && podman unshare chown -R 1000:1000 data
podman run -it --rm -v "$(pwd)/data:/data" -e SYNAPSE_SERVER_NAME=MATRIX.DOMAIN.ru -e SYNAPSE_REPORT_STATS=no docker.io/matrixdotorg/synapse:latest generate
```
Меняем базу данных на PostgreSQL и прописываем БД, пользователя, пароль:
```yaml
database:
name: psycopg2
args:
user: user
password: passw0rd
database: db
host: matrix-db
cp_min: 5
cp_max: 10
```
```bash
mkdir db && podman unshare chown -R 1000:1000 db
cp .env.example .env && vim .env
podman-compose up -d
```
Создаём пользователя
```bash
podman exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
```
### 10. [Nginx Reverse Proxy (Entrypoint)](./proxy)
```bash
cd proxy
cp .env.example .env && vim .env
```
Создаём конфиг для DynDNS:
```bash
cp ddns/domains.txt.example ddns/domains.txt && vim ddns/domains.txt
```
Нужно указать ресурсные записи `@` и `www` для доступа к домену второго уровня напрямую. Также нужно добавить домены 3-го уровня для: gitea, cloud (filebrowser), matrix server (synapse), matrix client (element).
В первый раз SSL сертификаты нужно создать вручную.
Запускаем DDNS скрипт и HTTP сервер для Let's Encrypt:
```bash
podman-compose -f init-compose.yml up -d --build
```
Проверяем по логам в portainer и в личном кабинете рег.ру что ресурсные записи обновились. Ожидаем пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов).
Затем создаём SSL сертификаты на каждый домен(-ы) c помощью команды
```bash
podman-compose run --rm --entrypoint "certbot" certbot certonly --webroot --webroot-path=/var/www/certbot --email your-email@gmail.com --agree-tos --no-eff-email -d domain.com -d domain2.com
```
Настраиваем Nginx:
```bash
cd nginx/conf.d
cp default.conf.example default.conf
vim default.conf
```
Запускаем основной контейнер:
```bash
podman-compose -f init-compose.yml down
podman-compose up -d --build
```

View File

@@ -20,18 +20,18 @@ services:
command: > command: >
-M 0 -M 0
-N -N
-v
-o StrictHostKeyChecking=no -o StrictHostKeyChecking=no
-o ServerAliveInterval=60 -o ServerAliveInterval=60
-o ServerAliveCountMax=3 -o ServerAliveCountMax=3
-o ExitOnForwardFailure=yes
-p ${SSH_PORT:-22}
-L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM:?} -L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM:?}
${SSH_USER:?}@${SSH_HOST:?} ${SSH_USER:?}@${SSH_HOST:?}
-p ${SSH_PORT:-22}
deploy: deploy:
resources: resources:
limits: limits:
cpus: '0.1' cpus: "0.1"
memory: 64M memory: 64M
reservations: reservations:
memory: 32M memory: 32M

View File

@@ -1 +0,0 @@
PIHOLE_IP=192.168.32.1

View File

@@ -1,9 +0,0 @@
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/multi.txt
https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt
https://raw.githubusercontent.com/ElkyBoy/ruadlist-pihole/refs/heads/main/adservers_pihole.txt
https://abp.oisd.nl/basic/
https://adaway.org/hosts.txt
https://v.firebog.net/hosts/RPiList-Malware.txt
https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt
https://raw.githubusercontent.com/mmotti/pihole-regex/refs/heads/master/regex.list

View File

@@ -1,33 +0,0 @@
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
# Для корректной работы DNS-фильтрации контейнеру нужны права администратора сети
cap_add:
- NET_ADMIN
ports:
- "53:53/tcp"
- "53:53/udp"
# - "67:67/udp" # Раскомментируйте, если планируете использовать Pi-hole как DHCP-сервер
- "8080:80/tcp" # Веб-интерфейс будет доступен на порту 8080 (чтобы не занимать 80)
environment:
TZ: "Europe/Samara" # Укажите ваш часовой пояс
FTLCONF_LOCAL_IPV4: "${PIHOLE_IP:?}" # IP-адрес вашего хоста (сервера)
volumes:
- "./etc-pihole:/etc/pihole"
- "./etc-dnsmasq.d:/etc/dnsmasq.d"
restart: unless-stopped
deploy:
resources:
limits:
cpus: "0.25"
memory: 128M
reservations:
memory: 64M
networks:
- pihole_network
networks:
pihole_network:
name: pihole_network
driver: bridge

View File

@@ -1 +0,0 @@
docker exec -it pihole pihole setpassword

34
proxy/crowdsec.sh Normal file
View File

@@ -0,0 +1,34 @@
# Получить API ключ
docker exec crowdsec cscli bouncers add firewall-bouncer
# Посмотреть статистику в реальном времени:
docker exec crowdsec cscli metrics
# Добавить IP в белый список (локально):
docker exec crowdsec cscli whitelists add --ip 192.168.1.5
# Посмотреть белые списки:
docker exec crowdsec cscli parsers list | grep whitelist
# Список всех активных банов:
docker exec crowdsec cscli decisions list
# Забанить IP вручную (на 24 часа по умолчанию):
docker exec crowdsec cscli decisions add --ip 1.2.3.4 --duration 24h --reason "Причина"
# Забанить целую подсеть:
docker exec crowdsec cscli decisions add --range 1.2.3.0/24
# Удалить вообще все активные баны:
docker exec crowdsec cscli decisions delete --all
# Список последних событий:
docker exec crowdsec cscli alerts list
# Посмотреть подробности конкретного алерта (по ID):
docker exec crowdsec cscli alerts inspect <ID>
# Посмотреть, что установлено:
docker exec crowdsec cscli hub list
# Обновить базу правил (как apt update):
docker exec crowdsec cscli hub update
# Установить новую коллекцию (например, для защиты SSH):
docker exec crowdsec cscli collections install crowdsecurity/sshd
# Список подключенных баунсеров (исполнителей, блокировщиков):
docker exec crowdsec cscli bouncers list

View File

@@ -1,12 +1,34 @@
curl -s https://api.github.com/repos/crowdsecurity/cs-firewall-bouncer/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi - curl -s https://api.github.com/repos/crowdsecurity/cs-firewall-bouncer/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
tar xzvf crowdsec-firewall-bouncer-linux-amd64.tgz tar xzvf crowdsec-firewall-bouncer-linux-amd64.tgz
cd crowdsec-firewall-bouncer-v*/ cd crowdsec-firewall-bouncer-v*/
# Выбираем nftables
sudo ./install.sh sudo ./install.sh
# Получаем API KEY # Получаем API KEY
sudo docker exec crowdsec cscli bouncers add firewall-bouncer sudo docker exec crowdsec cscli bouncers add firewall-bouncer
# Прописываем ключ в конфиге # Прописываем ключ в конфиге
# Указваем так же API_URL (см docker-compose.yml, по умолчанию меняем на 8081)
sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
# Указваем так же API_URL (см docker-compose.yml, по умолчанию меняем на 8081)
# В разделе nftables ipv4 (и ipv6) добавляем параметр hook: prerouting
# nftables:
# ipv4:
# enabled: true
# set-only: false
# table: crowdsec
# chain: crowdsec-chain
# priority: -10
# hook: prerouting
# ipv6:
# enabled: true
# set-only: false
# table: crowdsec6
# chain: crowdsec6-chain
# priority: -10
# hook: prerouting
# Создаём список исключений
sudo docker exec crowdsec cscli allowlists create my_vps -d "Allow list for my vps"
# Добавляем туда IP нашего VPS сервера для AutoSSH сервиса
sudo docker exec crowdsec cscli allowlists add my_vps 1.2.3.4

View File

@@ -24,7 +24,7 @@ services:
resources: resources:
limits: limits:
cpus: '0.5' cpus: '0.5'
memory: 256M memory: 512M
reservations: reservations:
memory: 128M memory: 128M
networks: networks: