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

category 서버/리눅스 서버 2018.04.14 04:45

안녕하세요?


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


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


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 응답으로 정상적으로 보내주고 있습니다.


감사합니다.


댓글을 달아 주세요