Debian虚拟机防火墙配置技巧
对于大多数Debian用户,UFW(Uncomplicated Firewall) 是管理防火墙的首选工具,它基于iptables但提供了更简洁的命令行接口,适合新手快速上手。若需更底层的高级配置(如复杂规则、自定义链),再选择iptables。
安装与启用
首先更新软件包列表并安装UFW:
sudo apt update && sudo apt install ufw
启用UFW(启用后会默认拒绝所有传入连接,允许所有传出连接):
sudo ufw enable
启用时系统会提示是否允许SSH连接(若通过SSH管理虚拟机,必须选择“是”,否则会导致断连)。
常用规则操作
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow 443/tcp # 允许HTTPS
sudo ufw allow 22/tcp # 允许SSH
sudo ufw allow from 192.168.1.100
sudo ufw allow mysql # 等同于允许3306/tcp
sudo ufw status numbered查看)或直接指定规则删除:sudo ufw delete 3 # 删除第3条规则
sudo ufw delete allow 80/tcp # 删除允许80/tcp的规则
verbose模式显示详细信息):sudo ufw status # 简略状态
sudo ufw status verbose # 详细状态
高级UFW配置
sudo ufw limit 22/tcp
sudo ufw allow in on eth2 to any port 3306
sudo ufw logging on
sudo ufw reset
若需更灵活的规则(如端口转发、自定义链),可使用iptables,但需手动保存规则并设置开机加载:
安装与基本配置
安装iptables:
sudo apt update && sudo apt install iptables
配置默认策略(拒绝所有传入,允许所有传出):
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
允许已建立的连接(避免中断现有会话):
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许SSH(22/tcp)、HTTP(80/tcp)、HTTPS(443/tcp):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
拒绝其他所有入站连接(作为最后一条规则):
sudo iptables -A INPUT -j DROP
保存与自动加载规则
Debian默认不保存iptables规则,需手动保存:
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
创建开机加载脚本(/etc/network/if-pre-up.d/iptables):
sudo tee /etc/network/if-pre-up.d/iptables <<EOF
#!/bin/sh
/sbin/iptables-restore < /etc/iptables/rules.v4
EOF
sudo chmod +x /etc/network/if-pre-up.d/iptables
此时重启虚拟机后,iptables规则会自动加载。
默认策略设置
无论使用UFW还是iptables,都应遵循“默认拒绝,显式允许”原则:
sudo ufw default deny incoming(拒绝所有传入)、sudo ufw default allow outgoing(允许所有传出);sudo iptables -P INPUT DROP(拒绝所有传入)、sudo iptables -P OUTPUT ACCEPT(允许所有传出)。SSH安全配置
/etc/ssh/sshd_config,修改Port 2222,然后重启SSH;PermitRootLogin no(需用普通用户+sudo);测试与验证
telnet或nmap测试端口是否开放(如nmap -p 80 your_vm_ip);sudo ufw status)或iptables规则(sudo iptables -L -n -v),确保无冲突规则;/var/log/ufw.log)或系统日志(journalctl -u ufw),排查异常连接。