
За последний месяц я не могу решить эту проблему, я создаю разные правила iptables, включаю и отключаю модули в ядре, но результаты те же, и даже больше пакетов отбрасываются iptables. Это приводит к тому, что пользователи получают задержку в 3/5 секунд при попытке доступа к разным общим папкам с 192.168.1.0/24 по 192.168.3.0/28 на виртуальной машине.
Я вижу это в логах:
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 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 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 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 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 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 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 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 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 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
Сервер Debian с iptables и 2 мостами
- BR0 — это мост с доступом в Интернет к шлюзу 192.168.1.1, и все пользователи находятся в этой сети.
- VIRBR10, 2-й мост, vm1 подключен к этому мосту с IP 192.168.3.12 (192.168.3.0/28) и имеет nat с iptables наружу, проходящим через br0
Здесь »» Сетевой график со шлюзом и гипервизором
Вот моя таблица маршрутов
~ список маршрутов
Таблица маршрутизации 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 шоу
имя моста идентификатор моста интерфейсы с поддержкой STP br0 8000.0cc47ac18d3c да eth2 virbr10 8000.525400c4b847 да virbr10-пустышка vnet2
~ правила iptables
#!/bin/ш #Очистка всех правил iptables -P ВХОД ПРИНЯТЬ iptables -P ПЕРЕСЫЛАТЬ ПРИНЯТЬ iptables -P ВЫВОД ПРИНЯТЬ iptables -t nat -F iptables -t mangle -F iptables-F iptables-X # Разрешить базовый ВХОДНОЙ трафик. iptables -A ВХОД -m состояние --state УСТАНОВЛЕНО,СВЯЗАННОЕ -j ПРИНЯТЬ iptables -A ВХОД -i lo -j ПРИНЯТЬ iptables -A ВХОД -p icmp --icmp-type 8 -m conntrack --ctstate НОВЫЙ -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 state --state НОВЫЙ -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 state --state НОВЫЙ -m tcp -p tcp --dport 139 -j ПРИНЯТЬ #iptables -A ВХОД -p tcp -m tcp -m conntrack --ctstate НОВЫЙ --sport 137 -j ПРИНЯТЬ #iptables -A ВХОД -p tcp -m tcp -m conntrack --ctstate НОВЫЙ --sport 138 -j ПРИНЯТЬ #iptables -A ВХОД -p tcp -m tcp -m conntrack --ctstate НОВЫЙ --sport 139 -j ПРИНЯТЬ #РДП #Порт: 3389 # подключений извне iptables -I ПЕРЕСЫЛАТЬ -o virbr10 -d 192.168.3.12 -j ПРИНЯТЬ iptables -t nat -I ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -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 МАСКАРАД iptables -A ПЕРЕСЫЛКА -o virbr10 -m состояние --state СВЯЗАННЫЕ,УСТАНОВЛЕННЫЕ -j ПРИНЯТЬ #Разрешить соединения 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-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 ВОЗВРАТ # Маскировать все пакеты, идущие от виртуальных машин в локальную сеть/Интернет. iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -p tcp -j МАСКАРАД --to-ports 1024-65535 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -p udp -j МАСКАРАД --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 ВХОД -p tcp -m tcp --syn -m conntrack --ctstate НОВЫЙ --dport 22 -j ПРИНЯТЬ # Принять Радмин iptables -A ВХОД -p tcp -m tcp --syn -m conntrack --ctstate НОВЫЙ --dport 4899 -j ПРИНЯТЬ # Разрешить входящий трафик в частную подсеть. iptables -A FORWARD -d 192.168.3.0/28 -o virbr10 -m state --state УСТАНОВЛЕНО,СВЯЗАНО -j ПРИНЯТЬ #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 УСТАНОВЛЕНО,СВЯЗАНО -j ПРИНЯТЬ #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 --reject-with icmp-port-unreachable # Принимать пакеты DNS (порт 53) и DHCP (порт 67) от виртуальных машин. iptables -A ВХОД -i virbr10 -p udp -m udp -m multiport --dports 53,67 -j ПРИНЯТЬ iptables -A ВХОД -i virbr10 -p tcp -m tcp -m multiport --dports 53,67 -j ПРИНЯТЬ #ICMP iptables -A ВЫВОД -p icmp -m conntrack --ctstate УСТАНОВЛЕНО,СВЯЗАННОЕ -j ПРИНЯТЬ # Отвергните все остальное. iptables -A ВХОД -m conntrack --ctstate НЕВЕРНЫЙ -j ОТКАЗ iptables -A ВХОД -p tcp -m tcp -j ОТКЛОНИТЬ --reject-with tcp-reset iptables -A ВХОД -j ОТКЛОНИТЬ --reject-with icmp-port-unreachable #Лог-пакеты сброшены iptables -A ВХОД -m limit --limit 2/мин -j ЖУРНАЛ --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 ВЫВОД -m limit --limit 2/мин -j ЖУРНАЛ --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
Обновления
- Измените цепочку журналов в конец скрипта и вставьте новые записи журнала.
решение1
После поиска в Google я смог решить эту проблему.
- Медленный доступ к общим файлам с SMB на контроллере домена в Windows Server 2012 R2 вызван тем, что GPO перенаправления папок вносит изменения в разрешения в папке профиля пользователя во время процесса перенаправления, когда папка не существует в месте назначения. На основе iamrafic из Microsfot Technet (связь), нам нужно изменить права доступа к папке следующим образом:
Создайте папку в нужном месте. Отключите наследование разрешений от родителя и удалите все унаследованные разрешения, нажав соответствующую кнопку. Одна запись уже будет в DACL: Local Administrators.
Изменить локальных администраторов: Полный доступ: эта папка, подпапки и файлы
Добавить СИСТЕМУ: Полный доступ: эта папка, подпапки и файлы.
Добавить СОЗДАТЕЛЯ-ВЛАДЕЛЬЦА: Полный доступ: Эта папка, подпапки и файлы.
Добавить аутентифицированных пользователей: Список папок / Чтение данных, Создание папок / Добавление данных: Только эта папка
Добавить администраторов домена: Полный доступ: эта папка, подпапки и файлы.
Нажмите ОК.
- Другая проблема была в моих правилах iptables, мне нужно было выполнить полностью новые цепочки и исправить порядок для каждого правила FORWARD, потому что это изменяет производительность при анализе пакета. Вот новые.
#!/bin/ш #Очистка всех правил 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 УСТАНОВЛЕНО,СВЯЗАННОЕ -j ПРИНЯТЬ iptables -A FORWARD -i virbr32 -s 192.168.100.0/28 -d 192.168.1.0/24 -m conntrack --ctstate УСТАНОВЛЕНО,СВЯЗАННОЕ -j ПРИНЯТЬ 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 --reject-with icmp-port-unreachable # Маскировка локальной подсети iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -j МАСКАРАД # Не маскируйтесь под эти зарезервированные блоки адресов. 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 # RPC через HTTPS TCP 593 # SMB (для именованных каналов) TCP 445 # Эфемерный диапазон, динамический * iptables -I ПЕРЕНАПРАВИТЬ 6 -o virbr32 -i br0 -m conntrack --ctstate НОВЫЙ -p tcp -d 192.168.100.12 --dport 445 -j ПРИНЯТЬ iptables -I ПЕРЕНАПРАВИТЬ 7 -o virbr32 -i br0 -m conntrack --ctstate НОВЫЙ -p tcp -d 192.168.100.12 --dport 139 -j ПРИНЯТЬ # Принимать пакеты DNS (порт 53) и DHCP (порт 67) от виртуальных машин. iptables -I ПЕРЕНАПРАВИТЬ 8 -o virbr32 -i br0 -m conntrack --ctstate НОВЫЙ -p tcp -m tcp -m multiport --dports 53,67 -j ПРИНЯТЬ iptables -I ПЕРЕСЫЛКА 9 -i virbr32 -o br0 -m conntrack --ctstate НОВЫЙ -p udp -m udp -m multiport --dports 53,67 -j ПРИНЯТЬ # # # Два правила ниже гарантируют, что будут проверены только TCP-пакеты. Все остальные # продолжаем в таблице *filter. iptables -t raw -N TCPFLAGS iptables -t raw -A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -p tcp -j TCPFLAGS iptables -t raw -A PREVEREUTING -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 # Это правило отлавливает атаки типа "рождественская елка" и "плавник" 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 ВСЕ НИКАКИХ -j ОТКАЗАТЬ #-A TCPFLAGS -p tcp -ecn-tcp-cwr -j ОТБРОС # эти правила отлавливают плохие комбинации 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 ВХОД -m limit --limit 2/мин -j ЖУРНАЛ --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 ВЫВОД -m limit --limit 2/мин -j ЖУРНАЛ --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
- Как вы можете видеть, я использовал iptables -I FORWARD вместо iptables -A FORWARD, потому что с этим можно выполнить упорядоченные правила в моей таблице фильтров, поместив сначала более важные правила, а затем более глубоко после DROP или deny остальные. Все правила FORWARD идут перед этой строкой
iptables -A ВХОД -p icmp --icmp-type 8 -m conntrack --ctstate НОВЫЙ -j ПРИНЯТЬ
Редактировать: Мне нужно только внести некоторые изменения, чтобы увеличить скорость передачи при копировании файлов с виртуальной машины наружу в локальной сети 192.168.1.0/24, я не могу взять больше 4 Мбит/с. Любые советы будут оценены по достоинству!!