From d207706ad9eeced2c478ce7045e102ba5aca9b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD?= Date: Sun, 1 Oct 2023 02:35:30 +0600 Subject: [PATCH] Create envip.md --- content/posts/envip.md | 73 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 content/posts/envip.md diff --git a/content/posts/envip.md b/content/posts/envip.md new file mode 100644 index 0000000..2672867 --- /dev/null +++ b/content/posts/envip.md @@ -0,0 +1,73 @@ +--- +title: Динамический whitelist в caddy +description: envip +date: 2023-10-01T01:10:00+06:00 +tags: [linux, caddy] +--- + +# envip +[Небольшая утилита](https://github.com/fruworg/envip), которая позволяет реализовать динамический whitelist для caddy: +Часть поддоменов будут доступны списку явно разрешённых IP. +Список IP автоматически пополняется при успешном прохождении basic auth на отдельном поддомене. + +## Установка +### Caddy + +В Caddyfile необходимо добавить секцию с поддоменом для обновления whitelist (необходимо заменить [строку basic auth](https://caddyserver.com/docs/caddyfile/directives/basicauth)): +```sh +wh. { + @block { + not remote_ip forwarded {$WHITE_LIST} + } + handle @block { + basicauth { + Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG + } + reverse_proxy localhost:50009 { + header_up X-Real-IP {remote_host} + } + } + respond "IP already added! :)" +} +``` + +Пример поддомена, доступ до которого разрешён только с IP из whitelist: +```sh +sub. { + @allow { + remote_ip forwarded {$WHITE_LIST} + } + handle @allow { + reverse_proxy localhost:50001 + } + respond 403 +} +``` + +В `caddy.service` необходимо добавить следующую строку в секцию `[Service]`: +```sh +Environment="WHITE_LIST=127.0.0.1/8" +``` + +Необходимо перезагрузить `caddy`: +```shell +systemctl daemon-reload +systemctl restart caddy +``` + +### envip +Установка бинарника: +```shell +mkdir /opt/envip +wget https://github.com/fruworg/envip/raw/main/envip -O /opt/envip/envip +``` + +Установка systemd-демона `envip`: +```shell +wget https://raw.githubusercontent.com/fruworg/envip/main/envip.service -O /etc/systemd/system/envip.service +``` + +Запуск envip: +```shell +systemctl enable --now envip +```