如何在Ubuntu上安装和配置配置服务器防火墙(CSF)
介绍
Config Server Firewall(或 CSF)是一款免费的高级防火墙,适用于大多数 Linux 发行版和基于 Linux 的 VPS。 除了防火墙的基本功能(过滤数据包)之外,CSF 还包括其他安全功能,例如登录/入侵/洪水检测。 CSF 包括 cPanel、DirectAdmin 和 Webmin 的 UI 集成,但本教程仅涵盖命令行使用。 CSF 能够识别许多攻击,例如端口扫描、SYN 泛洪和对许多服务的登录暴力攻击。 它被配置为临时阻止检测到正在攻击云服务器的客户端。
支持的操作系统和功能的完整列表可以在 ConfigServer' 的网站 上找到。
本教程是为基于 Debian 的 VPS 编写的,例如 Debian 和 Ubuntu。 这些命令应该以 root 权限执行,以 root 身份登录,或者如果安装了 sudo,则使用以下命令启动 root shell:
sudo su
笔记: 本教程涵盖 IPv4 安全性。 在 Linux 中,IPv6 的安全性与 IPv4 分开维护。 例如,“iptables”仅维护 IPv4 地址的防火墙规则,但它有一个称为“ip6tables”的 IPv6 对应项,可用于维护 IPv6 网络地址的防火墙规则。
如果您的 VPS 配置为 IPv6,请记住使用适当的工具保护您的 IPv4 和 IPv6 网络接口。 有关 IPv6 工具的更多信息,请参阅本指南:如何配置工具以在 Linux VPS 上使用 IPv6
特征
Config Server Firewall 为您的 VPS 提供广泛的保护。
登录验证失败守护进程:
CSF 会定期检查日志以查找失败的登录尝试,并且能够识别大多数未经授权的访问您的云服务器的尝试。 您可以在配置文件中定义 CSF 采取的所需操作以及尝试次数。
此功能支持以下应用程序:
- Courier imap、Dovecot、uw-imap、Kerio
- 打开SSH
- cPanel、WHM、Webmail(仅限 cPanel 服务器)
- 纯 ftpd、vsftpd、Proftpd
- 受密码保护的网页 (htpasswd)
- Mod_security 故障(v1 和 v2)
- Suhosin 失败
- 进出口 SMTP AUTH
除此之外,您还可以使用正则表达式匹配定义自己的登录文件。 如果您的应用程序记录了失败的登录,但在特定次数的尝试后确实阻止了用户,这会很有帮助。
过程跟踪
CSF 可以配置为跟踪进程以检测可疑进程或打开的网络端口,并在检测到任何情况时向系统管理员发送电子邮件。 这可以帮助您识别和阻止 VPS 上可能存在的漏洞。
目录监视
目录监视监视 /temp 和其他相关文件夹中的恶意脚本,并在检测到时向系统管理员发送电子邮件。
信使服务
启用此功能允许 CSF 在应用块时向客户端发送更多信息性消息。 此功能有利也有弊。 一方面,启用它可以为客户端提供更多信息,因此在登录失败的情况下可能会减少挫败感。 另一方面,这提供了更多信息,这可能使攻击者更容易攻击您的 VPS。
港口防洪
此设置可防止端口泛滥攻击,例如拒绝服务 (DoS) 攻击。 您可以在您喜欢的时间段内指定每个端口上允许的连接数量。 建议启用此功能,因为它可能会阻止攻击者强制关闭您的服务。 您应该注意您设置的限制,因为过于严格的设置会断开来自普通客户端的连接。 再说一遍,过于宽松的设置可能会让攻击者在洪水攻击中成功。
敲门
端口敲门允许客户端在没有打开端口的情况下与服务器建立连接。 只有在成功完成端口敲击序列后,服务器才允许客户端连接到主端口。 如果您提供的服务仅限于有限的受众,您可能会发现这很有用。
连接限制保护
此功能可用于限制从 IP 地址到每个端口的活动连接的并发数。 正确配置后,这可以防止服务器上的滥用行为,例如 DoS 攻击。
端口/IP 地址重定向
CSF 可以配置为将连接到一个 IP/端口重定向到另一个 IP/端口。 注意:重定向后,客户端的源地址将是服务器的IP地址。 这不等同于网络地址转换 (NAT)。
用户界面集成
除了命令行界面,CSF 还为 cPanel 和 Webmin 提供 UI 集成。 如果您不熟悉 Linux 命令行,您可能会发现此功能很有帮助。
IP 阻止列表
This feature allows CSF to download lists of blocked IP addresses automatically from sources defined by you.
安装 ConfigServer 防火墙
第 1 步:下载
Config Server Firewall 目前在 Debian 或 Ubuntu 存储库中不可用,必须从 ConfigServer 的网站下载。
wget http://download.configserver.com/csf.tgz
这会将 CSF 下载到您当前的工作目录。
第 2 步:解压缩
下载的文件是tar包的压缩包,需要解压解压后才能使用。
tar -xzf csf.tgz
第 3 步:安装
如果您正在使用其他防火墙配置脚本,例如 UFW,您应该在继续之前禁用它。 iptables 规则会被自动删除。
可以通过运行以下命令来禁用 UFW:
ufw disable
现在是时候执行 CSF 的安装程序脚本了。
cd csf
sh install.sh
防火墙现已安装,但您应该检查所需的 iptables 模块是否可用。
perl /usr/local/csf/bin/csftest.pl
如果没有报告致命错误,防火墙将工作。
注意:如果可能,您的 IP 地址已添加到白名单中。 此外,SSH 端口已自动打开,即使它使用自定义端口也是如此。 防火墙还配置为启用测试模式,这意味着 iptables 规则将在启动 CSF 后五分钟自动删除。 一旦您知道您的配置有效,就应该禁用它,并且您不会被锁定。
基本配置
可以通过在 /etc/csf 中编辑其配置文件 csf.conf 来配置 CSF:
nano /etc/csf/csf.conf
可以使用以下命令应用更改:
csf -r
第 1 步:配置端口
对您的 VPS 的访问越少,您的服务器就越安全。 但是,并非所有端口都可以关闭,因为客户端必须能够使用您的服务。
默认打开的端口如下:
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995" TCP_OUT = "20,21,22,25,53,80,110,113,443" UDP_IN = "20,21,53" UDP_OUT = "20,21,53,113,123"
使用开放端口的服务:
- 端口 20:FTP 数据传输
- 端口 21:FTP 控制
- 端口 22:安全外壳 (SSH)
- 端口 25:简单邮件传输协议 (SMTP)
- 端口 53:域名系统 (DNS)
- 端口 80:超文本传输协议 (HTTP)
- 端口 110:邮局协议 v3 (POP3)
- 端口 113:身份验证服务/识别协议
- 端口 123:网络时间协议 (NTP)
- 端口 143:互联网消息访问协议 (IMAP)
- 端口 443:基于 SSL/TLS (HTTPS) 的超文本传输协议
- 端口 465:SSM (Cisco) 的 URL 集合目录
- 端口 587:电子邮件消息提交 (SMTP)
- 端口 993:基于 SSL 的 Internet 消息访问协议 (IMAPS)
- 端口 995:邮局协议 3 over TLS/SSL (POP3S)
您可能没有使用所有这些服务,因此您可以关闭未使用的端口。 我建议关闭所有端口(从列表中删除端口号),然后添加您需要的端口。
如果您正在运行列出的服务,以下是应打开的端口集:
在任何服务器上:
TCP_IN: 22,53 TCP_OUT: 22,53,80,113,443 UPD_IN: 53 UPD_OUT: 53,113,123
阿帕奇:
TCP_IN: 80,443
FTP服务器:
TCP_IN: 20,21 TCP_OUT: 20,21 UPD_IN: 20,21 UPD_OUT:20,21
邮件服务器:
TCP_IN: 25,110,143,587,993,995 TCP_OUT: 25,110
MySQL 服务器(如果需要远程访问)
TCP_IN: 3306 TCP_OUT: 3306
注意:如果您将 IPv6 用于您的服务,您还应该配置 TCP6_IN、TCP6_OUT、UPD6_IN 和 UPD6_OUT,类似于之前配置 IPv4 端口的方式。
您可以在 Wikipedia 上找到 TCP 和 UDP 端口的完整列表。 您应该打开您使用的所有服务的端口。
第 2 步:附加设置
CSF 在其配置文件中提供了大量不同的选项。 下面解释了一些最常用的设置。
ICMP_IN 将 ICMP_IN 设置为 1 允许 ping 您的服务器,0 拒绝此类请求。 如果您托管任何公共服务,建议允许 ICMP 请求,因为这些请求可用于确定您的服务是否可用。
ICMP_IN_LIMIT 设置在指定时间内允许来自一个 IP 地址的 ICMP (ping) 请求数。 通常不需要更改默认值(1/s)
DENY_IP_LIMIT 设置 CSF 跟踪的被阻止 IP 地址的数量。 建议限制拒绝 IP 地址的数量,因为阻止太多可能会降低服务器性能。
DENY_TEMP_IP_LIMIT 同上,但用于临时 IP 地址块。
PACKET_FILTER 过滤无效、不需要和非法的数据包。
SYNFLOOD、SUNFLOOD_RATE 和 SYNFLOOD_BURST 这提供了针对 SYN 洪水攻击的保护。 这会减慢每个连接的初始化速度,因此只有在您知道您的服务器受到攻击时才应启用此功能。
CONNLIMIT 限制端口上的并发活动连接数。
价值:
22;5;443;20
将允许端口 22 上的 5 个并发连接和端口 443 上的 20 个并发连接。
PORTFLOOD 限制每个时间间隔可以与特定端口建立新连接的连接数。
价值:
22;tcp;5;250
如果在 250 秒内使用 TCP 协议在端口 22 上建立超过 5 个连接,将限制阻止 IP 地址。 在客户端将最后一个数据包发送到此端口后 250 秒后,该块将被删除。 您可以通过用逗号分隔它们来添加更多端口,如下所述。
port1;protocol1;connection_count1;time1,port2;protocol2;connection_count2;time2
更多设置
CSF 提供了本教程未涵盖的多种设置。 默认值通常很好,几乎可以在任何服务器上使用。 默认设置配置为防止大多数洪水攻击、端口扫描和未经授权的访问尝试。
但是,如果您想更详细地调整配置,请阅读 /etc/csf/csf.conf 中的注释并根据需要进行编辑。
第 3 步:应用更改
无论何时更改 csf.conf 中的设置,都应保存文件并重新启动 CSF 以使更改生效。
准备好配置后,按 Ctrl + X 关闭文件。 当系统询问您是否保存更改时,按 Y 保存更改。
在此之后,您应该通过使用以下命令重新启动 CSF 来应用更改:
csf -r
如果一切按计划进行,并且您仍然可以访问服务器,请再次打开配置文件:
nano /etc/csf/csf.conf
并将配置文件开头的设置 TESTING 更改为 0,如下所示:
TESTING = "0"
保存文件,并使用命令应用更改:
csf -r
阻止和允许 IP 地址
防火墙最基本的功能之一是能够阻止某些 IP 地址。 您可以通过编辑配置文件 csf.deny、csf.allow 和 csf.ignore 来拒绝(黑名单)、允许(白名单)或忽略 IP 地址。
阻止 IP 地址
如果您想阻止 IP 地址或范围,请打开 csf.deny。
nano /etc/csf/csf.deny
被阻止的 IP 地址或范围都在 csf.deny 文件中保留一行。 如果您想阻止 IP 地址 1.2.3.4 以及 IP 范围 2.3.*.*,您应该将以下行添加到文件中:
1.2.3.4 2.3.0.0/16
IP 范围使用 CIDR 表示法 表示
允许 IP 地址
如果您希望 IP 地址或范围从所有块和过滤器中排除,您可以将它们添加到 csf.allow 文件中。 请注意,允许的 IP 地址即使在 csf.deny 文件中被明确阻止也是允许的。
允许 IP 地址的工作方式类似于阻止它们。 唯一的区别是您应该编辑 /etc/csf/csf.allow 而不是 csf.deny。
nano /etc/csf/csf.allow
忽略 IP 地址
CSF 还提供从防火墙过滤器中排除 IP 地址的功能。 csf.ignore 中的 IP 地址将绕过防火墙过滤器,并且只有在 csf.deny 文件中列出时才能被阻止。
nano /etc/csf/csf.ignore
为了使更改生效,您应该在使用命令编辑上述任何文件后重新启动 CSF:
csf -r