Debian防火墙定制化指南
一 工具选型与适用场景
二 快速上手 UFW
sudo apt update && sudo apt install ufwsudo ufw default deny incoming;sudo ufw default allow outgoingsudo ufw enable(远程操作务必先放行 SSH,避免锁死)sudo ufw allow 22/tcp 或 sudo ufw allow OpenSSHsudo ufw allow http;sudo ufw allow httpssudo ufw allow from 203.0.113.10 to any port 22sudo ufw allow in on eth0 to any port 3306sudo ufw allow 7100:7200/tcpsudo ufw allow 101/tcp;sudo ufw allow 101/udpsudo ufw status verbosesudo ufw delete allow 80/tcpsudo ufw resetsudo ufw export > /etc/ufw/user.rules三 使用 firewalld 做区域化与细粒度控制
sudo apt install firewalldsudo systemctl start firewalld;sudo systemctl enable firewalldsudo firewall-cmd --statesudo firewall-cmd --get-zones;sudo firewall-cmd --set-default-zone=publicsudo firewall-cmd --zone=public --add-port=80/tcp --permanent;sudo firewall-cmd --add-service=ssh --permanentsudo firewall-cmd --reloadsudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100/32" service name="ssh" accept'sudo firewall-cmd --query-port=60091/tcp四 使用 iptables 与 nftables 精确控制
sudo iptables -A INPUT -i lo -j ACCEPTsudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTsudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT(SSH);80/443(HTTP/HTTPS)sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPTsudo iptables -P INPUT DROP(务必先确保已放行 SSH,避免失联)sudo iptables-save > /etc/iptables/rules.v4sudo iptables-restore < /etc/iptables/rules.v4sudo apt install iptables-persistent(安装时选择保存当前规则;后续可用 sudo netfilter-persistent save|start 管理)sudo nft list rulesetsudo nft add rule inet filter input tcp dport 22 ip saddr 192.168.1.100 acceptsudo nft list ruleset > /etc/nftables.conf/etc/network/if-pre-up.d/nftables,内容 #!/bin/sh /sbin/nft -f /etc/nftables.conf,并 sudo chmod +x五 实战案例与运维要点
sudo sysctl -w net.ipv4.ip_forward=1sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5sudo ufw allow from 203.0.113.10 to any port 22sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'sudo iptables -A INPUT -p tcp --dport 22 -s 203.0.113.10 -j ACCEPTreload)