NAVER Cloud

ALB 사용 환경에서 특정 IP 만 웹 접근하도록 설정

한크크 2022. 1. 14. 19:40

네이버클라우드의 ALB 에는 ACG 로 인입되는 트래픽을 제어할 수 없다. NACL을 이용해서 LB Subnet 단위로 제어할 수 있지만, LB 별로 제어해야 하는 IP 가 다를 경우 이 방법을 사용하기 어렵다. 

LB 를 통해 서버로 트래픽이 들어올 때는 LB IP 를 달고 들어오기 때문에 서버의 ACG로도 source IP 를 제어할 수 없다. 

이런 경우 ALB 에서는 모든 트래픽을 받고 서버에 설치한 apache, nginx 와 같은 웹서버에서 접근할 수 있는 IP 를 제어해야 한다. 

 

ALB 는 생성이 되었다는 가정하에 CentOS apache 기준으로 설정하는 방법이다. 

 

1. X-Forwarded-For 설정

먼저 서버로 들어오는 IP가 ALB IP 가 아닌 source IP 를 헤더에 가지고 들어올 수 있도록 설정을 변경한다. 

X-Forwarded-For 설정을 하기 전에 access_log 를 보면 계속 ALB의 IP 만 찍힌다. 

/etc/httpd/conf/httpd.conf 에서 아래와 같이 1) LogFormat을 수정 , 2) Directory "/var/www/html"에 접근 허용할 설정, 

3) mod_remoteip.c 에 LB IP 설정 후 httpd 를 재시작한다. 

vi /etc/httpd/conf/httpd.conf

# 아래 내용과 같이 수정
# 1.%{X-Forwarded-For}i 를 추가
# 2.%h 를 %a 로 변경
# 3.Directory "/var/www/html" 에 접근을 허용할 IP 지정 (Source IP & LB IP)
# 4.mod_remoteip.c 에 LB IP 추가

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%{X-Forwarded-For}i %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %b" common

<IfModule logio_module>

<Directory "/var/www/html">
    Order deny,allow
    Deny from all
    Allow from 54.180.128.140 10.0.3.92 10.0.3.93
</Directory>

<IfModule mod_remoteip.c>
    RemoteIPHeader X-Forwarded-For
    RemoteIPInternalProxy 10.0.3.92 10.0.3.93
</IfModule>

# 서비스 재기동 
systemctl restart httpd

설정이 정상적으로 되면, 아래와 같이 source IP -> LB IP 가 로그에 찍히는 것을 확인할 수 있고, 접근 허용을 설정한 IP는 200, 접근 허용을 설정하지 않은 IP는 403을 return 하는것을 확인할 수 있다. 

반응형