在 Debian 上用 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 1.2.3.4 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
没在白名单里的 IP 都会被 DROP。
只允许白名单 IP 访问 22 端口:
iptables -A INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
或更严格:
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT
如果白名单很多,用 ipset 更高效。
apt update
apt install ipset
ipset create whitelist hash:ip
ipset add whitelist 1.2.3.4
ipset add whitelist 192.168.1.0/24
iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
iptables -P INPUT DROP
Debian 默认重启会丢失规则。
apt install iptables-persistent
netfilter-persistent save
iptables-save > /etc/iptables/rules.v4
开机恢复:
iptables-restore < /etc/iptables/rules.v4
ip6tables,规则独立iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 你的IP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 你的IP -j ACCEPT
如果你有具体需求(比如:只白名单某个端口 / 某个服务 / Docker 环境 / 防 SSH 爆破),可以告诉我,我给你定制规则。