过去一个月我一直无法解决这个问题,我制定了不同的 iptables 规则,在内核上启用和禁用了模块,但结果相同,甚至更多的数据包被 iptables 丢弃。这导致用户在虚拟机上尝试访问从 192.168.1.0/24 到 192.168.3.0/28 的不同共享文件夹时延迟 3/5 秒。
我在日志中看到这个:
2 月 14 日 13:53:02 ns129115 内核:[12426815.202643] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=61932 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0 2 月 14 日 13:53:02 ns129115 内核:[12426815.393379] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=61933 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK URGP=0 2 月 14 日 13:53:02 ns129115 内核:[12426815.834944] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=61934 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK URGP=0 2 月 14 日 13:53:02 ns129115 内核:[12426815.835219] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=136 TOS=0x10 PREC=0x00 TTL=64 ID=61935 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0 2 月 14 日 13:53:19 ns129115 内核:[12426832.829664] IPTables-FWD-Dropped:IN=br0 OUT=br0 PHYSIN=vnet0 PHYSOUT=eth2 MAC=70:85:c2:4f:14:c1:00:16:3e:ea:18:01:08:00 SRC=192.168.1.156 DST=192.168.1.125 LEN=319 TOS=0x00 PREC=0x00 TTL=128 ID=16660 DF PROTO=TCP SPT=49169 DPT=54820 WINDOW=256 RES=0x00 ACK PSH URGP=0 2 月 14 日 13:53:39 ns129115 内核:[12426852.496117] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=29023 DF PROTO=TCP SPT=22115 DPT=52214 WINDOW=263 RES=0x00 ACK PSH URGP=0 2 月 14 日 13:53:49 ns129115 内核:[12426862.856776] IPTables-FWD-Dropped:IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=vnet0 MAC=00:16:3e:ea:18:01:90:2b:34:b0:20:a4:08:00 SRC=192.168.1.237 DST=192.168.1.156 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=1644 DF PROTO=TCP SPT=49244 DPT=49169 WINDOW=1879 RES=0x00 ACK URGP=0 2 月 14 日 13:53:50 ns129115 内核:[12426863.288983] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=29069 DF PROTO=TCP SPT=22115 DPT=52214 WINDOW=263 RES=0x00 ACK PSH URGP=0 2 月 14 日 13:54:19 ns129115 内核:[12426892.906806] IPTables-FWD-Dropped:IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=vnet0 MAC=00:16:3e:ea:18:01:74:d4:35:6a:18:7a:08:00 SRC=192.168.1.199 DST=192.168.1.156 LEN=248 TOS=0x00 PREC=0x00 TTL=128 ID=13244 DF PROTO=TCP SPT=49678 DPT=49169 WINDOW=256 RES=0x00 ACK PSH URGP=0 2 月 14 日 13:54:42 ns129115 内核:[12426915.939242] IPTables-OUTPUT-Dropped:IN=OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=136 TOS=0x10 PREC=0x00 TTL=64 ID=61969 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0
带有 iptables 和 2 个网桥的 Debian 服务器
- BR0,是可以访问 Internet 的桥,网关为 192.168.1.1,所有用户都在这个网络上
- VIRBR10,第二座桥,vm1 已连接到此桥,ip 为 192.168.3.12(192.168.3.0/28),并通过 br0 与外部进行 iptables nat
这是我的路线表
~ 路线列表
内核 IP 路由表 目标网关 Genmask 标志 指标参考使用 Iface 默认 192.168.1.1 0.0.0.0 UG 0 0 0 br0 192.168.1.0 * 255.255.255.0 U 0 0 0 br0 192.168.3.0 * 255.255.255.240 U 0 0 0 virbr10
~ brctl 显示
桥名称 桥 ID STP 启用接口 br0 8000.0cc47ac18d3c 是 eth2 virbr10 8000.525400c4b847 是 virbr10-dummy 虚拟网络2
~ iptables 规则
/bin/sh #!/bin/sh 复制代码 刷新所有规则 iptables -P 输入接受 iptables -P 转发接受 iptables -P 输出接受 iptables -t nat -F iptables -t mangle -F iptables -F iptables -X # 允许基本输入流量。 iptables -A INPUT -m 状态 --状态 ESTABLISHED,RELATED -j ACCEPT iptables -A 输入 -i lo -j 接受 iptables -A 输入 -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j 接受 iptables -A 输入 -p icmp -m conntrack --ctstate 新 -j 接受 # #最大传输单元 iptables -t mangle -A FORWARD -o virbr1 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1460 iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu #中小企业 #端口:netbios - 445/tcp #端口:netbios-ns – 137/udp – NETBIOS 名称服务 #端口:netbios-dgm – 138/udp – NETBIOS 数据报服务 #端口:netbios-ssn – 139/tcp – NETBIOS 会话服务 iptables -A 输入 -m 状态 --状态新 -m tcp -p tcp --dport 445 -j 接受 iptables -A 输入 -p udp -m udp --dport 445 -j 接受 iptables -A 输入 -p udp -m udp --dport 137:138 -j 接受 iptables -A 输入 -m 状态 --状态新 -m tcp -p tcp --dport 139 -j 接受 #iptables -A 输入 -p tcp -m tcp -m conntrack --ctstate NEW --sport 137 -j 接受 #iptables -A 输入 -p tcp -m tcp -m conntrack --ctstate NEW --sport 138 -j 接受 #iptables -A 输入 -p tcp -m tcp -m conntrack --ctstate NEW --sport 139 -j 接受 #RDP #端口:3389 # 来自外部的连接 iptables -I 转发 -o virbr10 -d 192.168.3.12 -j 接受 iptables -t nat -I PREROUTING -p tcp --dport 3589 -j DNAT --to 192.168.3.12:3389 # 伪装本地子网 iptables -I 转发 -o virbr10 -d 192.168.3.0/28 -j 接受 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -j MASQUERADE iptables -A FORWARD -o virbr10 -m state --state RELATED,ESTABLISHED -j ACCEPT #允许将 virbr10 的突出连接设置为红色 192.168.1.0/24 iptables -A 转发 -i virbr10 -o br0 -j 接受 iptables -A 转发 -o virbr10 -i br0 -j 接受 iptables -A 转发 -i virbr10 -o lo -j 接受 ### #KVM 路由客户机 # 发送到虚拟机的 DHCP 数据包没有校验和(由于长期存在的错误)。 iptables -t mangle -A POSTROUTING -o virbr10 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fil # 不要伪装这些保留的地址块。 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 224.0.0.0/24 -j 返回 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 255.255.255.255/32 -j 返回 # 伪装从虚拟机到 LAN/Internet 的所有数据包。 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 !-d 192.168.3.0/28 -p tcp -j MASQUERADE --to-ports 1024-65535 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 !-d 192.168.3.0/28 -p udp -j MASQUERADE --to-ports 1024-65535 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 !-d 192.168.3.0/28 -j MASQUERADE # 接受 SSH 连接。 iptables -A 输入 -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 22 -j 接受 # 接受 Radmin iptables -A 输入 -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 4899 -j 接受 # 允许入站流量进入私有子网。 iptables -A FORWARD -d 192.168.3.0/28 -o virbr10 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 桌面访问缓慢 iptables -A FORWARD -d 192.168.1.0/24 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 桌面访问缓慢 iptables -A FORWARD -d 192.168.3.0/28 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许来自私有子网的出站流量。 iptables -A FORWARD -s 192.168.3.0/28 -i virbr10 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 桌面访问缓慢 iptables -A FORWARD -s 192.168.1.0/24 -i br0 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 桌面访问缓慢 iptables -A FORWARD -s 192.168.3.0/28 -i br0 -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许虚拟机之间的流量。 iptables -A 转发 -i virbr10 -o virbr10 -j 接受 # 拒绝其他一切。 iptables -A FORWARD -i virbr10 -j REJECT --拒绝 icmp 端口不可达 # 接受来自虚拟机的 DNS(端口 53)和 DHCP(端口 67)数据包。 iptables -A 输入 -i virbr10 -p udp -m udp -m 多端口 --dports 53,67 -j 接受 iptables -A 输入 -i virbr10 -p tcp -m tcp -m 多端口 --dports 53,67 -j 接受 #ICMP iptables -A OUTPUT -p icmp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # 拒绝其他一切。 iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset iptables -A INPUT -j REJECT --拒绝 icmp 端口不可达 #记录数据包丢弃 iptables -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4 iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4 iptables -A OUTPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
更新
- 将日志链更改为脚本末尾并粘贴新的日志条目
答案1
经过 Google 搜索后,我可以解决这个问题。
- 在 Windows Server 2012 R2 中,使用 SMB 在域控制器上访问共享文件的速度很慢,这是因为文件夹重定向 GPO 在重定向过程中更改了用户配置文件文件夹中的权限,而该文件夹在目标中不存在。基于 Microsfot Technet 的 iamrafic (关联),我们需要将文件夹权限改为这样:
在所需位置创建文件夹,禁用从父级继承的权限,并通过单击相应的按钮删除所有继承的权限。DACL 中已经有一个条目:本地管理员。
更改本地管理员:完全控制:此文件夹、子文件夹和文件
添加系统:完全控制:此文件夹、子文件夹和文件。
添加创建者所有者:完全控制:此文件夹、子文件夹和文件。
添加经过身份验证的用户:列出文件夹/读取数据,创建文件夹/附加数据:仅限此文件夹
添加域管理员:完全控制:此文件夹、子文件夹和文件。
单击“确定”。
- 另一个问题是我的 iptables 规则,我需要执行一个完整的新链并修复每个 FORWARD 规则的顺序,因为这会在分析数据包时改变性能。以下是新的规则。
/bin/sh #!/bin/sh 复制代码 刷新所有规则 iptables -P 输入接受 iptables -P 转发接受 iptables -P 输出接受 iptables -t nat -F iptables -t mangle -F iptables -F iptables -X iptables -t raw -F # 基本表 iptables -A 输入 -m conntrack --ctstate 已建立,相关 -j 接受 iptables -A 输入 -i lo -j 接受 # iptables -A FORWARD -o virbr32 -s 192.168.1.0/24 -d 192.168.100.0/28 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i virbr32 -s 192.168.100.0/28 -d 192.168.1.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A 转发 -o virbr32 -i br0 -j 接受 iptables -A 转发 -i virbr32 -s 192.168.100.0/2 -j 接受 iptables -A 转发 -i virbr32 -o virbr32 -j 接受 iptables -A FORWARD -i virbr32 -j LOG --log-prefix “iptables-FORWARD-REJECT:” iptables -A FORWARD -i virbr32 -j REJECT --拒绝 icmp 端口不可达 # 伪装本地子网 iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -j MASQUERADE # 不要伪装这些保留的地址块。 iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 224.0.0.0/24 -j 返回 iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 255.255.255.255/32 -j 返回 # 中小企业 # RPC EPM TCP 135 # 通过 HTTPS TCP 593 进行 RPC # SMB(用于命名管道)TCP 445 # 短暂范围,动态 * iptables -I FORWARD 6 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -d 192.168.100.12 --dport 445 -j ACCEPT iptables -I FORWARD 7 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -d 192.168.100.12 --dport 139 -j ACCEPT # 接受来自虚拟机的 DNS(端口 53)和 DHCP(端口 67)数据包。 iptables -I FORWARD 8 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -m tcp -m multiport --dports 53,67 -j ACCEPT iptables -I FORWARD 9 -i virbr32 -o br0 -m conntrack --ctstate NEW -p udp -m udp -m multiport --dports 53,67 -j ACCEPT # # # 以下两条规则确保只检查 TCP 数据包。所有其他 # 继续进入*filter 表。 iptables -t raw -N TCPFLAGS iptables -t raw -A PREROUTING -p tcp -j TCPFLAGS iptables -t raw -A PREROUTING -j 接受 # 快速接受标准握手 # 允许 ACK 或 ACK/SYN #-A TCPFLAGS -j 接受 iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN,ACK,URG,PSH,RST ACK -j ACCEPT # 允许使用 URG 或 PSH 进行 ACK/FIN,或者两者皆可,或者两者都不可以 # 但不能设置 SYN 和 RST iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN,SYN,ACK,RST ACK,FIN -j ACCEPT # 允许 SYN 或 ACK/SYN iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN,SYN,URG,PSH,RST SYN -j ACCEPT # 允许 RST 或 ACK/RST iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN,SYN,URG,PSH,RST RST -j ACCEPT # 此规则捕获 xmas-tree 和 fin 攻击 iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN FIN -j DROP # 此规则捕获 xmas-tree 和 syn/rst 攻击 iptables -t raw -A TCPFLAGS -p tcp --tcp-flags SYN SYN -j DROP # 此规则可捕获空攻击 iptables -t raw -A TCPFLAGS -p tcp --tcp-flags ALL NONE -j DROP #-A TCPFLAGS -p tcp -ecn-tcp-cwr -j DROP # 这些规则可以捕获错误的确认组合 #-A TCPFLAGS -p tcp --tcp-flags ACK ACK -j ACC #iptables -t raw -A TCPFLAGS -j 接受 # 那么,我们接受什么 tcp? # 握手 (ACK/FIN), (ACK/SYN), (SYN), (ACK), (RST), (ACK/RST), # 以及带有 PSH 或 URG 或 FIN 或 ACK 的数据包 # #记录数据包丢弃 iptables -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4 iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4 iptables -A OUTPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
- 如您所见,我使用了 iptables -I FORWARD 而不是 iptables -A FORWARD,因为这样可以对我的过滤表执行有序规则,首先放置更重要的规则,然后在 DROP 或拒绝其余规则后进行更深入的分析。所有 FORWARD 规则都位于此行之前
iptables -A 输入 -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j 接受
编辑:我只需要进行一些更改,以便在将文件从虚拟机复制到局域网 192.168.1.0/24 外部时获得更高的传输速率,我不能超过 4Mb/s。任何建议都将不胜感激!!