使用iptables的xt_time模块可实现非工作时段自动阻断远程维护端口,需加载模块、显式指定--localtz、按白名单+拒绝逻辑配置规则,并做好防误锁和持久化。

要实现在非工作时段自动阻断所有远程维护端口(如 SSH 22、Web 管理 80/443、RDP 3389 等),核心是利用 iptables 的 xt_time 模块(即 -m time)配合精准链路和时区控制,不依赖外部脚本或 cron,纯内核级时间策略生效。
以下为可直接部署的实用方案,兼顾安全性、可维护性和防误锁风险。
✅ 确认并启用 time 模块支持
该模块必须加载,否则所有含 --timestart 的规则都会报错:iptables: No chain/target/match by that name
-
检查是否已加载:
lsmod | grep xt_time
有输出说明已就绪;无输出则临时启用:
sudo modprobe xt_time
-
永久生效(避免重启失效):
- Debian/Ubuntu:
echo "xt_time" | sudo tee -a /etc/modules - RHEL/CentOS:
echo "xt_time" | sudo tee /etc/sysconfig/modules/iptables.modules && sudo chmod +x /etc/sysconfig/modules/iptables.modules
- Debian/Ubuntu:
⚠️ 注意:
xt_time默认用 UTC 时间。若系统时区为 CST(东八区),必须显式加--localtz或--kerneltz,否则规则会偏移 8 小时——这是最常见失败原因。
✅ 定义“远程维护端口”并统一阻断逻辑
推荐采用「白名单+显式拒绝」双层策略:
先放行工作时间访问,再对非工作时间的维护端口做带日志的主动拒绝(比 DROP 更可控)。
假设工作日为周一至周五,工作时间为 09:00–18:00(本地时间):
-
步骤一:插入白名单规则(放在 INPUT 链靠前位置)
sudo iptables -I INPUT -p tcp -m multiport --dports 22,80,443,3389 \ -m time --timestart 09:00 --timestop 18:00 \ --weekdays Mon,Tue,Wed,Thu,Fri --localtz \ -j ACCEPT
-
步骤二:插入非工作时间显式拒绝(紧随其后)
sudo iptables -I INPUT -p tcp -m multiport --dports 22,80,443,3389 \ -m time ! --timestart 09:00 --timestop 18:00 \ ! --weekdays Mon,Tue,Wed,Thu,Fri --localtz \ -j LOG --log-prefix "OFFHOURS_MAINT_BLOCK: " sudo iptables -I INPUT -p tcp -m multiport --dports 22,80,443,3389 \ -m time ! --timestart 09:00 --timestop 18:00 \ ! --weekdays Mon,Tue,Wed,Thu,Fri --localtz \ -j REJECT --reject-with tcp-reset
? 说明:
-I INPUT确保规则插在链首,避免被后续宽泛规则覆盖;--reject-with tcp-reset对 TCP 连接发送 RST 包,客户端立刻感知连接被拒,不卡住;LOG规则务必在REJECT前,否则日志无法记录;multiport可一次性匹配多个端口,比写多条规则更简洁。
✅ 防误锁关键保护措施
运维中最怕自己被封在外。务必提前加固:
-
把自己的 IP 加白(永久优先于所有规则):
sudo iptables -I INPUT -s 192.168.1.100 -j ACCEPT # 替换为你管理机IP
-
允许已建立连接继续通信(防止当前会话中断):
sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-
备份当前规则(执行前必做):
sudo iptables-save > /root/iptables-pre-maint-time-$(date +%F_%H%M)
? 提示:若规则出错导致失联,可通过物理终端或云平台 VNC 恢复:
sudo iptables-restore
✅ 持久化保存规则(重启不丢失)
-
Debian/Ubuntu:
sudo apt install iptables-persistent sudo netfilter-persistent save
-
RHEL/CentOS 7:
sudo service iptables save # 会写入 /etc/sysconfig/iptables
-
手动保存通用方式(兼容所有发行版):
sudo iptables-save | sudo tee /etc/iptables/rules.v4
确认服务已启用开机自启,规则才能随系统启动加载。
不复杂但容易忽略











