简介
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
- openSSH
- cPanel、WHM、Webmail(仅适用于 cPanel 服务器)
- Pure-ftpd、vsftpd、Proftpd
- 受密码保护的网页(htpasswd)
- Mod_security 失败(v1 和 v2)
- Suhosin 失败
- Exim SMTP AUTH
除此之外,您还可以使用正则表达式匹配定义自己的登录文件。如果您有一个记录了失败登录但在特定尝试次数后不会阻止用户的应用程序,这可能会有所帮助。
进程跟踪
CSF 可以配置为跟踪进程,以便检测可疑进程或打开的网络端口,并在检测到任何问题时向系统管理员发送电子邮件。这可能有助于您识别并阻止 VPS 上可能存在的利用。
目录监视
目录监视监视 /temp 和其他相关文件夹中的恶意脚本,并在检测到时向系统管理员发送电子邮件。
信使服务
启用此功能允许 CSF 在应用封锁时向客户端发送更多信息的消息。此功能既有利也有弊。一方面,启用它为客户端提供了更多信息,因此在登录失败的情况下可能会减少挫败感。另一方面,这提供了更多信息,可能会使攻击者更容易攻击您的 VPS。
端口洪水保护
此设置可防止端口洪水攻击,如拒绝服务(DoS)攻击。您可以指定每个端口在您喜欢的时间段内允许的连接数量。建议启用此功能,因为它可能防止攻击者迫使您的服务停机。您应注意设置的限制,因为太严格的设置会中断正常客户端的连接。另一方面,过于宽松的设置可能允许攻击者成功进行洪水攻击。
端口敲门
端口敲门允许客户端在没有打开端口的情况下连接服务器。服务器仅在成功的端口敲门序列后才允许客户端连接到主要端口。如果您提供的服务仅供有限的受众使用,您可能会发现这很有用。
连接限制保护
此功能可用于限制来自 IP 地址对每个端口的并发活动连接数。正确配置后,这可能会防止服务器上的滥用,如 DoS 攻击。
端口/IP 地址重定向
CSF 可以配置为将连接重定向到另一个 IP/端口。注意:重定向后,客户端的源地址将是服务器的 IP 地址。这不等同于网络地址转换(NAT)。
UI 集成
除了命令行界面,CSF 还为 cPanel 和 Webmin 提供了 UI 集成。如果您不熟悉 Linux 命令行,您可能会发现此功能有所帮助。
IP 阻止列表
此功能允许 CSF 从您定义的来源自动下载被阻止的 IP 地址列表。
安装 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 端口也会自动打开。防火墙还配置为启用测试模式,这意味着启动 CSF 后五分钟后 iptables 规则将自动删除。一旦您知道您的配置有效,并且您不会被锁定,应禁用此功能。
基本配置
CSF 可以通过编辑 /etc/csf/csf.conf 文件进行配置:
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:超文本传输协议安全传输层(HTTPS)
- 端口 465:SSM 的 URL Rendesvous 目录(Cisco)
- 端口 587:电子邮件消息提交(SMTP)
- 端口 993:安全的互联网消息访问协议(IMAPS)
- 端口 995:TLS/SSL 的邮局协议 3(POP3S)
您可能并未使用所有这些服务,因此可以关闭未使用的端口。建议关闭所有端口(从列表中删除端口号),然后添加您需要的端口。
以下是应打开的端口集:
在任何服务器上:
TCP_IN: 22,53 TCP_OUT: 22,53,80,113,443 UPD_IN: 53 UPD_OUT: 53,113,123
Apache:
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,您还应该类似于配置 IPv4 端口的方式配置 TCP6_IN、TCP6_OUT、UPD6_IN 和 UPD6_OUT。
您可以在 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 文件。请注意,即使在 csf.deny 文件中明确阻止了这些 IP 地址,允许的 IP 地址也会被允许。
允许 IP 地址的操作方式与阻止 IP 地址类似。唯一的区别是您应编辑 /etc/csf/csf.allow 而不是 csf.deny。
nano /etc/csf/csf.allow
**忽略 IP 地址