본문 바로가기
서버/리눅스 서버

아파치 서버 사용시, 유저에이전트에 따라 접근 제한하기

by ㅋㅋ잠자 2018. 4. 14.
반응형

안녕하세요?


지속적으로 요청을 보내올 때, 특정한 유저에이전트의 연결을 블록하는 방법에 대해서 알아보겠습니다.


공식 문서는 아래와 같습니다.


https://httpd.apache.org/docs/2.4/ko/mod/mod_setenvif.html


정확하게 어떻게 되는것인지는 파악을 못하고 있습니다만, 간단하게는 아래와 같이 설정이 가능합니다.


SetEnvIfNoCase User-Agent .*Kodi.* black_list

<Directory /media/volume1/htdocs/download/epg>

        Order Allow,Deny

Allow from all

        Deny from env=black_list

SetOutputFilter RATE_LIMIT

        SetEnv rate-limit 100

</Directory>


음.. SetEnvIf 는 대소문자를 구분하는 것이고 NoCase 가 붙은것은 대소문자를 구분하지 않는 것입니다.


예로서 상기 조건을 보시면 KODI 나 Kodi 나 kodi 나 동일하게 조건이 적용된다는 뜻입니다.


SetEnvIfNoCase 속성 정규식 변수설정 / 이런식으로 작성하게 되어 있습니다.


그러면 상기 문장은 Kodi 라는 문자열이 포함된 User-Agent 가 감지되면 black_list 라는 것이 선언이 되는 것입니다. 실제로 변수를 초기화하지는 않습니다.


그리고 특정 경로에 대해서 black_list 변수가 존재하면 Deny (거부) 를 하는 식으로 되어 있습니다.


만약에 여러가지를 거부하고 싶으시면 SetEnvIfNoCase User-Agent .*Kodi.* black_list 이 문장을 여러번 사용하시면 됩니다.


추가적으로 Kodi 에서만 접근허용 하고 싶으시면, Deny from all 을 하신 다음에 Allow from env=black_list 를 적용하시면 됩니다.


간단하게 알아 보았습니다.


그럼 적용이 되는지도 알아봐야겠죠? 바로 로그를 확인해 보겠습니다.


root@debian-4350:~# tail -F /var/log/apache2/other_vhosts_access.log

download.djjproject.com:80 112.170.107.56 - - [14/Apr/2018:04:44:22 +0900] "HEAD /epg/xmltv.xml HTTP/1.1" 403 140 "-" "Kodi/17.6 (Linux; Android 6.0.1; MIBOX3 Build/MOB31Z) Android/6.0.1 Sys_CPU/armv8l App_Bitness/32 Version/17.6-Git:20171114-a9a7a20"

download.djjproject.com:80 112.170.107.56 - - [14/Apr/2018:04:44:22 +0900] "GET /epg/xmltv.xml HTTP/1.1" 403 472 "-" "Kodi/17.6 (Linux; Android 6.0.1; MIBOX3 Build/MOB31Z) Android/6.0.1 Sys_CPU/armv8l App_Bitness/32 Version/17.6-Git:20171114-a9a7a20"

download.djjproject.com:80 112.170.107.56 - - [14/Apr/2018:04:44:22 +0900] "GET /epg/xmltv.xml HTTP/1.1" 403 472 "-" "Kodi/17.6 (Linux; Android 6.0.1; MIBOX3 Build/MOB31Z) Android/6.0.1 Sys_CPU/armv8l App_Bitness/32 Version/17.6-Git:20171114-a9a7a20"

download.djjproject.com:80 125.176.37.16 - - [14/Apr/2018:04:44:28 +0900] "GET /epg/xmltv.xml HTTP/1.1" 403 472 "-" "Kodi/17.6 (Linux; Android 7.0; SHIELD Android TV Build/NRD90M) Android/7.0.0 Sys_CPU/aarch64 App_Bitness/64 Version/17.6-Git:20171119-ced5097"

download.djjproject.com:80 125.176.37.16 - - [14/Apr/2018:04:44:30 +0900] "GET /epg/xmltv.xml HTTP/1.1" 403 472 "-" "Kodi/17.6 (Linux; Android 7.0; SHIELD Android TV Build/NRD90M) Android/7.0.0 Sys_CPU/aarch64 App_Bitness/64 Version/17.6-Git:20171119-ced5097"

download.djjproject.com:80 125.176.37.16 - - [14/Apr/2018:04:44:32 +0900] "GET /epg/xmltv.xml HTTP/1.1" 403 472 "-" "Kodi/17.6 (Linux; Android 7.0; SHIELD Android TV Build/NRD90M) Android/7.0.0 Sys_CPU/aarch64 App_Bitness/64 Version/17.6-Git:20171119-ced5097"

download.djjproject.com:80 49.166.116.100 - - [14/Apr/2018:04:44:49 +0900] "GET /epg/xmltv.xml HTTP/1.1" 200 20803 "-" "Wget/1.16 (linux-gnueabihf)"

download.djjproject.com:80 58.123.34.236 - - [14/Apr/2018:04:45:06 +0900] "GET /test HTTP/1.1" 200 256 "-" "Wget/1.16 (linux-gnueabihf)"

download.djjproject.com:80 49.166.116.100 - - [14/Apr/2018:04:45:49 +0900] "GET /epg/xmltv.xml HTTP/1.1" 200 20803 "-" "Wget/1.16 (linux-gnueabihf)"

download.djjproject.com:80 58.123.34.236 - - [14/Apr/2018:04:46:01 +0900] "GET /test HTTP/1.1" 200 256 "-" "Wget/1.16 (linux-gnueabihf)"


상기처럼 Kodi 가 포함된 User-Agent 에서는 403 으로 존재하지 않는다는 응답을 보냅니다.


그리고 아래의 wget 은 200 응답으로 정상적으로 보내주고 있습니다.


감사합니다.

반응형

댓글