家用住宅主机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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意