如何使用 UFW 保护我的服务器(假定受到攻击)

如何使用 UFW 保护我的服务器(假定受到攻击)

我在 Debian 上运行 Apache。

以下是我的 apache 错误日志中的条目示例。问题 1:服务器是否受到攻击(我每小时看到大约 30-40 个这样的条目)。我推测这些是对我服务器的攻击或至少是对我服务器的探测。

[2022 年 2 月 13 日星期日 16:37:54.013622] [:error] [pid 16071] [客户端 106.193.114.87:19356] PHP 通知:未定义变量:/var/www/example.com/page-sidebar-both.php 第 57 行中的 error_msg,引用者:https://example.com/podbanks/abresult.php?ab=ab18&lg=English

[2022 年 2 月 13 日星期日 16:38:01.289976] [:error] [pid 16109] [客户端 106.193.114.87:19358] PHP 通知:未定义变量:/var/www/example.com/abc/defg.php 第 210 行中的 result_msg,引用者:https://example.com/result.php?ab=ab18&lg=English

[2022 年 2 月 13 日星期日 16:38:01.290048] [:error] [pid 16109] [客户端 103.77.154.37:1842] PHP 通知:未定义变量:/var/www/example.com/pods/dashboard.php 第 210 行中的 status,referer: https://example.com/result.php?ab=AB18&lg=English

[2022 年 2 月 13 日星期日 16:38:26.788827] [:error] [pid 15961] [客户端 54.90.210.118:36104] PHP 通知:未定义变量:/var/www/example.com/biz.php 第 63 行中的 BaseURL

(页面和变量有效,但端口号很奇怪)。

问题 2:如果这些是攻击,我可以使用 UFW 阻止它们吗?我目前有:

To                         Action      From
--                         ------      ----
WWW Full                   ALLOW       Anywhere
3306                       ALLOW       Anywhere
22                         ALLOW       Anywhere
8081                       ALLOW       Anywhere
1185                       ALLOW       Anywhere
WWW Full (v6)              ALLOW       Anywhere (v6)
3306 (v6)                  ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)
8081 (v6)                  ALLOW       Anywhere (v6)
1185 (v6)                  ALLOW       Anywhere (v6)

8081                       ALLOW OUT   Anywhere
8081 (v6)                  ALLOW OUT   Anywhere (v6)

考虑到上述情况,以下步骤是否有效且完整?

ufw disable
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow WWW Full
ufw allow 1185
ufw allow 3306
ufw enable

(第 1 行是为了确保我不会被锁定 - 我正在使用 PuTTY)

问题 3:如果 MySQL 仅在本地使用,我真的需要打开 3306 吗?我仅通过受密码和会话保护的 php 查询授予对数据库的访问权限。

问题 4:我是否需要端口 8081?它是由“WWW Full”自动添加的吗?

答案1

(页面和变量有效,但端口号很奇怪)。

端口号正常。是客户端临时端口

问题 2:如果这些是攻击,我可以使用 UFW 阻止它们吗?我目前有:

一般情况下不会。你需要在适用的层面上进行过滤,并且流量到达 Apache - 因此您无法在 L3 进行过滤。

如果 MySQL 仅在本地使用,我真的需要打开 3306 吗?我仅通过受密码和会话保护的 php 查询授予对数据库的访问权限。

不,您不需要。本地 mySQL 是通过套接字而不是 TCP/IP 进行的。即使不需要,您也应该只允许它在环回接口 (127.0.0.1) 上进行。

问题 4:我是否需要端口 8081?它是由“WWW Full”自动添加的吗?

可能不是。但你需要知道你的应用程序是如何工作的。

答案2

我没有看到任何攻击迹象,只是 PHP 写得不好。您可以通过更改 PHP 的错误报告配置来过滤日志中的通知。端口也没有什么异常,该范围内的客户端端口是正常的。

答案3

补充问题 1:您引用的日志消息没有显示任何攻击迹象。相反,它们表明您的 Web 服务器的 PHP 代码中存在错误。这些消息还包含发生错误的确切位置(文件名和行号)。您可能想看看那里。

消息中的端口号一点也不奇怪,而且绝对正常。

添加问题2:由于没有发生袭击,因此该问题不适用。

补充问题 3:如果 MySQL 端口 3306 仅由 Web 服务器本地使用,则您不需要也不应该将其暴露给网络。也就是说,MySQL 服务器应配置为仅侦听地址 127.0.0.1 (localhost),并且不应在 ufw 中允许使用端口 3306。

附加问题 4:是否需要允许端口 8081 取决于该端口上是否有任何服务正在运行,而您希望这些服务可以通过网络访问。如果端口 8081 上没有任何服务正在监听,或者监听该端口的任何服务都无法通过网络访问,则您不应在 ufw 中允许它。

答案4

你在互联网上暴露的任何内容都会被探测其弱点。

良好的被动安全的基础是了解哪些网络流量对于您的服务正常运行是必要的,并且只允许特定的流量。对于任何非标准的东西,您都无法通过在 Serverfault 上向陌生人寻求建议来获得这种理解。

如果您仅向 Internet 提供 Web 服务,则您可能需要允许来自客户端(“任何”)的唯一流量可能是 HTTP 和 HTTPS。

您还需要提供一个管理界面 - 常规 ssh 或某种管理 VPN。无论您在此处选择什么,重要的是要足够坚固以抵御不可避免的暴力攻击。对这些渠道使用密钥或基于证书的身份验证是一种很好的做法。

一般来说,您永远不想将数据库服务器直接暴露在互联网上。

相关内容