我试图在apache上通过模式glitter_calendar来阻止机器人的请求。
史前史。 我的服务器被机器人大量访问。 请求URI是… glitter_calendar .. wordpress返回404.服务器甚至每周下降一次。 我试图用Fail2ban阻止他们。 没有成功。 服务器负载不下降,我得到新的主机不断出现在我的iptables块规则。
在我的.htaccess我试图通过模式glitter_calendar添加一个块规则:
# 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 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{THE_REQUEST} ^.*(wpdffcontent)|(glitter_calendar)|(mp4:).* [NC] RewriteRule ^(.*)$ - [F,L] </IfModule> <Files xmlrpc.php> Order Deny,Allow Deny from all </Files>
发现类似的问题。 链接:
我的国防部重写似乎并没有工作。 在wordpress中我得到错误404 Not Found ,而不是通过Apache。
模块mod_rewrite已打开:
# httpd -M ... Loaded Modules: ... rewrite_module (shared) ...
虚拟主机configuration由virtualminpipe理。 我该如何解决?
httpd.conf :
... LoadModule rewrite_module modules/mod_rewrite.so ... <VirtualHost xxxx]:80> SuexecUserGroup "#505" "#504" ServerName example.com ServerAlias www.example.com ServerAlias webmail.example.com ServerAlias admin.example.com ServerAlias autoconfig.example.com ServerAlias autodiscover.example.com DocumentRoot /home/example/public_html ErrorLog /var/log/virtualmin/example.com_error_log CustomLog /var/log/virtualmin/example.com_access_log combined ScriptAlias /cgi-bin/ /home/example/cgi-bin/ ScriptAlias /awstats/ /home/example/cgi-bin/ ScriptAlias /AutoDiscover/AutoDiscover.xml /home/example/cgi-bin/autoconfig.cgi ScriptAlias /Autodiscover/Autodiscover.xml /home/example/cgi-bin/autoconfig.cgi ScriptAlias /autodiscover/autodiscover.xml /home/example/cgi-bin/autoconfig.cgi DirectoryIndex index.html index.htm index.php index.php4 index.php5 <Directory /home/example/public_html> Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI allow from all AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch AddType application/x-httpd-php .php AddHandler fcgid-script .php AddHandler fcgid-script .php5 FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php5 </Directory> <Directory /home/example/cgi-bin> allow from all AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch </Directory> RewriteEngine on RewriteCond %{HTTP_HOST} =webmail.example.com RewriteRule ^(.*) https://example.com:20000/ [R] RewriteCond %{HTTP_HOST} =admin.example.com RewriteRule ^(.*) https://example.com:10000/ [R] RemoveHandler .php RemoveHandler .php5 php_admin_value engine Off FcgidMaxRequestLen 1073741824 Alias /dav /home/example/public_html Alias /pipermail /var/lib/mailman/archives/public <Location /dav> DAV on AuthType Basic AuthName "example.com" AuthUserFile /home/example/etc/dav.digest.passwd Require valid-user ForceType text/plain Satisfy All RemoveHandler .php RemoveHandler .php5 RewriteEngine off </Location> <Files awstats.pl> AuthName "example.com statistics" AuthType Basic AuthUserFile /home/example/.awstats-htpasswd require valid-user </Files> RedirectMatch /cgi-bin/mailman/([^/\.]*)(.cgi)?(.*) https://example.com:10000/virtualmin-mailman/unauthenticated/$1.cgi$3 RedirectMatch /mailman/([^/\.]*)(.cgi)?(.*) https://example.com:10000/virtualmin-mailman/unauthenticated/$1.cgi$3 php_value memory_limit 32M IPCCommTimeout 41 Redirect /mail/config-v1.1.xml /cgi-bin/autoconfig.cgi Redirect /.well-known/autoconfig/mail/config-v1.1.xml /cgi-bin/autoconfig.cgi </VirtualHost>
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{THE_REQUEST} ^.*(wpdffcontent)|(glitter_calendar)|(mp4:).* [NC] RewriteRule ^(.*)$ - [F,L] </IfModule>
这需要在现有的WordPress mod_rewrite指令之前执行,否则将永远不会被处理。 (WordPress 前端控制器会在您的指令有机会运行之前重写每个请求)。但是,您的指令应该写成一行代码:
RewriteRule (?:wpdffcontent|glitter_calendar|mp4:) - [F]
不需要<IfModule>包装(实际上,这应该被省略)。 RewriteEngine On只需要在文件中出现一次(任何地方)。 检查RewriteRule 模式中的URL是更有效的,不需要额外的RewriteCond指令。 不需要所有的捕获组(你最初的指令中有4个捕获组,这只是不必要的资源浪费)。 当使用F标志时L不是必需的( L有效地暗示 )。
如果你特别需要阻止GliTTer_CALendar和GLITTER_calendar以及glitter_calendar等,那么只包含NC标志。如果所有的请求都是glitter_calendar (全部小写),那么这就是你需要阻止的。
不过,我认为最好使用mod_setenvif和mod_authz_host(Apache 2.2)的组合来阻止这些请求。 (如果你有使用mod_rewrite的额外的.htaccess文件,可以覆盖mod_rewrite的块。)
例如:
SetEnvIf Request_URI "(?:wpdffcontent|glitter_calendar|mp4:)" blockit Order Deny,Allow Deny from env=blockit
从逻辑上讲,任何阻止指令应该是你的.htaccess文件中的第一件事情。 随后是规范/外部redirect,然后是内部重写(原始的WordPress指令)。 但是,如果你有访问服务器configuration(你似乎有),那么这些都应该在你的服务器configuration,并禁用.htaccess (即AllowOverride None )。