家用住宅主机Linux防火墙iptables完整安全规则

很多朋友在家里用旧电脑或树莓派跑Linux服务,比如文件共享、监控系统、远程下载。
这些主机直接接入家庭局域网,如果防火墙规则没配好,就像家门没锁——风险很大。
本文以 Ubuntu 22.04 为例,带零基础的你完整配置一套 iptables 安全规则。

准备工作:确认当前防火墙状态

先打开终端,查看现在有没有 iptables 规则:

sudo iptables -L -n -v

如果输出显示 Chain INPUT (policy ACCEPT) 且下面没有规则,说明防火墙完全开放,需要立刻加固。
另外确认系统是否安装了 iptables(一般系统自带)。
如果是 ufw 或 firewalld 用户,建议先停用它们,避免规则冲突:

sudo systemctl stop ufw
sudo systemctl disable ufw

编写核心安全规则:逐条配置

iptables 规则是从上到下匹配的,所以顺序很重要。
我们按“丢弃一切,只放行必要流量”的思路来写。
下面是一组适合家用主机的完整规则:

# 1. 清空现有规则(谨慎执行,远程SSH可能中断)
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t mangle -F

# 2. 设置默认策略:先全部丢弃,避免遗漏
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 3. 允许本地回环接口(系统内部通信用)
sudo iptables -A INPUT -i lo -j ACCEPT

# 4. 允许已建立的连接和相关连接(避免断连)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 5. 放行SSH(假设默认端口22,可自定义)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 6. 放行HTTP/HTTPS(如果你在主机上跑了Web服务)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 7. 防止SSH暴力破解(限制每分钟最多3次新连接)
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP

# 8. 丢弃所有非法包(减少风险)
sudo iptables -A INPUT -m state --state INVALID -j DROP

# 9. 记录并丢弃其他所有入站流量(可选日志)
sudo iptables -A INPUT -j LOG --log-prefix "[IPTABLES DROP] " --log-level 4
sudo iptables -A INPUT -j DROP

重点提醒:如果你通过SSH远程操作,执行 -P INPUT DROP 之前必须确保第4条(放行已建立连接)和第5条(放行SSH端口)已经添加,否则你会立刻断开连不上。
建议在本地物理终端或提前测试。

保存规则并设置开机自启

iptables 规则默认重启后消失。
我们需要把它保存到文件并开机加载。

方法一:使用 iptables-save/restore

# 保存当前规则到文件
sudo iptables-save > /etc/iptables/rules.v4
# 设置开机自启(需安装 iptables-persistent)
sudo apt install iptables-persistent -y
sudo systemctl enable netfilter-persistent

方法二:手动创建 systemd 服务(适合不想装额外包的用户)

sudo iptables-save > /etc/iptables.up.rules
sudo chmod 644 /etc/iptables.up.rules

然后编辑 /etc/rc.local 或创建一个 systemd 服务在启动时执行 iptables-restore < /etc/iptables.up.rules

避坑指南与高频问题

Q1:执行规则后自己连不上了?
别慌。如果有物理访问,直接按电源重启;如果远程,可让家人帮忙重启或提前配置 crontab 保留恢复脚本。建议先在本地终端逐一测试规则。

Q2:规则顺序错了,某些端口不通?
iptables 规则从上到下匹配,如果某条规则之前有 DROP 导致所有流量被丢,后面的 ACCEPT 就不起作用。调试时用 sudo iptables -L -n --line-numbers 查看行号,用 sudo iptables -D INPUT 行号 删除错误规则。

Q3:家用主机需要放行哪些端口?
根据你跑的服务决定:SSH(22)、HTTP(80、443)、SMB(445、139)、NFS(2049)、Plex(32400)等。原则:只开放必要的,其余全封。

效果验证:检查规则并测试连通

执行 sudo iptables -L -n -v 查看规则列表,确认每条规则都有对应的包计数(pkts 列有数字表示有流量经过)。
用另一台设备(比如手机)尝试访问这台主机的放行端口和未放行端口:

  • 测试 SSH:ssh 用户名@主机IP 应能连接
  • 测试 HTTP:浏览器访问 http://主机IP 应能看到页面(如果架了网站)
  • 测试被阻断的端口:nc -zv 主机IP 3306(MySQL端口)应返回连接超时或拒绝

如果想看日志中丢弃的记录,可以 sudo journalctl -k | grep IPTABLES,能看到被丢弃的包来源IP。

以上这套规则适合大多数家用场景。
如果有更复杂的需求(如端口转发、VPN支持),可以在基础上叠加 nat 表规则。
如果你在配置中遇到意外情况,优先检查规则顺序和模式匹配条件。
坚持最小权限原则,你的家庭Linux主机就能安全稳定运行。

分享到:
上一篇
跨境独立站宝塔面板Docker管理器部署容器
下一篇
跨境独立站服务器内网穿透多级代理搭建全攻略
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意