AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 829260
Accepted
Tomas Morgan
Tomas Morgan
Asked: 2017-01-30 03:47:31 +0800 CST2017-01-30 03:47:31 +0800 CST 2017-01-30 03:47:31 +0800 CST

使用 mod_rewrite 在 apache 中按模式阻止来自机器人的请求。mod_rewrite 不工作

  • 772

我正在尝试通过glitter_calendarapache 上的模式阻止来自机器人的请求。

史前史。我的服务器被机器人大量访问。请求 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>

发现了类似的问题。链接:

  • https://stackoverflow.com/questions/4640807/how-to-block-bot-requests-to-urls-that-match-a-common-pattern-in-apache/4640865#4640865
  • https://perishablepress.com/eight-ways-to-blacklist-with-apaches-mod_rewrite/

我的 mod 重写似乎不起作用。我在wordpress中找不到错误404,而不是通过apache。

模块 mod_rewrite 开启:

# httpd -M
...
Loaded Modules:
...
rewrite_module (shared)
...

虚拟主机配置由 virtualmin 管理。我该如何解决?

部分httpd.conf:

...
LoadModule rewrite_module modules/mod_rewrite.so
...

<VirtualHost x.x.x.x]: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>
apache-2.2 .htaccess mod-rewrite botnet
  • 1 1 个回答
  • 2692 Views

1 个回答

  • Voted
  1. Best Answer
    MrWhite
    2017-01-30T04:12:08+08:002017-01-30T04:12:08+08:00
    <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 在pattern中检查 URL 效率更高,这里不需要额外的RewriteCond指令。并且不需要所有捕获组(您的初始指令中有 4 个捕获组,这只是不必要的资源浪费)。使用标志L时不需要(实际上是隐含的)。FL

    NC如果您特别需要阻止GliTTer_CALendar和GLITTER_calendar以及等,请仅包含该标志glitter_calendar。如果所有请求都是针对glitter_calendar(全部小写),那么这就是您需要阻止的全部内容。


    但是,我认为最好结合使用 mod_setenvif 和 mod_authz_host (Apache 2.2) 来阻止这些请求。.htaccess(如果您有使用 mod_rewrite 的其他文件,则可以覆盖带有 mod_rewrite 的块。)

    例如:

    SetEnvIf Request_URI "(?:wpdffcontent|glitter_calendar|mp4:)" blockit
    
    Order Deny,Allow
    Deny from env=blockit
    

    从逻辑上讲,任何阻塞指令都应该是.htaccess文件中的第一件事。随后是规范/外部重定向,然后是内部重写(原始 WordPress 指令)。但是,如果您有权访问服务器配置(您似乎拥有),那么这些都应该进入您的服务器配置并禁用.htaccess(即。AllowOverride None)。

    • 5

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve