服务器访问控制实现IP与时间组合策略的核心是iptables结合ipset和time模块,使二者作为并列约束统一评估:ipset高效管理动态IP列表,-m time控制时段,-m set关联IP集合,规则如允许白名单IP在工作日8:00–17:30访问SSH。

服务器访问控制要实现基于 IP 和时间的组合策略,核心是让两者条件同时生效、互不干扰,且能灵活叠加。不是简单“先验 IP 再看时间”,而是用原生支持多维条件的机制,把 IP 范围和时间窗口作为并列约束项统一评估。
用 iptables + time 和 ipset 实现轻量组合控制
适用于 Linux 服务器,无需额外服务,适合 Web、SSH、数据库端口等基础服务管控。
- 用 ipset 管理动态 IP 列表(如白名单/黑名单),比重复写 -s 更高效、可热更新
- 用 iptables -m time 控制时段,配合 -m set --match-set 关联 IP 集合
- 示例:只允许白名单里的 IP 在工作日 8:00–17:30 访问 SSH
sudo ipset create ssh_whitelist hash:ip
sudo ipset add ssh_whitelist 192.168.1.100
sudo ipset add ssh_whitelist 203.0.113.42
sudo iptables -A INPUT -p tcp --dport 22 -m set --match-set ssh_whitelist src -m time --timestart 08:00 --timestop 17:30 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
用 OpenResty + Lua 做 HTTP 层细粒度组合判断
适合 Nginx 环境下的 Web 服务,支持运行时增删 IP、解析真实客户端时间、结合地理位置等扩展维度。
- 在
access_by_lua_block中读取ngx.var.remote_addr和os.date("%H%M", os.time()) - 用 Lua 表或 Redis 缓存 IP 白名单,避免每次读文件
- 时间判断支持分钟级精度,例如
if hourmin >= 0830 and hourmin <= 1730 then ... - 可进一步加入时区校准(如解析请求头
X-Timezone或用 GeoIP 库反查)
用 PAM + pam_access.so + pam_time.so 双模块协同控 SSH
专用于 Linux 登录层(SSH、su、login),策略生效快、不依赖网络服务,运维友好。
- 编辑
/etc/pam.d/sshd,按顺序加载两个模块:
account required pam_access.so
account required pam_time.so
- 在
/etc/security/access.conf写 IP/网段规则(如+ : admin : 10.0.0.0/8) - 在
/etc/security/time.conf写时段规则(如*;Al0000-2400;MoTuWeThFr;Al0800-1730;) - 两条规则都匹配才允许登录,任一不满足即拒绝
企业级设备(如华为防火墙)用安全策略引用地址集 + 时间段
适合有专用防火墙的中大型网络,配置集中、可视化强、支持审计日志。
- 提前创建:地址集(含多个离散 IP)、服务集(如 TCP 8888)、时间段(08:00–17:00)
- 新建安全策略,源区域→目的区域,同时引用上述三者
- 策略优先级高于默认放行,可精确到“禁止 10.1.1.2 在工作时间访问 Server1 的 8888 端口”
- 修改后无需重启设备,策略热生效


















