在 Ubuntu 上用 iptables 设置白名单,核心思路是:
默认拒绝所有流量,只允许指定的 IP / 端口访问。
下面按常见场景给你示例。
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
✅ 此时:只有白名单 IP 能访问本机
# 允许白名单 IP 访问 SSH
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
# 允许白名单 IP 访问 Web
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.1.0/24 -j ACCEPT
在设置前先允许当前 SSH IP:
iptables -A INPUT -s 你的IP -p tcp --dport 22 -j ACCEPT
或设置定时还原:
crontab -e
*/5 * * * * iptables-restore < /etc/iptables.rules
apt install iptables-persistent
netfilter-persistent save
iptables-save > /etc/iptables/rules.v4
开机自动加载:
apt install iptables-persistent
iptables -L -n -v
如果你觉得 iptables 太复杂,可以用:
ufw default deny incoming
ufw allow from 192.168.1.100
ufw enable
如果你愿意,可以告诉我:
我可以给你一套可直接复制用的完整规则。