CLOUD
OpenStack Kolla Ansible Horizon URL 직접 접근 차단 및 정상적인 접근 방식 설정
92Hoonhee
2025. 3. 5. 16:24
현재 환경 분석
- 사용자는 192.168.0.80 VIP를 통해 Horizon에 접근.
- VIP는 10.0.2.110:443(Horizon 컨테이너)로 트래픽을 라우팅.
- Apache 설정에서 <Location "/">의 Require ip 규칙이 적용됨.
- X-Forwarded-For 헤더를 활용하여 클라이언트의 실제 IP를 인식할 수 있도록 설정 필요.
URL 직접 접근 차단 방법
Horizon의 특정 URL을 직접 입력하여 접근하지 못하도록 Apache와 Horizon Django 설정을 수정합니다.
1. Apache 설정 변경
파일 경로: /etc/kolla/horizon/horizon.conf
<VirtualHost 10.0.2.110:443>
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/kolla/horizon/horizon-error.log
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" logformat
CustomLog /var/log/kolla/horizon/horizon-access.log logformat
WSGIScriptReloading On
WSGIDaemonProcess horizon-http processes=5 threads=1 user=horizon group=horizon display-name=horizon
WSGIProcessGroup horizon-http
WSGIScriptAlias / /var/lib/kolla/venv/lib/python3/site-packages/openstack_dashboard/wsgi.py
WSGIPassAuthorization On
WSGIApplicationGroup %{GLOBAL}
# X-Forwarded-For를 신뢰하도록 설정
SetEnvIf X-Forwarded-For "^192\\.168\\.0\\.(96|100|101)$" allow_client
<Location />
Require env allow_client
</Location>
# 특정 URL 직접 접근 차단
<Location "/admin">
Require all denied
</Location>
SSLEngine On
SSLCertificateFile /etc/horizon/certs/horizon-cert.pem
SSLCertificateKeyFile /etc/horizon/certs/horizon-key.pem
</VirtualHost>
설명
- SetEnvIf X-Forwarded-For을 사용하여 원래 클라이언트 IP(192.168.0.96, 192.168.0.100, 192.168.0.101)가 VIP를 거쳐도 인식되도록 설정.
- /admin URL에 대한 직접 접근 차단 (Require all denied).
- <Location />에서 Require env allow_client로 허용된 IP만 접근 가능하도록 제한.
2. Horizon 컨테이너 재시작
docker restart horizon
정상적인 접근 방식
접근 방법 설명 예시
로그인 후 이동 | Horizon에서 로그인 후 네비게이션을 통해 접근 | https://192.168.0.80/project/instances/ |
API를 통한 접근 | OpenStack API를 통해 리소스 조회 | openstack server list |
CLI를 통한 접근 | OpenStack CLI에서 명령어 실행 | openstack volume list |
Horizon 웹 UI에서 제공하는 네비게이션을 통해 접근하면 정상적으로 동작. OpenStack API 또는 CLI를 통해 접근 가능. 브라우저 주소창에 특정 URL을 직접 입력하는 것은 차단됨.
이제 특정 URL을 직접 입력하더라도 비로그인 사용자는 접근할 수 없고, 허용된 IP에서만 Horizon에 접근할 수 있습니다.