我的服务器最近遭受了寻找 PHPMyAdmin 的探测 HTTP 请求的临时洪水。它们来自不同的IP并且是串联的。也就是说,在几秒钟内,我收到了来自同一 IP 的一系列 URL 的一堆请求。强度激增至每秒 10 个请求。以下是 URL 列表的示例:
/mysql/web/
/mysql/pMA/
/sql/phpmanager/
/sql/php-myadmin/
/sql/phpmy-admin/
/sql/sql/
/sql/myadmin/
/sql/webadmin/
/sql/sqlweb/
/sql/websql/
/sql/webdb/
/sql/sqladmin/
/sql/sql-admin/
/sql/phpmyadmin2/
/sql/phpMyAdmin2/
/sql/phpMyAdmin/
/db/myadmin/
/db/webadmin/
/db/dbweb/
/db/websql/
/db/webdb/
/db/dbadmin/
/db/db-admin/
/db/phpmyadmin3/
/db/phpMyAdmin3/
/db/phpMyAdmin-3/
/administrator/phpmyadmin/
/administrator/phpMyAdmin/
/administrator/db/
/administrator/web/
/administrator/pma/
/administrator/PMA/
/administrator/admin/
/phpMyAdmin2/
/phpMyAdmin3/
/phpMyAdmin4/
/phpMyAdmin-3/
/php-my-admin/
/PMA2011/
/PMA2012/
/PMA2013/
/PMA2014/
/PMA2015/
/PMA2016/
/PMA2017/
/PMA2018/
/pma2011/
/pma2012/
/pma2013/
/pma2014/
/pma2015/
/pma2016/
/pma2017/
/pma2018/
/phpmyadmin2011/
/phpmyadmin2012/
/phpmyadmin2013/
/phpmyadmin2014/
/phpmyadmin2015/
/phpmyadmin2016/
/phpmyadmin2017/
/phpmyadmin2018/
/phpmanager/
此列表可能因 IP 不同而有所不同。问题是如何有效地将此类攻击抑制到每秒 1 个请求。如果可能的话,在 3 个无效 URL 后屏蔽该 IP 1 分钟。我不使用 PHPMyAdmin,也没有任何其他基于 HTTP 的数据库接口。但我更愿意让这扇门在未来保持开放或容易打开。
至于解决方案,我一直在考虑在 Apache 2 级别阻止请求,这似乎为时已晚,也许是错误的。或者低于 Apache,在 Netfilter 级别。我正在使用 UFW,并希望继续使用它,而不是直接操作 IPTables。然后 UFW 需要以某种方式知道哪些请求可以或不可以。我猜想,那么需要一个通往 Apache 的桥梁吗?
一般来说,这个问题对于任何解决 Linux+Apache 环境中嗅探 HTTP 请求问题的答案都是开放的。