1. 选择合适的防火墙工具
先从防火墙的选择说起。Debian系统上,常用的方案主要围绕两个工具转:一个是iptables,这是内核级的包过滤利器,功能极其强大,但配置起来确实有点烧脑,规则写错一个符号,网络就"罢工"了;另一个是ufw(Uncomplicated Firewall),它本质上是iptables的"操作手册",把复杂的命令行封装成了简单易用的指令,非常适合新手快速上手。从实用性角度来看,推荐优先使用ufw——虽然Debian默认没有安装,但只需一行命令就能搞定。
2. 基础配置:设置默认策略与开放必要端口
防火墙的灵魂在于"默认拒绝一切,按需放行"。究竟该如何配置呢?我们来一步一步拆解。
设置默认策略
核心逻辑很简单:拒绝所有传入连接,允许所有传出连接。这样做的好处是,外部攻击者无法主动触达你的系统,但你自己发起的访问(比如从服务器拉取更新包)不受影响。具体操作:
- ufw示例:
sudo ufw default deny incoming(拒传入) +sudo ufw default allow outgoing(放传出)。 - iptables示例:
sudo iptables -P INPUT DROP(拒传入) +sudo iptables -P OUTPUT ACCEPT(放传出)。
开放必要端口
只有一件事需要做:只开放系统真正需要的服务端口。通常来说,HTTP(80)、HTTPS(443)、SSH(22)是标配,其他端口一律关闭,避免攻击面被扩大。命令也很直白:
- ufw示例:
sudo ufw allow 80/tcp(HTTP)、sudo ufw allow 443/tcp(HTTPS)、sudo ufw allow ssh(SSH)。 - iptables示例:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT(HTTP)、sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT(SSH)。
启用防火墙
- 对ufw,只需执行
sudo ufw enable,规则立刻生效。 - 对iptables,还需要额外做一步:保存规则并设置开机自启(具体方法见下文)。
3. 阻止恶意IP与端口扫描
基础防线搭建好之后,就要考虑更主动的防御了——比如怎么拦住那些不死心、频繁发起攻击的IP。
手动阻止特定IP/网段
如果你在日志里发现了某个IP异常活跃(比如连续扫描端口),可以直接封掉它:
- 用ufw:
sudo ufw deny from 192.168.1.100(封单个IP)或sudo ufw deny from 192.168.1.0/24(封整个C段)。 - 用iptables:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP(封单个IP)或sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.150 -j DROP(封IP段)。
自动阻止暴力破解
手动封IP终究是事后补救,更适合的做法是利用工具自动拦截。这里推荐SSHGuard,它能自动分析SSH日志,识别出反复尝试登录的IP并临时封禁。安装方法:sudo apt install sshguard。值得注意的一点是,Debian上安装后它会默认集成ufw,只需修改/etc/ufw/before.rules,在*filter部分前添加一句 -A ufw-before-input -j SSHGUARD,就能让SSH流量全部经过SSHGuard的审查。
4. 高级防护:防范DDoS与端口扫描
对付更高强度的攻击,比如DDoS或端口扫描,需要更专业的武器。
DDoS攻击缓解
想象一下,某个恶意IP突然发起大量连接请求,就像一群人疯狂挤一扇门——我们需要一个"安全员"来识别并驱逐它。DDoS Deflate就是干这个的。它能够检测异常连接数(比如每秒超过10次SYN请求),然后自动封禁该IP一段时间。安装与配置:下载脚本 wget https://github.com/jgmdev/ddos-deflate/archive/master.zip,解压后运行 ./install.sh,再修改 /usr/local/ddos/ddos.conf 中的阈值(比如设置 NO_OF_CONNECTIONS=50)和封禁时长(比如 BAN_PERIOD=600 秒)。
端口扫描检测
端口扫描最常用的手段之一就是SYN扫描。通过iptables的 --tcp-flags 选项,可以精准拦截这类试探:丢弃仅带有SYN标志的包(完整的TCP握手应该包含SYN+ACK等多次交互)。示例规则:sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP。这条规则加进去后,大部分扫描器都会扑空。
5. 规则持久化与系统加固
防火墙配置得再好,如果重启后规则丢失,一切就白干了。所以最后一步很关键:让规则"记住自己"。
保存iptables规则
Debian默认不保存iptables规则,需要手动操作:先安装 iptables-persistent 包:sudo apt install iptables-persistent(安装时选择"保存当前规则")。然后执行 sudo sh -c "iptables-sa ve > /etc/iptables/rules.v4"。最后,创建一个启动脚本 sudo nano /etc/network/if-pre-up.d/iptables,写入 #!/bin/sh\n/sbin/iptables-restore < /etc/iptables/rules.v4,并赋予执行权限 sudo chmod +x /etc/network/if-pre-up.d/iptables。
系统安全加固
防火墙只是第一道防线,系统层面的加固同样不能少:
- 定期更新:
sudo apt update && sudo apt upgrade -y,堵住已知漏洞。 - 禁用root远程登录:编辑
/etc/ssh/sshd_config,将PermitRootLogin改为no,然后重启SSH服务sudo systemctl restart ssh。这样一来,攻击者就算有root密码也无从下手。 - 使用强密码与SSH密钥:通过
passwd设置复杂密码(大小写、数字、特殊字符混搭),再配置SSH密钥认证(~/.ssh/authorized_keys),最后在配置文件中禁用密码登录(PasswordAuthentication no)。
注意事项
- 千万不要在配好防火墙之前关闭SSH端口的访问。这是新手最容易踩的坑——规则一应用,自己却连不上服务器了。建议先在本地终端操作,确认无误后再应用到远程生产环境。
- 养成检查防火墙日志的习惯。日志文件通常位于
/var/log/syslog或/var/log/ufw.log,定期翻一翻,不仅可以发现异常流量,还能帮你提前调整规则。 - 如果对某条规则的效果心里没底,可以先在虚拟机或测试机上模拟一遍,避免直接在生产环境"翻车"。毕竟,防火墙配置错了,代价就是服务不可用。
