apache url로 ip 대역 차단 (Location 설정)

파오리·2021년 3월 17일
1

아주 작은 기록

목록 보기
13/13

문제 상황: 현재 apache를 통해 서비스 하고 있는 사이트를 사내에서만 접근 가능하도록 변경하고자 한다. 그러나, 외부에서 url을 통해 받아오는 로그가 있어서 특정 url에 대해서는 전체를 허용한다.

Apache ip 접근 제어 문서
또 하나의 관련문서

현재 상황

# CentOS7 서버
/var/log/httpd/access.log


내부 ip로 접근하는 컴퓨터나, 외부 ip로 접근하는 핸드폰이나 모두 200 을 return하며 접속이 가능하다.

*다른 곳에서 접속 했는데, 접속 ip가 모두 동일할 경우

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 /awswww.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는 잘 들어온다.

성공 ~

profile
경험 == 배움

2개의 댓글

comment-user-thumbnail
2021년 4월 13일

성공한,,모습이,,보기,,좋네요,,^^**

1개의 답글