안녕하세요?
지속적으로 요청을 보내올 때, 특정한 유저에이전트의 연결을 블록하는 방법에 대해서 알아보겠습니다.
공식 문서는 아래와 같습니다.
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 응답으로 정상적으로 보내주고 있습니다.
감사합니다.
'서버 > 리눅스 서버' 카테고리의 다른 글
WD Mycloud Gen1 debian 7 설치하기 및 최적화 - 2편 (1) | 2018.04.18 |
---|---|
WD MyCloud 초기 세팅하기 및 구조 살펴보기 - 1편 (0) | 2018.04.18 |
아파치 웹서버 가상호스트 별, 속도 제한 적용하기 (0) | 2018.04.14 |
데비안 / 우분투 PPTP VPN 서버 설치하기 (0) | 2018.03.28 |
카비레이크 계열 (아폴로레이크 포함) VAAPI 트랜스코딩 (데비안8) (3) | 2018.02.04 |
댓글