iptables SYNPROXY 不工作?

iptables SYNPROXY 不工作?

第一篇帖子在这里。

我很难让 SYNPROXY 在我的(基于 iptables 的)防火墙上运行。

我已经注意到很多服务器(在 DMZ 中)都遭受了 SYN 洪水攻击,并且我几乎读取了所有我发现的链接,使这个目标毫无机会工作。

         |
         | 互联网( eth0 )
         |
    +---------+
    | +----- br0 (openvpn tun 的桥接)
    | |
    | Fw +----- DMZ(eth1)
    | |
    +---------+
         |
         | 内部网络 ( eth2 )
         |         

如您所见,设置很简单。

我有一堆当前正在运行的规则( INPUT OUTPUT FORWARD 和 NAT ),但我无法以任何方式让这三条规则发挥作用:

/usr/sbin/iptables -t raw -I PREROUTING -i br0 -p tcp -m tcp --syn --dport 81 -j CT --notrack
/usr/sbin/iptables -A INPUT -i br0 -p tcp -m tcp -m conntrack --dport 81 --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1323
/usr/sbin/iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

如果我启用它们,我可以看到进入接口的 SYN 数据包(来自 br0 接口),但没有 SYN+ACK 回复退出:

root@firewall:~# iptables -t raw -L -v -n
链 PREROUTING(策略接受 418 个数据包,67307 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
    0 0 CT tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 标志:0x17/0x02 CT notrack

root@firewall:~# iptables -L 输入 -v -n
链输入(策略丢弃 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
    0 0 接受全部 -- lo * 0.0.0.0/0 0.0.0.0/0           
   17 1776 接受全部 -- * * 0.0.0.0/0 0.0.0.0/0 状态 RELATED,ESTABLISHED
    0 0 SYNPROXY tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 ctstate 无效,未跟踪 SYNPROXY sack-perm 时间戳 wscale 7 mss 1323
    0 0 全部删除 -- * * 0.0.0.0/0 0.0.0.0/0 ctstate 无效

其他主机# telnet 10.0.1.51 81
尝试 10.0.1.51...
telnet:连接到地址 10.0.1.51:连接超时

SYNPROXY 被触发:

root@firewall:~# iptables -t raw -L -v -n
链 PREROUTING(策略接受 1453 个数据包,360K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
    4 240 CT tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 标志:0x17/0x02 CT notrack

root@firewall:~# iptables -L 输入 -v -n
链输入(策略丢弃 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
  247 164K 接受全部 -- lo * 0.0.0.0/0 0.0.0.0/0           
  587 219K 接受全部 -- * * 0.0.0.0/0 0.0.0.0/0 状态相关,已建立
    3 180 SYNPROXY tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 ctstate 无效,未跟踪 SYNPROXY sack-perm 时间戳 wscale 7 mss 1323
   22 1000 全部删除 -- * * 0.0.0.0/0 0.0.0.0/0 ctstate 无效

而且 tcpdump 还向客户端确认没有 SYN+ACK 退出:

root@firewall:~# tcpdump -n -i br0 端口 81
tcpdump:抑制详细输出,使用 -v 或 -vv 进行完整协议解码
监听 br0,链路类型 EN10MB(以太网),捕获大小 262144 字节




14:39:32.755800 IP 10.0.1.18.32886 > 10.0.1.51.81:标志 [S],seq 521240151,win 29200,选项 [mss 1323,sackOK,TS val 2209244648 ecr 0,nop,wscale 7],长度 0
14:39:33.784981 IP 10.0.1.18.32886 > 10.0.1.51.81:标志 [S],序列 521240151,win 29200,选项 [mss 1323,sackOK,TS val 2209245678 ecr 0,nop,wscale 7],长度 0


SYNPROXY 的值来自 tcpdump:

root@firewall:~# tcpdump -pni br0 端口 81
tcpdump:抑制详细输出,使用 -v 或 -vv 进行完整协议解码
监听 br0,链路类型 EN10MB(以太网),捕获大小 262144 字节
14:46:49.704573 IP 10.0.1.18.32922 > 10.0.1.51.81:标志 [S],序列 60519528,win 29200,选项 [mss 1323,sackOK,TS val 2209681605 ecr 0,nop,wscale 7],长度 0
14:46:50.704828 IP 10.0.1.18.32922 > 10.0.1.51.81:标志 [S],seq 60519528,win 29200,选项 [mss 1323,sackOK,TS val 2209682606 ecr 0,nop,wscale 7],长度 0
^C

我尝试的每个接口上都会发生同样的事情(eth0 eth1 eth2)

如果我删除 SYNPROXY 规则,一切正常:

其他主机# telnet 10.0.1.51 81
尝试 10.0.1.51...
已连接到 10.0.1.51。
转义字符是‘^]’。
^]
telnet> c
连接已关闭。
root@firewall:~# tcpdump -n -i br0 端口 81
tcpdump:抑制详细输出,使用 -v 或 -vv 进行完整协议解码
监听 br0,链路类型 EN10MB(以太网),捕获大小 262144 字节
14:49:00.998297 IP 10.0.1.18.32934 > 10.0.1.51.81:标志 [S],seq 1887031231,win 29200,选项 [mss 1323,sackOK,TS val 2209812901 ecr 0,nop,wscale 7],长度 0
14:49:00.998517 IP 10.0.1.51.81 > 10.0.1.18.32934:标志 [S.],seq 3980734030,ack 1887031232,win 28960,选项 [mss 1460,sackOK,TS val 288190452 ecr 2209812901,nop,wscale 7],长度 0
14:49:01.006907 IP 10.0.1.18.32934 > 10.0.1.51.81:标志[.],ack 1,win 229,选项[nop,nop,TS val 2209812910 ecr 288190452],长度0

systl 的东西应该没问题:

net.netfilter.nf_conntrack_tcp_loose = 0
net.ipv4.tcp_timestamps = 1
net.ipv4.conf.default.rp_filter = 1

有人对要检查什么以及为什么它不起作用有一些想法吗?

发行版是 slackware 14.2+ (当前)。

ipt_SYNPROXY 已加载:

root@firewall:~# lsmod | grep SYN
ipt_SYNPROXY 16384 0
nf_synproxy_core 16384 1 ipt_SYNPROXY
x_tables 32768 16 xt_state、xt_LOG、xt_multiport、xt_owner、xt_nat、ipt_SYNPROXY、iptable_mangle、ip_tables、iptable_filter、xt_string、xt_tcpudp、iptable_raw、xt_recent、xt_connlimit、xt_CT、xt_conntrack
nf_conntrack 135168 12 xt_state,nf_conncount,xt_nat,ipt_SYNPROXY,nf_conntrack_ftp,nf_nat_ftp,xt_connlimit,xt_CT,xt_conntrack,nf_synproxy_core,nf_nat_ipv4,nf_nat

我真的快要撞墙了 :(

谢谢,并且对我的糟糕英语表示歉意。

皮尔路易吉

相关内容