可通过iptables time模块在非办公时间(如18:00–次日8:00及周末)自动丢弃管理端口入站连接,实现“自动关闭”;需验证模块支持、按序配置允许/拒绝规则、保存持久化并建议校准系统时间。

可以通过 iptables 的 time 模块,在非办公时间段(例如 18:00–次日 8:00 及周末)自动丢弃访问管理端口(如 22、8080、3389 等)的入站连接,从而实现“自动关闭”效果。这不是真正关闭端口,而是拦截流量,安全且无需重启服务。
确认内核和 iptables 支持 time 模块
大多数现代 Linux 发行版默认支持,但需验证:
- 运行
iptables -m time --help,若显示帮助信息说明模块可用 - 检查内核是否启用:
zcat /proc/config.gz | grep CONFIG_IP_NF_MATCH_TIME(或查看/boot/config-$(uname -r)),应为y或m - 如未加载模块,可手动执行
modprobe xt_time
定义办公时间并配置阻断规则
假设办公时间为工作日 8:00–18:00,其余时间(含周末全天)禁止 SSH(端口 22)访问:
- 先放行办公时间的 SSH 流量:
iptables -A INPUT -p tcp --dport 22 -m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT - 再在该规则后添加拒绝规则(注意顺序!):
iptables -A INPUT -p tcp --dport 22 -j DROP - 等效地,也可用
--timesec配合!取反,但显式指定允许时段更直观、不易出错
保存规则并设置开机生效
iptables 规则默认不持久,需手动保存:
- Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4 - RHEL/CentOS 7+:
iptables-save > /etc/sysconfig/iptables,并确保iptables-services已安装启用 - 建议搭配 cron 每日校准系统时间(
ntpdate或systemd-timesyncd),因time模块依赖系统时钟
扩展建议:多端口与日志审计
如需同时管控多个管理端口(如 22、8080、3389),可复用同一 time 条件:
- 合并写法示例:
iptables -A INPUT -p tcp -m multiport --dports 22,8080,3389 -m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT - 在 DROP 规则前加一条 LOG 规则便于追踪:
iptables -A INPUT -p tcp --dport 22 -m time ! --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j LOG --log-prefix "BLOCKED-SSH:" - 注意:LOG 规则不终止匹配,需确保其后紧跟 DROP,否则仍会放行

















