iptables 不支持“自动启用策略”,但 -m time 模块可基于系统时间动态匹配数据包,实现工作日 9:00–17:59 等时段访问控制;规则常驻,仅条件随时间生效。

iptables 本身不支持 -m time 模块的“自动启用策略”这种说法——它没有调度器或定时开关功能。但 -m time 确实可以让你**基于系统时间匹配数据包**,从而在规则生效期间(如工作日 9:00–18:00)动态控制访问,无需人工启停规则。关键在于:规则始终存在,只是匹配条件随时间变化而起效。
确认系统已启用 time 模块
绝大多数现代 Linux 内核(2.6.21+)默认编译了 xt_time 模块。运行以下命令验证:
lsmod | grep xt_time
若无输出,尝试加载:sudo modprobe xt_time
如提示模块不存在,请检查内核配置或升级系统。
用 -m time 编写时段限制规则
该模块支持按星期、日期、时间范围匹配。常用参数包括:
-
--timestart HH:MM和--timeend HH:MM:每日生效时间段(24小时制) -
--weekdays Mon,Tue,Wed,Thu,Fri:指定工作日(可缩写,逗号分隔) -
--datestart YYYY[-MM[-DD]]/--datestop:限定日期区间(非必需)
例如,仅允许工作日 9:00–17:59 访问 Web 服务(TCP 80):
sudo iptables -A INPUT -p tcp --dport 80 -m time --timestart 09:00 --timeend 17:59 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
再加一条兜底规则拒绝其他时段的请求(注意顺序,需放在上条之后):
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
确保时间准确且规则持久化
time 模块依赖系统本地时间(date 输出),务必同步时间:
sudo timedatectl set-ntp truesudo ntpdate -s time.nist.gov(或使用 chrony/systemd-timesyncd)
iptables 规则重启即失效,需保存:
- CentOS/RHEL 6/7:
sudo service iptables save(保存至/etc/sysconfig/iptables) - Debian/Ubuntu:
sudo iptables-save > /etc/iptables/rules.v4,并配置开机加载 - 通用方法(推荐):用
iptables-restore配合 systemd 或 rc.local 加载
常见注意事项
time 模块匹配的是数据包到达时的系统时间,不是连接建立时间;不支持秒级精度;不能跨日设置(如 --timestart 22:00 --timeend 06:00 需拆为两条规则)。
若需更灵活的调度(如节假日例外、临时关闭),建议配合 cron 脚本动态增删规则,而非仅靠 -m time。


















