AWS EC2의 Apache Web Server에서 IP 직접 접속을 차단하는 방법

들어가며

필자가 사이트를 운영하면서 접속 기록을 살펴보던 중, IP 주소를 직접 입력하여 접속한 기록이 발견되었다. 대부분의 사용자는 도메인 이름을 입력하여 접속하고, IP 주소로 접속하는 경우는 봇(Bot)이 아니라면 거의 없다고 보면 될 것 같다. 물론 필자의 경우 AWS에서 탄력적 IP를 사용하여 고정 IP처럼 사용하고 있다. 고정 IP라서 그런지 IP 주소 직접 접속이 적지 않으며, 현재 사용 중인 AWS EC2Apache Web Server에서 IP 직접 접속을 차단하는 방법을 설명하려고 한다.

AWS EC2의 Public IP 주소 가져오기

먼저, AWS EC2의 Public IP 주소를 알아야 한다. 웹 브라우저로 AWS EC2 Console에 접속해서 IP 주소를 가져와도 되지만, 고정 IP가 아니라면 IP 주소가 언제 바뀔지 모르기 때문에 다른 방법을 사용해야 할 수도 있다. 여기에서는 AWS EC2 인스턴스 메타데이터 검색 기능을 활용하였다.

방법은 간단하다. EC2 인스턴스의 터미널에서 아래의 명령어를 입력하면 인스턴스의 Public IP 주소가 출력된다. 여기에서 사용한 명령어는 EC2 인스턴스에서만 가능하다고 한다.

curl -s http://169.254.169.254/latest/meta-data/public-ipv4

Apache Web Server 설정

여기에서는 Ubuntu Server와 같은 Debian 계열 Linux 배포판을 기준으로 설명하며, Apache Web Server 설치와 같은 기본적인 설정은 완료했다고 가정하겠다.

기본적인 HTTP 프로토콜(80 포트)에서는 사이트 설정 파일에 아래의 내용을 추가한다. 여기에서 다른 사이트 이후에 작성해야 한다. 만약 HTTPS 프로토콜(443 포트)에도 적용하려면 해당 내용을 추가하면 된다.

<VirtualHost *:80>
	ServerName xxx.xxx.xxx.xxx
	<Location />
		Order deny,allow
		Deny from all
	</Location>
</VirtualHost>

환경 변수 설정

만약 현재 고정 IP를 사용 중이면 위 방법으로도 충분할 것이다. 그렇지 않다면, IP 주소가 바뀔 때마다 매번 설정을 변경하는 번거로움이 있을 것이다. 이러한 번거로움을 줄이기 위해 IP 주소를 환경 변수에 저장하는 방법을 소개한다. 참고로 이 방법은 AWS EC2에서만 작동한다.

방법은 간단하다. 위에서 설명한 인스턴스의 IP를 가져오는 명령어의 값을 환경 변수로 저장하면 된다. /etc/apache2/envvars(Ubuntu 기준) 파일에 다음 내용을 추가한다.

export PUBLIC_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)

그리고 위에서 설명한 사이트 설정을 다음과 같이 변경한다.

<VirtualHost *:80>
	ServerName ${PUBLIC_IP}
	<Location />
		Order deny,allow
		Deny from all
	</Location>
</VirtualHost>

설정을 마치고 Apache Web Server를 재실행하면 IP 주소 직접 접속 시 403 Forbidden 오류 메시지가 나타날 것이다.

마치며

지금까지 IP 주소 직접 접속을 차단하는 방법을 알아보았다. 필자가 WordPress 블로그를 관리하면서 접속 기록에 이상한 기록도 많았다. 이러한 방법을 활용해서 웹 서버 관리에 조금이라도 도움이 되기를 바란다.

댓글 남기기