可利用iptables的time模块实现非办公时段自动封禁管理端口:需先验证模块支持(iptables -m time --help),配置工作日8:00–18:00外及周末的reject规则,确保系统时区准确、规则置于accept前,并持久化保存。

可以利用 iptables 的 time 模块,在非办公时间段(例如晚上 18:00 到次日 8:00,或周末)自动拒绝访问管理端口(如 SSH 的 22 端口、Web 管理界面的 8080/443 等),无需手动启停规则或依赖外部脚本。
确认内核和 iptables 支持 time 模块
多数现代 Linux 发行版默认支持,但需验证:
- 运行
iptables -m time --help,若显示帮助信息说明模块可用 - 检查内核是否加载:执行
zcat /proc/config.gz | grep CONFIG_IP_NF_MATCH_TIME(若存在 config.gz);或查看/lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/ipt_time.ko*是否存在 - 如模块未加载,可尝试
modprobe ipt_time
设置非办公时间禁止管理端口访问
以关闭 SSH(22 端口)为例,假设办公时间为工作日 8:00–18:00,其余时间(含周末全天)为非办公时间:
- 添加拒绝规则(放在 ACCEPT 规则之前,确保优先匹配):
iptables -A INPUT -p tcp --dport 22 -m time ! --timestart 08:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j REJECT --reject-with tcp-reset - 若还需屏蔽周末全天:
iptables -A INPUT -p tcp --dport 22 -m time --days Sat,Sun -j REJECT --reject-with tcp-reset - 注意:
!表示“非”,上述第一条实际含义是“工作日但不在 08:00–18:00 内”,第二条单独覆盖周末
处理时区与系统时间准确性
time 模块严格依赖系统本地时间(非 UTC),务必确保:
- 系统时区设置正确:
timedatectl set-timezone Asia/Shanghai - 启用 NTP 时间同步:
timedatectl set-ntp true,避免因时间漂移导致规则误生效 - 修改后用
date命令确认当前时间和星期几是否准确
持久化保存与安全建议
iptables 规则重启后会丢失,需保存并设置开机加载:
- Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4 - CentOS/RHEL 7+:
iptables-save > /etc/sysconfig/iptables,并确保iptables-services已启用 -
重要提醒:操作前建议先加一条宽限规则(如允许你当前 IP 临时通行),防止锁死;测试时可用
iptables -L INPUT -v -n查看命中计数,验证规则是否触发 - 管理端口建议配合 fail2ban 或证书登录,time 规则仅作辅助防护,不替代基础安全措施











