문제 상황: 현재 apache를 통해 서비스 하고 있는 사이트를 사내에서만 접근 가능하도록 변경하고자 한다. 그러나, 외부에서 url을 통해 받아오는 로그가 있어서 특정 url에 대해서는 전체를 허용한다.
# CentOS7 서버
/var/log/httpd/access.log
내부 ip로 접근하는 컴퓨터나, 외부 ip로 접근하는 핸드폰이나 모두 200 을 return하며 접속이 가능하다.
NAT
설정으로 인하여 게이트 웨이 ip로 표시될 수 있다. 따라서 해결하려면 NAT
관리자에게 문의하면 1초만에 뚝딱 설정 바꿔주신다.
나는 외부에서 log를 url로 던져서 받는게 있어서, 해당 url은 외부에서도 접근이 가능하도록 열어두고 나머지는 사설ip만 접근이 가능하도록 해야 한다.
외부에서 접근이 가능한 url은 www.abc.com/aws/hi
이다. (예를 든 것임)
# CentOS7 서버
/etc/httpd/conf.d/django.conf (나는 따로 분리 했지만, 분리하지 않았을 경우, /etc/httpd/conf/httpd.conf 이 기본 설정 파일인 듯하다.)
<VirtualHost *:80>
...(설정들)
<Location />
Order Deny,Allow
Allow from [허용하는 ip 대역]
Deny from all
</Location>
<Location /aws>
Allow from all
</Location>
</VirtualHost>
Apache의 접근 제어는 Directory
로 설정하는게 제일 좋다고는 한다.. 하지만 나는 url로 접근을 나눠야 했기 때문에 이렇게 설정한다.
Location
뒤에 오는 /
는 url에서 www.abc.com/
을 말한다. .com
뒤에 오는 /
로 시작하는 모든 경로들에 대해서 설정한다는 뜻이다.
따라서 아랫쪽의 Location /aws
는 www.abc.com/aws
로 시작하는 모든 경로들에 대해 설정한다는 뜻. www.abc.com/aws/hi
도 다 포함이 된다.
Order Deny,Allow
는 적용 순서를 지정한다. 순서는 뒤->앞
으로 Allow 먼저하고 그 다음에 Deny 내용을 추가한다.
여기서는 허용하는 ip 대역
들에 대해서는 Allow를 하고, 그 다음에는 Deny를 하는 것이다.
허용하는 ip 대역
은 192.168.1.1
과 같은 하나의 ip를 지정하는 것도 가능하고 192.168.0.0/16
과 같이 대역으로 설정하는 것도 가능하며 여러개의 대역을 설정할 때는 192.168.0.0/16 10.0.0.0/8
과 같이 띄어쓰기로 구분한다. 192.168.
이라고 적으면 192.168.*.*
과 같은 의미라고 한다.
전체적으로 사설 ip만 접근이 가능하게 바꾸었고, 거기서 /aws
부분만 다시 전체 Allow로 바꿔줌으로써 내가 원하는 www.abc.com/aws/hi
부분도 전체 접근이 가능하다.
사설 ip를 가지고 있지 않은 기기에서 접속을 시도하면 접속이 되지 않는다.
외부에서 들어오는 log는 잘 들어온다.
성공 ~
성공한,,모습이,,보기,,좋네요,,^^**