우리는CentOS 리눅스 버전 7.4Apache 2.4가 포함된 LAMP 스택. 모니터링 대시보드에서는 다양한 성능 지표를 추적하는데, 그 중 하나는 가상 호스트가 우리 서버와 일치하지 않는 "잘못된 호스트 요청"입니다.
나는 arin.net을 사용하여 잘못된 호스트 요청을 수동으로 찾습니다. 당사 비즈니스의 성격은 미국 내에서만 이루어지기 때문에 올바른 가상 호스트 이름이 없으면 외국 IP 범위에서 당사에 대한 액세스를 차단합니다. 이를 위해 iptables를 사용합니다. fwiw의 예가 있습니다.
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 187.0.0.0/8 anywhere /* montevideo uruguay */
DROP all -- 177.0.0.0/8 anywhere /* vmontevideo uraguay */
DROP all -- 164.77.0.0/16 anywhere /* montevideo uraguay */
DROP all -- 78-0-0-0.adsl.net.t-com.hr/8 anywhere /* amsterdam */
이렇게 하면 해외에서 들어오는 모든 "스니핑" 트래픽이 효과적으로 느려집니다..
거의 갑자기 지난 2주 동안 일리노이주 시카고, Amazon AWS(워싱턴주 시애틀), 캘리포니아주 프리몬트 등에서 하루에 3~6개의 요청을 받기 시작했습니다.
다음은 Apache access_log의 일부 로그 항목입니다.
./myurl.com-access.log:23.20.12.111 - - [16/Jan/2018:00:16:21 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-access.log:23.20.54.152 - - [16/Jan/2018:08:10:03 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-access.log-20180114:23.20.12.111 - - [13/Jan/2018:08:07:44 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-ssl-access.log:74.82.47.3 - - [14/Jan/2018:07:20:31 -0600] "GET / HTTP/1.1" 200 21 "-" "-"
./myurl.com-ssl-access.log:108.178.61.58 - - [15/Jan/2018:06:40:17 -0600] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:184.154.189.90 - - [15/Jan/2018:07:54:29 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:108.178.61.58 - - [16/Jan/2018:06:16:45 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:184.154.189.90 - - [16/Jan/2018:06:51:18 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:74.82.47.3 - - [16/Jan/2018:07:28:43 -0600] "GET / HTTP/1.1" 200 20 "-" "-"
./myurl.com-ssl-access.log-20180114:74.82.47.3 - - [08/Jan/2018:06:25:14 -0600] "GET / HTTP/1.1" 302 - "-" "-"
예방할 수 있는 방법은 무엇입니까?(최대한 빨리 완전히 중단하세요)올바른 단일 가상 호스트가 없는 서버에 요청하기?
fail2ban
도움이 될 수 있는 솔루션 에 대한 응답으로 실패한 2ban이 실행 중인지 확인했습니다.
$ ps aux | grep fail2ban
root 2824 0.0 0.0 368832 53632 ? Sl 2017 17:44 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b
나는 이에 대한 규칙을 작성하는 것을 고려할 것입니다. 합법적인 트래픽을 차단할 수 없습니다. 유효한 트래픽이 가상 호스트 없이는 호스트를 요청하지 않는다고 가정하는 것이 안전합니까? (물론 웹 애플리케이션이 작성되는 방식에 따라 이것이 정직해야 합니다).
고쳐 쓰다
fall2ban은 각 IP 주소를 한 번만 사용하여 서버에 액세스하기 때문에 작동하지 않으며 재사용하지 않습니다. 웹 애플리케이션의 라인 2에 대한 트래픽을 효과적으로 식별했다고 말씀드리겠습니다. 이제 저는 매우 작고 매우 빠른 임의의 숫자가 포함된 상태 200을 보냅니다. 하지만 어떻게든 간단하게 서버를 "숨길" 수 있는 방법이 필요합니다.반응 없음서버에 실제 부하를 주지 않는 방식입니다.
답변1
문제가 되는 요청이 매번 다른 IP 주소를 사용하기 때문에 fall2ban은 작동하지 않습니다. 200, 403 및 404 응답은 모두 서버 리소스를 점유하기 위해 Apache 요청이 필요합니다.
나는 단지 "전화를 끊고" 아파치가 요청자와의 대화를 중단하고 싶었음을 깨닫고 설치를 발견했습니다.모듈 보안Apache를 다음과 같이 구성하도록 허용합니다.모든 요청 삭제서버 IP의 가상 호스트를 일치시킵니다. centos 7에 mod_security를 설치하는 것은 매우 쉽습니다.
sudo yum 설치 mod_security
그런 다음 ServerName이 호스트 IP 주소인 가상 호스트 지시문에 다음 줄을 입력합니다.
<VirtualHost *:80>
ServerName 1xx.1xx.1xx.1xx
SecRuleEngine On
SecRule REMOTE_ADDR "^\d" "log,drop,phase:1,id:111,msg:'dropped bad host request'"
...
Firefox에서 IP를 통해 서버에 액세스하는 방법은 다음과 같습니다.
...다시 시도해 보시길 바랍니다!
서버 로그에 드롭이 기록됩니다.
# tail -f 1xx.1xx.1xx.1xx-error.log
[Thu Jan 18 18:51:00.357113 2018] [:error] [pid 41716] [client 69.137.81.33] ModSecurity: Access denied with connection close (phase 1). Pattern match "^\\\\d" at REMOTE_ADDR. [file "/etc/httpd/vhost.d/ipaddyhost.conf"] [line "8"] [id "111"] [msg "dropped bad host access request"] [hostname "1xx.1xx.1xx.1xx"] [uri "/"] [unique_id "WmFA@q@5uqLACI9MKaxAAABbfwX"]
즉, 내 호스트 이름을 알고 있거나 다음을 사용하여 수행할 수 있습니다.금지하다
답변2
실패 2 금지IP 주소를 스캔하거나 서버에 나쁜 작업을 시도하는 것을 차단하는 몇 가지 규칙이 있습니다. apache
자체 규칙을 작성하거나(예: 아파치 오류 로그의 "잘못된 호스트 요청" 일치) 기존 규칙에 추가할 수 있습니다.
fail2ban
대부분의 Linux 배포판용으로 사전 패키지되어 있습니다.
답변3
나는 완전히 새로운 포괄적인 가상 호스트(즉, 실제/구성된 이름과 일치하지 않는 모든 것에 대한 기본 이름)를 설정하겠습니다. Google 또는 유사한 사이트로 리디렉션되도록 맞춤 404 오류를 설정하고, 다른 사람들이 언급했듯이 fail2ban
해당 포괄 호스트에 대한 로그를 모니터링하도록 설정하세요 .