iptables拦截Redis非授权扫描的核心是阻断扫描器的异常探测行为,包括TCP标志异常包(如FIN、Xmas、Null扫描)、高频短连接试探及明文协议特征流量,并需配合Redis自身配置加固(如绑定内网地址、设置密码)才能真正有效。

重点拦三类扫描行为
Redis 未授权漏洞常被通过以下方式主动探测,iptables 可针对性拦截:
- TCP 异常标志扫描:nmap 的 -sN(Null)、-sF(FIN)、-sX(Xmas)等扫描会发送非法 TCP 标志组合(如 FIN+URG+PSH、全零、SYN+FIN),正常 Redis 客户端绝不会发这类包
- 高频短连接试探:扫描器对 6379 端口发起大量快速 TCP SYN 请求,但不完成三次握手或不发 AUTH 命令,只试探端口是否响应
-
明文协议特征匹配:未加密 Redis 协议是纯文本,攻击者首次连接后常立刻发
INFO、CONFIG GET requirepass等命令,可结合字符串匹配(需 xt_string 模块)做初步过滤
部署关键规则(INPUT 链前端插入)
所有规则建议用 -I INPUT 1 插入最前,避免被 ACCEPT 规则绕过:
- 拒收所有仅含 FIN 的 TCP 包(常见于 FIN 扫描):
iptables -I INPUT 1 -p tcp --dport 6379 --tcp-flags ALL FIN -j DROP - 拒收 Xmas 扫描包(FIN+URG+PSH):
iptables -I INPUT 1 -p tcp --dport 6379 --tcp-flags ALL FIN,URG,PSH -j DROP - 拒收 Null 扫描(全标志为 0):
iptables -I INPUT 1 -p tcp --dport 6379 --tcp-flags ALL NONE -j DROP - 拒收 SYN+FIN 同时置位(违反 RFC,扫描器常用):
iptables -I INPUT 1 -p tcp --dport 6379 --tcp-flags SYN,FIN SYN,FIN -j DROP - 限制单 IP 对 6379 端口的新连接频率(防暴力探测):
iptables -I INPUT 1 -p tcp --dport 6379 -m state --state NEW -m limit --limit 3/minute --limit-burst 3 -j ACCEPT
再加一条兜底丢弃:iptables -I INPUT 1 -p tcp --dport 6379 -m state --state NEW -j DROP
补充:配合 Redis 自身加固才真正有效
iptables 是第一道网关,但不能替代 Redis 配置加固。必须同步做:
- 修改
redis.conf:将bind改为内网地址(如bind 127.0.0.1 192.168.1.10),禁用protected-mode no→ 改为yes - 强制设置密码:
requirepass your_strong_password,并确保客户端连接时带-a参数 - 若必须公网暴露,用防火墙白名单精准放行可信 IP:
iptables -I INPUT 1 -p tcp -s 203.0.113.5 --dport 6379 -j ACCEPT
再全局拒绝:iptables -A INPUT -p tcp --dport 6379 -j DROP
验证是否生效
在另一台机器上模拟扫描,观察是否无响应或超时:
- 测试 Null 扫描:
nmap -sN -p6379 服务器IP→ 应返回filtered或无响应 - 测试 FIN 扫描:
nmap -sF -p6379 服务器IP - 手动 telnet 连接后发 INFO:
telnet 服务器IP 6379,然后输入INFO回车 → 若已设密码,应返回NOAUTH Authentication required.;若未设密码但 iptables 规则生效,连接可能直接被重置或超时


















