- 🕷️ (1.4.0 🆕) Поддержка нескольких инстансов - Можно управлять несколькими стаками на разных Docker хостах через один интерфейс
- 🏪 Преобразование `docker run ...` команд в `compose.yaml`
- 📙 Файловая структура - Dockge не меняет изначальные файлы, они хранятся на диске как обычно. Можно взаимодействовать с ними, используя обычные `docker compose` команды
- 🚄 Быстрый - Прогресс (Pull/Up/Down) и вывод терминала в режиме реального времени
- 🐣 Простой в использовании и стильный пользовательский интерфейс.
Добавил авторизацию через Authentik, но потребовалось сделать так, чтобы формы входа не было. Чтобы сразу шел редирект на страницу авторизации Authentik.
Для этого нужно выолпнить команду (nextcloud в докере):
никогда не открывайте порт 2375 для доступа в Интернет. Вас взломают/ Это еще более важно для виртуальных частных серверов, которые обычно предоставляют доступ ко всем портам. Включите брандмауэр, чтобы разрешить только порты 80 и 443 (и заблокировать остальные) для прохождения на ваш сервер, а также реализовать обходной путь Docker IP Tables, описанный далее в этом руководстве.
Никогда не открывайте порт 2375 для доступа в Интернет. Вас взломают. Это еще более важно для виртуальных частных серверов, которые обычно предоставляют доступ ко всем портам. Включите брандмауэр, чтобы разрешить только порты 80 и 443 (и заблокировать остальные) для прохождения на ваш сервер, а также реализовать обходной путь Docker IP Tables, описанный далее в этом руководстве.
!!! note
!!! note
Кроме того, порт `2375` должен быть открыт только для внутренней сети (*127.0.0.1:2375*).
Кроме того, порт `2375` должен быть открыт только для внутренней сети (*127.0.0.1:2375*).
В блоке **environment:** указываем раздел Docker API, который хотим открыть или закрыть. Я добавил комментарии, чтобы описать, какие службы требуют каких разделов API. Например, если вы не используете WatchTower, вы можете ввести **0** для нескольких разделов API.
В блоке **environment:** указываем раздел Docker API, который хотим открыть или закрыть. Я добавил комментарии, чтобы описать, какие службы требуют каких разделов API. Например, если вы не используете WatchTower, вы можете ввести **0** для нескольких разделов API.
Сделаем Policy-based Routing (PBR) - маршрутизация на основе определенных политик (правил, условий), которые являются относительно гибкими и устанавливаются Администратором. Другими словами это технология предоставляет условия гибкой маршрутизации (если смотреть на технологию с первоочередной ее задачи), по источнику или назначению пакета.
Формируем списки (`address-list`) для адресов или подсетей:
```
# auth.servarr.com - ресурс, у которого меняем маршрут
Купил себе в дом термостат Hessway c управлением по RS-485 (Modbus). С установкой правда возникли сложности, тк Wirenboard отказывался самостоятельно находить устройство.
Для начала физическое подключение. Шина RS подключается по 2 проводам, на термостате красный и белый. **В большинстве случаев A=красный, B=белый. Но это же китайцы, может быть и по другому.**
Параметры подключения RS-485 с завода:
- Baud rate — 9600 бит/с,
- Parity — None,
- Data bits — 8,
- Stop bits — 1.
Но даже с этими параметрами, не находит. Поэтому будет прописывать вручную. С завода, у термостата адрес 1. Его можно поменять через меню:
1. Выключите термостат нажатием на кнопку ON/OFF.
2. Зажмите одновременно кнопки M и Clock на 5 секунд — термостат войдет в сервисный режим.
3. Кратким нажатием на кнопку M выберите параметр C.
4. Кнопками вверх ↑ и вниз ↓ установите новый адрес термостата.
5. После установки адреса подождите 5 секунд, термостат применит новые настройки и выйдет из сервисного режима.
6. Включите термостат нажатием на кнопку ON/OFF.
Далее вручную прописываем на нужном порту эти настройки и привязываем к шаблону: BHT-002GBLN (Скачать можно по ссылке: https://support.wirenboard.com/uploads/short-url/oBLAAEHVntr3mGnoplxGsgTgMEp.json)
После все должно заработать.
## Не нашлось или хз
Можно попробовать перебрать адреса на порту:
```
systemctl stop wb-mqtt-serial
for i in {1..255}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-2 --debug -b9600 -pnone -s2 -a$i -t3 -o400 -r0 -c1 2>/dev/null | grep Data:`; echo -e $D; done
**Локаль (locale)** — это файл, который содержит таблицу с указанием того, какие символы считать буквами, и как их следует сортировать. Операционная система использует эту таблицу для отображения букв определенного национального алфавита.
После установки чистой системы Linux Ubuntu или Debian, если не был выбран русский ввод и вывод, то их надо установить.
Для начала проверяем, какая локаль установлена:
```
locale
```
Если вывод команды такой:
```
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
```
То нужно настроить локаль.
Выполним команду:
```
dpkg-reconfigure locales
```
Откроется диалоговое окно, в котором необходимо установить нужное значение региональных настроек (локали).
**AppArmor** — это модуль безопасности для **Ubuntu** и **Debian** , который применяет политики контроля доступа к приложениям. В определенных средах эти ограничения могут мешать определенным операциям или требовать корректировки. Отключение **AppArmor** может потребоваться для обеспечения совместимости с определенными приложениями или конфигурациями.
В системах, где гибкость имеет решающее значение, например, в средах разработки, может потребоваться отключение или удаление AppArmor. __Этот процесс включает остановку службы, отключение ее запуска при загрузке и удаление пакета AppArmor__ и его зависимостей. Важно понимать последствия для безопасности, поскольку отключение AppArmor снижает защиту системы.
Обычно рекомендуется держать AppArmor включенным в производственных средах. Однако, если ситуация требует этого, отключение AppArmor следует выполнять с осторожностью. Имейте в виду, что некоторые пакеты, такие как snapd , могут переустановить AppArmor при удалении.
## Действия по отключению и удалению AppArmor в Ubuntu и Debian:
1. Откройте терминал в вашей системе.
2. Остановите службу AppArmor .
```
sudo systemctl stop apparmor
```
3. Отключить запуск AppArmor при загрузке.
```
sudo systemctl disable apparmor
Synchronizing state of apparmor.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
4. При необходимости удалите пакет AppArmor и его зависимости.
```
sudo apt remove --assume-yes --purge apparmor
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
apparmor* snapd*
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 122 MB disk space will be freed.
##### snipped
```
!!! tip
Это также удалит snapd . Продолжайте, только если вы не используете snapd для управления пакетами. Переустановка snapd также установит AppArmor как зависимость.
Длоя начала, сделаем себе юзера, у которого не будет прав рута. Root имеет полные права в системе и если разрешать для него удаленное администрирование, то это будет не безопасно.
Новый пользователь создается командой [`adduser`](https://manpages.ubuntu.com/manpages/oracular/en/man8/adduser.8.html), во время создания вводится имя пользователя, устанавливается пароль. По умолчанию, команда `adduser` выберет первый доступный UID из диапазона обычных пользователей, заданного в файле настройки. UID может быть изменён с помощью параметра `--uid`.
```bash
adduser user1
```
После, добавим созданного пользователя в группу, которая имеет право выполнять команды с повышением привилегий `sudo`. В различных дистрибутивах это могут быть разные команды:
=== "CentOS и Red Hat"
```bash
usermod -aG wheel <username>
```
=== "Ubuntu"
```bash
usermod -aG sudo <username>
```
## SSH Ключи вместо паролей
Пароли это конечно хорошо, но в случае утечки - это вектор атаки. Так же, не забываем, что пароль всегда можно подобрать через брутфорс. Если брутфорс можно отсеить через fail2ban, то как быть с утечкой? Все просто - можно вместо паролей использовать аутентификацию по ключам.
Рассмотрим самую популярную реализации протокола SSH - OpenSSH
=== "Клиентская"
```bash
sudo apt install openssh-client
```
=== "Серверная"
```bash
# Установка на сервере
sudo apt install openssh-server
#Запуск демона SSH (sshd) на сервере под Ubuntu
sudo systemctl start sshd
#
Автоматический запуск демона при каждой загрузке
sudo systemctl enable sshd
```
!!! tip
Замечу, что серверная часть OpenSSH включает в себя клиентскую. То есть через openssh-server можно подключаться к другим серверам.
Нет смысла на обычном пк, не являющимся сервером, ставить полноценный сервер OpenSSH - это только даст возможность удалённого подключения к компьютеру (кроме случаев когда это дейсвтительно нужно)
После того, как OpenSSH поставлен, нужно сгенерировать ключи SSH на компьютере, с которого вы будете заходить на сервер:
```bash
ssh-keygen -t rsa
```
Публичный ключ хранится в файле `.pub` и выглядит как строка случайных символов, которые начинаются с`ssh-rsa`.
Затем нужно из-под рута создать на сервере директорию SSH в домашнем каталоге пользователя и добавить публичный ключ SSH в файл authorized_keys, используя текстовый редактор вроде nano:
На стороне клиента указываем местоположение секретного ключа для аутентификации:
```bash
ssh-add DIR_PATH/keylocation
```
Теперь можно залогиниться на сервер под именем юзера по этому ключу:
```bash
ssh [username]@hostname
```
!!! warning
Настоятельно рекомендую сделать несколько резервных копий приватного ключа. Так как если авторизация по паролю будет отключена, а приватный ключ утерян, то для того чтобы войти на сервер, нужен будет или прямой доступ к клавиатуре или KVM консоль.
По умолчанию, в Убунте отключен вход через ssh под рутом, но в Debian и других ОС нет. Чтобы отключить, нужно в файле `/etc/ssh/sshd_config` найти строчку `PermitRootLogin yes` и изменить значение на `no`.
После, можно отключить авторизацию пользователя по паролю. Для этого все в том же файле `/etc/ssh/sshd_config` меняем параметр у строки `PasswordAuthentication` yes на `no`.
## Fail2Ban
Ранее, я уже уопминал про защиту от брутфорса, используя Fail2Ban. Fail2Ban - это сервис, который анализирует логи и считает количество авторизаций за период времени с каждого IP адреса. К примеру, можно блокировать доступ к серверу, если за последний час было 5 проваленных авторизаций.
Установка обычная, через пакет:
```bash
sudo apt install fail2ban
systemctl start fail2ban
systemctl enable fail2ban
```
У сервиса есть 2 конфига: `/etc/fail2ban/fail2ban.conf` и `/etc/fail2ban/jail.conf`. Параметры ограничений указываются во втором файле:
```text
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
```
## Смена портов по умолчанию
По умолчанию, SSH работает на 22 порту и если не стоит fail2ban, а сервер смотрит в интернет, то в логах начнут попадатся брутфорс. Даже с учетом отключенной авторизации через пароли. Чтобы лишний раз не триггерить сканеры, рекоменудю сменить порт у SSH на любой другой.
Сделать это можно в файле `/etc/ssh/sshd_config` в параметре `Port 22`
Чтобы подключиться к серверу через кастомный порт, используется команда вида: