HTTP_HOST가 IP (보안) 인 경우 .htaccess 블록 액세스
내 서버에서 많은 공격을 받았습니다. 대부분은 취약성 스캔으로 시작하여 POST 요청이 이어집니다.
곧 Cloudflare (WAF 및 DDos)를 구현할 예정입니다. 이것은 내 도메인의 DNS 조회가 내 서버가 아닌 Cloudflare의 IP 주소를 표시한다는 것을 의미합니다. 따라서 내 서버의 IP 주소는 이와 관련하여 숨겨집니다.
그러나 공격은 여전히 전 세계의 가능한 모든 IP를 하나씩 통과하여 들어올 수 있습니다. 내 서버 로그를 보면 이런 일이 많이 발생하는 것을 볼 수 있습니다. (내 1 개의 서버에 3 개의 IP가 연결되어 있고 XXX.XXX.XXX.XX1, XXX.XXX.XXX.XX2, XXX.XXX.XXX.XX3에서 동일한 공격이 발생합니다.)
내 최상위 .htaccess는 다음과 같습니다.
# deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>
# deny unused request types
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule .* - [F,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
질문 :
[HTTP_HOST = XXX.XXX.XXX.XX1 OR HTTP_HOST = XXX.XXX.XXX.XX2 OR HTTP_HOST = XXX.XXX.XXX.XX3] 트래픽이 즉시 차단 되도록 무엇을 추가해야 합니까?
이 새 코드를 .htaccess 상단에 넣을 수 있습니까? 현재 거기에있는 것을 깨뜨릴까요?
답변
Host특정 IP 의 헤더 를 확인할 필요가 없으며 Host숫자로 시작하는 항목 만 확인 하면됩니다. 예를 들어, .htaccess파일 상단에서 :
RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]
함축 된 L플래그는 필요하지 않습니다 F.
또한 추가 <IfModule mod_rewrite.c>래퍼 가 필요하지 않습니다 . WordPress를 그대로 두십시오. (그것도 반드시 필요한 것은 아니지만)
그러나 이러한 유형의 블록은 .NET에서가 아닌 서버 / 가상 호스트 수준에서 이상적으로 수행되어야합니다 .htaccess. <VirtualHost>이러한 원하지 않는 IP 요청을 트랩 하는 기본값 을 구성하십시오 .
예를 들어, 이름 기반 VirtualHosts 만 사용한다고 가정하면 다음 과 같은 형식 의 기본 VirtualHost ( 다른 모든 VirtualHost보다 먼저 발생 해야 함)를 구성 할 수 있습니다 .
# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
ServerName default.example.com
<Location />
Require all denied
</Location>
</VirtualHost>
이는 다른 "이름이 지정된"가상 호스트에 매핑되지 않는 모든 요청을 포착합니다. _default_의 별칭입니다 *. 위에서 언급했듯이이 <VirtualHost>컨테이너 는<VirtualHost> 서버 구성의 다른 모든 컨테이너보다 먼저 발생 해야합니다 . 먼저 정의된다는 사실이 "기본값"이되는 이유입니다.
ServerName지시어는 실제 이외로 정의되어야한다 서버 이름 시스템에. 생략 할 수 있지만 서버는 계산 만 시도하므로 신뢰할 수없는 것으로 판명 될 수 있습니다.
이렇게하면 웹 사이트를 제공하는 실제 가상 호스트가 이러한 다른 요청 을 처리 할 필요 가 없습니다.
# deny all POST requests
좀 극단적 인 것 같습니다! 귀하의 사이트가 여전히 작동한다는 것이 놀랍습니까?