无论你使用哪一种 Linux 发行版,基于 iptables 的防火墙都是不可或缺的安全配置。
配置好第一台 Linux 服务器后,是不是觉得已经万事大吉了?先别急着投入生产环境。默认状态下的 Linux 系统对攻击者来说,安全性并不算高。当然,它比当年的 Windows XP 要强不少,但这完全不足以说明问题。
想要系统真正稳定可靠,必须按照规范的安全指南来进行加固。核心思路只有一条:关闭所有不必要的服务。可问题在于——你首先需要搞清楚自己到底运行了哪些网络服务。
使用以下命令即可快速查看:
netstat -tulpn
这条命令会列出当前正在运行的服务以及它们所占用的端口。如果发现某个服务或端口完全不需要使用,就果断关闭。例如,如果没有运行网站,Apache 或 Nginx 以及 80/8080 端口就根本没有必要开启。拿不准的服务,直接关闭,不要犹豫。
一个最基本的、未经过任何额外配置的 Linux 服务器,通常会在公开端口上看到 SSH、RPC 和 NTPdate 等服务在运行。切勿随意安装那些过时且不安全的 Shell 程序,比如 telnet——否则你的服务器随时可能被攻击者入侵控制。上世纪 80 年代,你或许喜欢在 SunOS 机器上用 telnet 作为备用登录方式,但那个年代早已过去。
对于 SSH,推荐使用 RSA 密钥认证并配合 Fail2Ban 工具进行防护。至于 RPC,除非确实需要,否则直接卸载——如果你不确定是否需要,那答案就是不需要。
关闭不必要的服务端口只是第一步,接下来我们讨论如何利用 iptables 限制入站流量。
新安装的 Linux 服务器默认没有任何防火墙规则,这意味着所有流量都是默认允许通过的。这显然不符合安全要求,因此需要立即配置防火墙规则。
Iptables 是用于设置 netfilter(Linux 默认防火墙)规则的 Shell 工具。当有外部连接尝试访问你的系统时——而且这种尝试无时无刻不在发生,持续不断——iptables 会检查这些请求是否匹配规则列表。如果不匹配任何规则,则执行默认操作。
这个默认操作建议设置为“Drop”(丢弃),直接丢弃数据包,并且对方完全无法感知到探测请求究竟发生了什么。(你也可以选择“Reject”(拒绝),但这相当于告诉对方“嘿,这里运行着一套 Linux 防火墙”。对于陌生人,我们暴露的信息越少越好。)
手动配置 iptables 当然可行,但更推荐使用现成的管理工具:Fedora 上的 FirewallD 和 Debian 系上的 UFW(Uncomplicated Firewall)。这些都是 iptables 易用的前端界面,具体用法可参考相应的官方指南。本质上,它们就是在服务器门口设置了一道“未经授权禁止访问”的屏障。
不过切勿过度配置,把所有连接都禁止掉。例如以下命令:
sudo ufw default deny incoming
看起来很是高效,对吧?然而它将所有入站连接全部禁止了,包括你自己的 SSH 登录——也就是说,你将再也无法连接到这台新服务器。这可不是个好结果。
同样,如果不慎禁止了过多连接,正常的远程管理操作也会被阻断。
不要以为只有你遇到这种情况,也不是只有美国国家安全局(NSA)才会每天遭受三亿多次攻击尝试。攻击脚本根本不在乎你是谁,它们只会持续扫描存在已知漏洞的服务器。就连我个人的那台小服务器,平时一天都会收到几百次攻击试探。
所以,现在就开始行动吧!对服务进行安全加固,安装 FirewallD 或 UFW,给你的 Linux 服务器加上一道安全锁。这是保障系统安全的关键一步。
