diff --git a/docs/images/other/office/excel_vba_01.png b/docs/images/other/office/excel_vba_01.png old mode 100644 new mode 100755 diff --git a/docs/images/ubuntu/docker-and-ufw.jpg b/docs/images/ubuntu/docker-and-ufw.jpg new file mode 100644 index 0000000..8c90456 Binary files /dev/null and b/docs/images/ubuntu/docker-and-ufw.jpg differ diff --git a/docs/ubuntu/docker-ufw.md b/docs/ubuntu/docker-ufw.md new file mode 100644 index 0000000..689f4bf --- /dev/null +++ b/docs/ubuntu/docker-ufw.md @@ -0,0 +1,152 @@ +Как использовать Docker с UFW одновременно + +![](../images/ubuntu/docker-and-ufw.jpg) + +Удивительно, но Docker не работает из коробки с “Universal Firewall” Linux, или UFW. +## Почему Docker не работает с UFW? +UFW задуман как очень простой брандмауэр. + +Проблема в том, что UFW и Docker пытаются изменить одни и те же базовые правила брандмауэра. И этот конфликт требует дополнительной настройки, если вы хотите запустить UFW и Docker вместе. + +При настройке базового брандмауэра UFW на запрет по умолчанию и разрешению SSH, это будет выглядеть, что все безопасно. Но это не будет блокировать запуск контейнеров Docker на других портах + +Сложно диагностировать эту проблему, тк в UFW и Docker – это отдельные системы. + +> UFW неосознанно обманывает вас и не показывает открытые порты контейнеров Docker. + +Это может стать серьезной проблемой, если вы не решите ее. + +Например: при запуске дашборда администратора на порту 8000 и добавлении правила только на доступ с определенных ip адресов (белый список). В обычных условиях все будет хорошо, особенно если дашборд имеет собственную аутентификацию. UFW покажет правило брандмауэра, как внесенное в белый список. Дашборд будет доступен вам с тех адресов, которые вы указали в правиле. **НО, если запущено через Docker, то по умолчанию оно будет видно на порту 8000 из любого места**. + +## Исправление конфигурации Docker +Есть решение, которое предлагает Docker: отредактируйте _/etc/default/docker_ или _/etc/docker/daemon.json_ и просто отключите функциональность iptables в Docker: + +``` +DOCKER_OPTS="--iptables=false" +``` +Это работает, однако это лишь половинчатое решение. + +Это лишает Docker возможности управлять собственными сетями и может привести к тому, что контейнеры вообще не смогут получить доступ в интернет из коробки. + +Это все еще может работать, но вам придется вручную поддерживать правила iptables для контейнеров Docker и пользовательских сетей, что сложно, раздражает и лишает цель простоты UFW. + +Реальное решение сложное, но, к счастью, достаточно распространенное, поэтому на [Github](https://github.com/chaifeng/ufw-docker) есть полезная публикация с подробным описанием проблемы и шагов по ее устранению. + +По сути, вам нужно изменить конфигурацию UFW в _/etc/ufw/after.rules_ и добавить следующий блок в конце: + +``` +# BEGIN UFW AND DOCKER +*filter +:ufw-user-forward - [0:0] +:ufw-docker-logging-deny - [0:0] +:DOCKER-USER - [0:0] +-A DOCKER-USER -j ufw-user-forward +-A DOCKER-USER -j RETURN -s 10.0.0.0/8 +-A DOCKER-USER -j RETURN -s 172.16.0.0/12 +-A DOCKER-USER -j RETURN -s 192.168.0.0/16 +-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN +-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 +-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 +-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 +-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 +-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 +-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 +-A DOCKER-USER -j RETURN +-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] " +-A ufw-docker-logging-deny -j DROP +COMMIT +# END UFW AND DOCKER +``` + +### Разберем подробнее что делают строчки. + +Следующие правила позволяют частным сетям посещать друг друга. Как правило, частные сети пользуются большим доверием, чем сети общего пользования. +``` +-A DOCKER-USER -j RETURN -s 10.0.0.0/8 +-A DOCKER-USER -j RETURN -s 172.16.0.0/12 +-A DOCKER-USER -j RETURN -s 192.168.0.0/16 +``` +Следующие правила позволяют UFW управлять тем, разрешено ли общедоступным сетям посещать службы, предоставляемые контейнером Docker. Чтобы мы могли управлять всеми правилами брандмауэра в одном месте. +``` +-A DOCKER-USER -j ufw-user-forward +``` +Следующие правила блокируют запросы на подключение, инициированные всеми общедоступными сетями, но разрешают внутренним сетям доступ к внешним сетям. + +- Для протокола TCP предотвращает активное установление TCP-соединения из общедоступных сетей. +- Для протокола UDP блокируется любой доступ к портам меньше 32767. + +Зачем этот порт? Поскольку протокол UDP не имеет состояния, невозможно заблокировать сигнал рукопожатия, который инициирует запрос на соединение, как это делает TCP. + +Для GNU/Linux мы можем найти диапазон локальных портов в файле `/proc/sys/net/ipv4/ip_local_port_range`. Диапазон по умолчанию`32768-60999`. + +При доступе к службе протокола UDP из запущенного контейнера локальный порт будет выбран случайным образом из диапазона портов, и сервер будет возвращать данные на этот случайный порт. Следовательно, мы можем предположить, что порт прослушивания протокола UDP во всех контейнерах меньше 32768. Это причина того, что мы не хотим, чтобы общедоступные сети обращались к портам UDP меньше 32768. +``` +-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 +-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 +-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 +-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 +-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 +-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 +-A DOCKER-USER -j RETURN +``` +## Утилита для изменений + +Ручные правки это хорошо, но в [этом репозитории](https://github.com/chaifeng/ufw-docker) есть хорошая утилита, которая автоматизирует это и предоставляет полезные команды для проверки реального состояния брандмауэра. +```bash +sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker +sudo chmod +x /usr/local/bin/ufw-docker +``` +Затем установите конфиг и перезапустите UFW. +```bash +ufw-docker install +sudo systemctl restart ufw +``` +После перезапуска изменения должны применяться автоматически, но если они не применяются, вам может потребоваться перезапустить Docker или вашу машину в целом. + +После включения все порты должны быть правильно заблокированы. + +Список доступных команд: +```bash +ufw-docker help +ufw-docker install +ufw-docker status +ufw-docker allow webapp +ufw-docker allow webapp 80 +ufw-docker allow webapp 53/udp +ufw-docker list webapp +ufw-docker delete allow webapp 80/tcp +ufw-docker delete allow webapp +``` + +## Белые списки портов контейнеров Docker с помощью UFW + +Это решение потребует от вас немного другой конфигурации портов. + +В утилите ufw-docker есть команда, которая выборочно вносит порты в белый список для определенных контейнеров Docker. +```bash +ufw-docker allow httpd 80 +``` +Однако если вы хотите использовать более продвинутое правило, например, белый список на основе IP, вам придется использовать ufw route allow +```bash +ufw route allow proto tcp from 1.2.3.4 to any port 9443 +``` + +## Разница между ufw-user-forward и ufw-user-input + +### ufw-user-input + +| Плюсы | Минусы | +|--|--| +| Прост в использовании и понимании, поддерживает старые версии Ubuntu. Например, чтобы разрешить публике посещать опубликованный порт, порт контейнера которого — `8080`, используйте команду: `ufw allow 8080` | Кроме разрешения доступа к портам контейнеров, он также разрешает доступ к портам хоста. Например, если служба запущена на хосте, а порт — `8080`. Команда `ufw allow 8080` позволяет общедоступной сети посещать службу хоста и все опубликованные порты, контейнеры которых имеют порт `8080`. Но мы просто хотим дать доступ к службе, работающей на хосте или работающую внутри контейнеров. Но не вместе. Чтобы избежать этой проблемы, нам может понадобиться использовать команду, подобную следующей, для всех контейнеров: `ufw allow proto tcp from any to 172.16.0.3 port 8080` | + +### ufw-user-forward + +| Плюсы | Минусы | +|--|--| +| Невозможно предоставить доступ к службам, работающим одновременно на хостах и в контейнерах, с помощью одной и той же команды. Например, если мы хотим опубликовать порт `8080` контейнеров, используем следующую команду: `ufw route allow 8080`. Общедоступная сеть может получить доступ ко всем опубликованным портам, порты контейнеров которых имеют статус `8080`. Но порт `8080` хоста по-прежнему недоступен из общедоступной сети. Если мы хотим это сделать, выполните следующую команду, чтобы разрешить публичный доступ к порту на хосте отдельно: `ufw allow 8080` | Не поддерживает старые версии Ubuntu, и команда немного сложнее. Но вы можете использовать мой скрипт [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) | + +## Вывод + +Если мы используем более старую версию Ubuntu, мы можем использовать `ufw-user-input` chain. Но будьте осторожны, чтобы не открывать службы, которые не должны быть раскрыты. + +Если мы используем более новую версию Ubuntu, которая является подкомандой поддержки `ufw route`, нам лучше использовать `ufw-user-forward` цепочку и использовать `ufw route` команду для управления правилами брандмауэра для контейнеров. \ No newline at end of file diff --git a/docs/ubuntu/hpe/hpe-mcp.md b/docs/ubuntu/hpe/hpe-mcp.md new file mode 100644 index 0000000..694e9fe --- /dev/null +++ b/docs/ubuntu/hpe/hpe-mcp.md @@ -0,0 +1,73 @@ + +Недавно у меня появился на руках сервер HPE ML30 Gen10. Мне больше всего нравится Ubuntu Server, поэтому я решил установить его на сервере. Чуть позднее я узнал, что у HP есть утилиты, которые вы можете установить в Linux для изменения и просмотра настроек и информации на уровне системы, что довольно круто. + +Я хотел попробовать их, однако Ubuntu не входит в группу ОС (Red Hat и SUSE), которые получают пакеты [обновлений](https://downloads.linux.hpe.com/SDR/project/spp/) . Так что документация и поддержка минимальны, и мне потребовалось немного времени, чтобы во всем разобраться. + +> Отказ от ответственности: я работаю над сервером Gen 10, поэтому +> устанавливаемые пакеты могут отличаться от других поколений. + + ## Установка через APT + +Во-первых, чтобы установить утилиты, вам нужно добавить [источник](https://downloads.linux.hpe.com/SDR/project/mcp/) в **apt**: +```bash +sudo echo "deb http://downloads.linux.hpe.com/SDR/repo/mcp dist/project_ver non-free" > /etc/apt/sources.list.d/mcp.list +``` + +Где: +- **dist**: jammy, bullseye, focal, buster, bionic, xenial, precise, stretch, jessie +- **project_ver**: current, 12.40, 12.30, 12.20, 12.05, 12.00, 11.30, 11.21, 11.05 + +Для **Ubuntu Server 22** команда будет такой: +```bash +sudo echo "deb http://downloads.linux.hpe.com/SDR/repo/mcp jammy/current non-free" > /etc/apt/sources.list.d/mcp.list +``` +Затем вам необходимо зарегистрировать [открытые ключи HPE](https://downloads.linux.hpe.com/SDR/keys.html) (в этой же команде, идет преобразование ключей в новый формат, чтобы при обновлении пакетов, не выходило предупреждение): +```bash +curl https://downloads.linux.hpe.com/SDR/hpPublicKey2048.pub | apt-key add - +apt-key export 5CE2D476 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/hpPublicKey2048.gpg +sudo apt-key --keyring /etc/apt/trusted.gpg del 5CE2D476 + +curl https://downloads.linux.hpe.com/SDR/hpPublicKey2048_key1.pub | apt-key add - +apt-key export B1275EA3 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/hpPublicKey2048_key1.gpg +sudo apt-key --keyring /etc/apt/trusted.gpg del B1275EA3 + +curl https://downloads.linux.hpe.com/SDR/hpePublicKey2048_key1.pub | apt-key add - +apt-key export 26C2B797 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/hpePublicKey2048_key1.gpg +sudo apt-key --keyring /etc/apt/trusted.gpg del 26C2B797 +``` + Теперь вам просто нужно обновить исходники apt и установить утилиты. +```bash +sudo apt update +``` + +Несмотря на имена пакетов, указанные на [странице HPE](https://downloads.linux.hpe.com/SDR/project/mcp/) , я обнаружил, что некоторые пакеты просто не существуют или имеют другие имена. + +Список доступных компонентов для установки: + +| | | +| - | - | +| **hp-health** | HPE System Health Application and Command line Utilities (Gen9 and earlier) | +| **hponcfg** | HPE RILOE II/iLO online configuration utility | +| **amsd** | HPE Agentless Management Service (Gen10 only) | +| **hp-ams** | HPE Agentless Management Service (Gen9 and earlier) | +| **hp-snmp-agents** | Insight Management SNMP Agents for HPE ProLiant Systems (Gen9 and earlier) | +| **hpsmh** | HPE System Management Homepage (Gen9 and earlier) | +| **hp-smh-templates** | HPE System Management Homepage Templates (Gen9 and earlier) | +| **ssacli** | HPE Command Line Smart Storage Administration Utility | +| **ssaducli** | HPE Command Line Smart Storage Administration Diagnostics | +| **ssa** | HPE Array Smart Storage Administration Service | +| **storcli** | MegaRAID command line interface | + +Устанавливаются просто: `sudo apt install `. Например `sudo apt install amsd` + +## Установка через пакеты .deb + + 1. Идем в [репозиторий HPE для Linux](https://downloads.linux.hpe.com), раздел **mpc** — Management Component Pack for ProLiant. + 2. Ищем Ubuntu. + 3. Дальше *pool* → *non-free*. + 4. Находим нужный пакет, копируем ссылку, качаем и устанавливаем. Для примера будет **amsd**: + ```bash + cd /tmp + wget https://downloads.linux.hpe.com/SDR/repo/mcp/Ubuntu/pool/non-free/amsd_3.1.0-1745.130-jammy_amd64.deb + dpkg -i amsd_3.1.0-1745.130-jammy_amd64.deb + ``` \ No newline at end of file diff --git a/docs/ubuntu/telegraf.md b/docs/ubuntu/telegraf.md new file mode 100644 index 0000000..f74f8f0 --- /dev/null +++ b/docs/ubuntu/telegraf.md @@ -0,0 +1,58 @@ +Telegraf это агент, написанный на Go для сбора метрик производительности из системы и сервисов, где он запущен. Собираемые метрики отправляются в **InfluxD** или в другие поддерживаемые хранилища. Из InfluxDB можно визуализировать данные и производительность используя Grafana. [Github](https://github.com/influxdata/telegraf/) + +Базовый способ использования Telegraf следующий: + +1. Агент Telegraf устанавливается на все сервера, откуда нужно собирать метрики (Ubuntu, Debian, Windows, CentOS и прочие) +2. Метрики собираются и отправляются в InfluxDB +3. Источник данных InfluxDB добавляется в Grafana +4. Созданы графики Grafana - они получают данные из источника данных InfluxDB. + +Установка Telegraf на Ubuntu 22.04 производится из репозитория Influxdata. После добавления репозитория пакет можно установить с помощью диспетчера пакетов **apt**. Добавьте репозиторий InfluxData в файл `/etc/apt/sources.list.d/influxdata.list` +```bash +wget -q https://repos.influxdata.com/influxdata-archive_compat.key +echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null +echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list +``` + +Обновить **apt** индекс и установить Telegraf + +```bash +sudo apt update && sudo apt install telegraf -y +``` + +Запустить и включить сервис, для запуска при загрузке + +```bash +sudo systemctl enable --now telegraf +sudo systemctl is-enabled telegraf +``` + +Проверить статус сервиса + +```bash +systemctl status telegraf +``` + +## Решение проблем + +### S.M.A.R.T. Input плагин + +You will need the following in your telegraf config: + +[[inputs.smart]] + use_sudo = true + +You will also need to update your sudoers file: + +$ visudo +# For smartctl add the following lines: +Cmnd_Alias SMARTCTL = /usr/bin/smartctl +telegraf ALL=(ALL) NOPASSWD: SMARTCTL +Defaults!SMARTCTL !logfile, !syslog, !pam_session + +# For nvme-cli add the following lines: +Cmnd_Alias NVME = /path/to/nvme +telegraf ALL=(ALL) NOPASSWD: NVME +Defaults!NVME !logfile, !syslog, !pam_session + +https://github.com/influxdata/telegraf/tree/master/plugins/inputs/smart \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 6f8a61d..f356d01 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -19,7 +19,11 @@ nav: - Traefik: - Traefik Forward Auth: docker-compose/traefik-forward-auth.md - Ubuntu 22: + - HPE: + - Management Component Pack: ubuntu/hpe/hpe-mcp.md - MariaDB: ubuntu/mariadb.md + - Telegraf: ubuntu/telegraf.md + - Docker+UFW: ubuntu/docker-ufw.md - Proxmox: - CT Template: proxmox/ct-template.md - Помойка: