클라우드플레어 DNS 프록시 사용할 때 아파치 로그에 IP 주소 제대로 찍히게 하기

,

클라우드플레어 DNS 프록시를 사용하면 서버의 부담을 줄일 수 있고, 보안에도 도움이 된다.

그런데 문제는 서버 로그에 클라우드플레어 ip만 남게 된다는 점이다. 트래픽이 클라우드플레어를 거쳐서 오니 그렇다.

원래의 ip를 기록하게 하는 방법이 있다. 클라우드플레어 자신의 안내글이다. 제목은 “방문자의 원래 IP 되살리기(Restoring original visitor IPs)”. 이 글에서 mod_remoteip 부분만 보면 된다. mod_cloudflare 라는 것도 원래 있었던 것 같은데 더이상 유지보수하지 않는다고 한다.

remoteip 모듈 활성화

우선 remoteip 모듈을 활성화한다.

sudo a2enmod remoteip

가상호스트 설정 업데이트

그리고 가상 호스트 설정 파일(/etc/apache2/sites-available/mytory.net.conf 같은 파일)을 열어서 아래 코드를 한 줄 넣어 준다.

RemoteIPHeader CF-Connecting-IP

그러면 아마 내용이 아래처럼 될 것이다.

<VirtualHost *:80>
  ServerName mytory.net
  ServerAdmin [email protected]
  DocumentRoot /var/www/mytory.net
  RemoteIPHeader CF-Connecting-IP
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

로그 포맷 업데이트

이제 아파치의 로그 포맷 설정을 업데이트해야 한다. 핵심은 %h를 찾아서 %a로 바꾸는 것이다.

우분투라면 /etc/apache2/apache2.conf 파일을 연다. 그리고 LogFormat을 찾는다.

그리고 %h%a로 바꾼다. 아마 아래처럼 될 것이다(%a에 노란색으로 표시를 했다).

LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common

신뢰하는 프록시 주소

신뢰하는 프록시 주소를 /etc/apache2/conf-available/remoteip.conf 에 써 주라고 한다. 클라우드플레어 ip들로 채워 줘야 하는데 여기에서 구할 수 있다: IP Ranges

아래처럼 만들면 된다. 이 ip 주소들은 2023년 2월 1일 기준 ip들이다.

RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 104.16.0.0/13
RemoteIPTrustedProxy 104.24.0.0/14
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 131.0.72.0/22

그리고 아래 명령어로 이 설정을 활성화해 준다.

sudo a2enconf remoteip

아파치 재시작

아래 명령어로 설정에 이상이 없는지 확인을 먼저 한다.

sudo apache2ctl configtest

Syntax OK 메시지가 나오면 아파치를 재시작한다.

sudo systemctl restart apache2

카테고리 글 목록 👉

,

대표글

“클라우드플레어 DNS 프록시 사용할 때 아파치 로그에 IP 주소 제대로 찍히게 하기” 에 하나의 답글

  1. […] 클라우드플레어의 DNS 프록시를 사용하는 경우에는 아파치 로그에 클라우드플레어의 ip가 찍히게 돼 fail2ban을 제대로 사용할 수 없게 된다. 원래 ip를 제대로 찍으려면 이 글을 참고하면 된다: 클라우드플레어 DNS 프록시 사용할 때 아파치 로그에 IP 주소 제대로 찍히게 … […]

댓글 남기기