Iptables
帶有 iptables 的 debian kvm 伺服器正在丟棄網橋數據包
在過去的一個月裡,我無法解決這個問題,我制定了不同的 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 確認 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 確認 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 確認 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, 是到網關 192.168.1.1 的 Internet 訪問網橋,所有使用者都在這個網路上
- VIRBR10,第二個網橋,vm1 已經連接到這個網橋,ip 為 192.168.3.12 (192.168.3.0/28),並且有 nat 和 iptables 通過 br0 到外面
這是我的路由表
~ 路線清單
核心IP路由表 目標網關 Genmask 標誌 Metric Ref Use 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 #刷新所有規則 iptables -P 輸入接受 iptables -P 轉發接受 iptables -P 輸出接受 iptables -t nat -F iptables -t mangle -F iptables -F iptables -X # 允許基本輸入流量。 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A 輸入 -i lo -j 接受 iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT # #MTU 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 #Port: netbios-ns – 137/udp -- NETBIOS 名稱服務 #Port: netbios-dgm – 138/udp -- NETBIOS 數據報服務 #埠:netbios-ssn – 139/tcp -- NETBIOS 會話服務 iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT iptables -A 輸入 -p udp -m udp --dport 445 -j 接受 iptables -A 輸入 -p udp -m udp --dport 137:138 -j 接受 iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT #iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --sport 137 -j ACCEPT #iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --sport 138 -j ACCEPT #iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --sport 139 -j ACCEPT #RDP #埠:3389 # 外部連接 iptables -I FORWARD -o virbr10 -d 192.168.3.12 -j ACCEPT iptables -t nat -I PREROUTING -p tcp --dport 3589 -j DNAT --to 192.168.3.12:3389 #偽裝本地子網 iptables -I FORWARD -o virbr10 -d 192.168.3.0/28 -j ACCEPT 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 FORWARD -i virbr10 -o br0 -j ACCEPT iptables -A FORWARD -o virbr10 -i br0 -j ACCEPT iptables -A FORWARD -i virbr10 -o lo -j ACCEPT ### #KVM 路由訪客 # 發送到 VM 的 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 RETURN iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 255.255.255.255/32 -j RETURN # 偽裝從 VM 到 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 偽裝 # 接受 SSH 連接。 iptables -A INPUT -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT # 接受 Radmin iptables -A INPUT -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 4899 -j ACCEPT # 允許入站流量到私有子網。 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 FORWARD -i virbr10 -o virbr10 -j ACCEPT # 拒絕其他一切。 iptables -A FORWARD -i virbr10 -j REJECT --reject-with icmp-port-unreachable # 接受來自VM的DNS(53埠)和DHCP(67埠)報文。 iptables -A INPUT -i virbr10 -p udp -m udp -m multiport --dports 53,67 -j ACCEPT iptables -A INPUT -i virbr10 -p tcp -m tcp -m multiport --dports 53,67 -j ACCEPT #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 --reject-with icmp-port-unreachable #記錄丟包 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
更新
- 將日誌鏈更改為腳本末尾並粘貼新的日誌條目
在Google上搜尋後,我可以解決這個問題。
- 在 Windows Server 2012 R2 的域控制器上使用 SMB 訪問共享文件的速度很慢是因為文件夾重定向 GPO 在重定向過程中更改了使用者配置文件文件夾中的權限,而該文件夾在目標中不存在。基於來自 Microsfot Technet (連結) 的 iamrafic,我們需要將文件夾權限更改為:
在所需位置創建文件夾 禁用從父級繼承權限並通過點擊相應按鈕刪除所有繼承的權限。DACL 中已經有一個條目:本地管理員。
更改本地管理員:完全控制:此文件夾、子文件夾和文件
添加系統:完全控制:此文件夾、子文件夾和文件。
添加 CREATOR OWNER:完全控制:此文件夾、子文件夾和文件。
添加經過身份驗證的使用者:列出文件夾/讀取數據,創建文件夾/附加數據:僅此文件夾
添加域管理員:完全控制:此文件夾、子文件夾和文件。
點擊確定。
- 另一個問題是我的 iptables 規則,我需要執行一個全新的鏈並修復每個 FORWARD 規則的順序,因為這會在分析數據包時改變性能。這裡是新的。
#!/bin/sh #刷新所有規則 iptables -P 輸入接受 iptables -P 轉發接受 iptables -P 輸出接受 iptables -t nat -F iptables -t mangle -F iptables -F iptables -X iptables -t 原始 -F # 基本表 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 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 FORWARD -o virbr32 -i br0 -j ACCEPT iptables -A FORWARD -i virbr32 -s 192.168.100.0/2 -j ACCEPT iptables -A FORWARD -i virbr32 -o virbr32 -j ACCEPT iptables -A FORWARD -i virbr32 -j LOG --log-prefix "iptables-FORWARD-REJECT:" iptables -A FORWARD -i virbr32 -j REJECT --reject-with icmp-port-unreachable #偽裝本地子網 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 RETURN iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 255.255.255.255/32 -j RETURN #中小企業 # RPC EPM TCP 135 # RPC over HTTPS TCP 593 # 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 # 接受來自VM的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 ACCEPT # 快速接受標準握手 # 允許 ACK 或 ACK/SYN #-A TCPFLAGS -j 接受 iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN,ACK,URG,PSH,RST ACK -j ACCEPT # 允許 ACK/FIN 帶有 URG 或 PSH,或兩者,或兩者都不 # 但是不能設置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 # 這些規則擷取錯誤的 ack 組合 #-A TCPFLAGS -p tcp --tcp-flags ACK ACK -j ACC #iptables -t raw -A TCPFLAGS -j ACCEPT # 那麼,我們對 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 INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
編輯:我只需要在將文件從 vm 複製到區域網路 192.168.1.0/24 的外部時進行一些更改以提高傳輸速率,我不能超過 4Mb/s。任何建議將不勝感激!!