~ 路线列表

~ 路线列表

过去一个月我一直无法解决这个问题,我制定了不同的 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. 将日志链更改为脚本末尾并粘贴新的日志条目

答案1

经过 Google 搜索后,我可以解决这个问题。

  1. 在 Windows Server 2012 R2 中,使用 SMB 在域控制器上访问共享文件的速度很慢,这是因为文件夹重定向 GPO 在重定向过程中更改了用户配置文件文件夹中的权限,而该文件夹在目标中不存在。基于 Microsfot Technet 的 iamrafic (关联),我们需要将文件夹权限改为这样:

在所需位置创建文件夹,禁用从父级继承的权限,并通过单击相应的按钮删除所有继承的权限。DACL 中已经有一个条目:本地管理员。

更改本地管理员:完全控制:此文件夹、子文件夹和文件

添加系统:完全控制:此文件夹、子文件夹和文件。

添加创建者所有者:完全控制:此文件夹、子文件夹和文件。

添加经过身份验证的用户:列出文件夹/读取数据,创建文件夹/附加数据:仅限此文件夹

添加域管理员:完全控制:此文件夹、子文件夹和文件。

单击“确定”。

  1. 另一个问题是我的 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。任何建议都将不胜感激!!

相关内容