Кабина с использованием Nginx — только с частным IP-адресом
Контекст:
у меня ес2ubnutu 20.04.5 LTS
экземпляр, который находится в vpc без общедоступного IP-адреса.
По этому поводу у меня естьnginx:1.23.2
работает в контейнере и устанавливается непосредственно на хост.
В текущей настройке: если я захожу на свой личный IP-адрес в браузере, находясь под VPN, я могу получить доступ к экрану входа в кабину. Напримерhttp://10.235.66.23/
приводит меня к входу в систему.
Когда я пытаюсь войти в систему с правильными учетными данными (как дляroot
иsudo
пользователи), он ведет на ту же страницу, с которой я начал: вход в систему.
проверка браузера:
GENERAL
Request URL: http://10.235.66.23/cockpit/login
Request Method: GET
Status Code: 401 Authentication failed
Remote Address: 10.235.66.22:80
Referrer Policy: no-referrer
RESPONSE HEADERS
Connection: keep-alive
Content-Type: text/html; charset=utf8
Cross-Origin-Resource-Policy: same-origin
Date: Sun, 25 Dec 2022 23:42:41 GMT
Referrer-Policy: no-referrer
Server: nginx/1.23.2
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
REQUEST HEADERS
X-Frame-Options: sameorigin
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cache-Control: no-cache
Connection: keep-alive
DNT: 1
Host: 10.235.66.23
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Код состоянияStatus Code: 401 Authentication failed
не складывается, потому что эти учетные данные хороши. Я также позаботился о том, чтобы у меня было/etc/ssh/sshd_config
разрешить использование пароля.
контейнер nginx настроен на прослушивание портов8080
и4430
- иfirewalld
имеет переадресацию портов:
my_zone (active)
target: DROP
icmp-block-inversion: no
interfaces:
sources: 10.0.0.0/8
services: cockpit
ports: 22/tcp 8081/tcp 4431/tcp 80/tcp 443/tcp 8080/tcp
protocols:
masquerade: yes
forward-ports: port=80:proto=tcp:toport=8081:toaddr=
port=443:proto=tcp:toport=4431:toaddr=
source-ports:
icmp-blocks:
rich rules:
Конфигурация Nginx:
server {
listen 8081;
listen 4431;
server_name 10.235.66.23;
location / {
# Required to proxy the connection to Cockpit
proxy_pass https://127.0.0.1:9091;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
# Required for web sockets to function
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Pass ETag header from Cockpit to clients.
# See: https://github.com/cockpit-project/cockpit/issues/5239
gzip off;
}
location = /testapp {
proxy_pass https://127.0.0.1:8082;
}
}
вы могли заметить, что порт9091
, я изменил это здесь:
/usr/lib/systemd/system/cockpit.socket
и здесь:/usr/share/cockpit/motd/update-motd
и когда я проверюcockpit
иcockpit.socket
статус сsystemctl
:
● cockpit.service - Cockpit Web Service
Loaded: loaded (/lib/systemd/system/cockpit.service; static; vendor preset: enabled)
Active: inactive (dead) since Sun 2022-12-25 18:44:12 EST; 7min ago
TriggeredBy: ● cockpit.socket
Docs: man:cockpit-ws(8)
Process: 1106981 ExecStartPre=/usr/lib/cockpit/cockpit-certificate-ensure --for-cockpit-tls (code=exited, status=0/SUCCESS)
Process: 1106982 ExecStart=/usr/lib/cockpit/cockpit-tls (code=exited, status=0/SUCCESS)
Main PID: 1106982 (code=exited, status=0/SUCCESS)
Dec 25 18:42:39 ip-10-235-66-23 systemd[1]: Starting Cockpit Web Service...
Dec 25 18:42:39 ip-10-235-66-23 systemd[1]: Started Cockpit Web Service.
Dec 25 18:44:12 ip-10-235-66-23 systemd[1]: cockpit.service: Succeeded.
все в порядке.
когда я бегуsudo journalctl -xe
, у меня нет проблем. когда я смотрю на вывод nginx:
10.118.46.12 - admin[25/Dec/2022:23:53:47 +0000] "GET /cockpit/login HTTP/1.1" 200 81 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:47 +0000] "GET / HTTP/1.1" 200 11105 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:47 +0000] "GET /cockpit/static/login.js HTTP/1.1" 200 15897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:47 +0000] "GET /cockpit/static/login.css HTTP/1.1" 200 12201 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:48 +0000] "GET /cockpit/static/branding.css HTTP/1.1" 200 500 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:49 +0000] "GET /cockpit/static/logo.png HTTP/1.1" 200 2971 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:49 +0000] "GET /cockpit/static/bg-plain.jpg HTTP/1.1" 200 81737 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:49 +0000] "GET /cockpit/login HTTP/1.1" 401 3464 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:49 +0000] "GET /cockpit/static/fonts/RedHatText-Regular.woff2 HTTP/1.1" 200 28396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
10.118.46.12 - - [25/Dec/2022:23:53:49 +0000] "GET /cockpit/static/fonts/RedHatText-Medium.woff2 HTTP/1.1" 200 29312 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
Итак, я действительно не понимаю, что происходит. аутентификация не проходит?
/run/cockpit/tls/server
имеетcert.source
иkey.source
- Я предполагаю, что самосертификаты работают.
если я создам/etc/cockpit/cockpit.conf
файл с:
[WebService]
Origins = https://10.235.66.23 127.0.0.1:9091
ProtocolHeader = X-Forwarded-Proto
[Log]
Fatal = /var/log/cockpit.log
[Session]
IdleTimeout=15
та же проблема.
не знаю, как маршрутизировать без общедоступного IP-адреса. Не думаю, что вы сможете использовать такую комбинацию, какcockpit.<private_ip>
с тех пор как я попробовал.
Я предполагаю, что конфигурация nginx выполнена неправильно.