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에 접근할 수 있습니다.