Megas Опубликовано 31 июля, 2019 · Жалоба Всем привет, похоже без вашей помощи уже никак. Есть обычный firewall на iptables и aws linux 2, все как обычно. Набор правил в таблице forward в обще минимальный. Chain INPUT (policy ACCEPT 9174 packets, 4435K bytes) pkts bytes target prot opt in out source destination 2498K 728M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 11M 1049M ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 /* fw_input_dns_udp */ 3 180 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 /* fw_input_dns_tcp */ 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9100 14 840 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 74M 110G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- * * 0.0.0.0/0 10.43.64.2 tcp dpt:53 /* fw_forward_to_vpc_dns_tcp */ 0 0 ACCEPT udp -- * * 0.0.0.0/0 10.43.64.2 udp dpt:53 /* fw_forward_to_vpc_dns_udp */ 14 1098 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 65455 3827K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 match-set asubnets dst /* fw_forward_to_aws_subnets_80 */ 5723 340K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 match-set asubnets dst /* fw_forward_to_aws_subnets_443 */ 5211K 313M FILTER all -- * * 0.0.0.0/0 0.0.0.0/0 1423K 86M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 11M packets, 3390M bytes) pkts bytes target prot opt in out source destination 111K 9497K ACCEPT udp -- * eth0 0.0.0.0/0 10.43.64.2 udp dpt:53 /* fw_output_to_vpc_dns_udp_eth0 */ 0 0 ACCEPT tcp -- * eth0 0.0.0.0/0 10.43.64.2 tcp dpt:53 /* fw_output_to_vpc_dns_tcp_eth0 */ 0 0 ACCEPT udp -- * eth1 0.0.0.0/0 10.43.64.2 udp dpt:53 /* fw_output_to_vpc_dns_udp_eth1 */ 0 0 ACCEPT tcp -- * eth1 0.0.0.0/0 10.43.64.2 tcp dpt:53 /* fw_output_to_vpc_dns_tcp_eth1 */ Chain FILTER (1 references) pkts bytes target prot opt in out source destination 1423K 86M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set passtraffic dst,dst 3540K 212M LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "[passtraffic] rejected:" 3540K 212M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 /* fw_dnsfilter_reject */ reject-with icmp-port-unreachable Проблема возникет в правиле REJECT, 4к входящих пакетов неразрешенные сети приводит CPU idle к 40 процентам, 10к убивает ядра по SoftIRQ. сейчас используются r5.4xlarge (127gb mem, 16core), уже пробовал разные типы инстансов, в линейке C5 которая у AWS на KVM, сразу убивает проц процессом: softirqd Понимаю что использовать REJECT очень плохо, но увы, без него просто нельзя. Систему уже крутил, вот текущие параметры: fs.file-max=2097152 net.core.netdev_max_backlog=65536 net.core.rmem_default = 31457280 net.core.rmem_max = 12582912 net.core.somaxconn=32768 net.core.wmem_default = 31457280 net.core.wmem_max = 12582912 net.ipv4.conf.all.route_localnet=1 net.ipv4.conf.all.rp_filter=2 net.ipv4.conf.all.send_redirects=0 net.ipv4.conf.default.route_localnet=1 net.ipv4.conf.default.rp_filter=2 net.ipv4.conf.default.send_redirects=0 net.ipv4.ip_forward=1 net.ipv4.ip_local_port_range=10240 65535 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.tcp_rmem = 16384 87380 16777216 net.ipv4.tcp_sack=0 net.ipv4.tcp_slow_start_after_idle=0 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_wmem = 16384 65536 16777216 net.ipv4.udp_rmem_min = 16384 net.ipv4.udp_wmem_min = 16384 net.netfilter.nf_conntrack_buckets=262144 net.netfilter.nf_conntrack_generic_timeout=120 net.netfilter.nf_conntrack_max=1048576 net.netfilter.nf_conntrack_tcp_loose=0 net.netfilter.nf_conntrack_tcp_timeout_established=54000 vm.min_free_kbytes=104857 additional sysctl net.ipv4.tcp_fin_timeout=15 sysctl net.ipv4.tcp_synack_retries=1 sysctl net.ipv4.tcp_syn_retries=1 sysctl net.ipv4.tcp_syncookies=1 sysctl net.core.somaxconn=60000 sysctl net.ipv4.tcp_fin_timeout=15 Трафик проходит совсем небольшой, около 10-150мегабит постоянной загрузки, но как только приходит большое количество пакетов которые попадают в REJECT, загрузка CPU подскакивает и система тупит очень сильно. Может у кого-то есть идеи как можно оптимизировать и куда можно посмотреть еще, чтобы понять что именно убивает? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
TriKS Опубликовано 31 июля, 2019 · Жалоба dns_amplification замучал? :) откуда ж столько пакетов то c внутряны на DNS? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 31 июля, 2019 · Жалоба Сделайте per-IP ratelimit, пока он не превышен, отправляйте reject, как превышен - DROP Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
rm_ Опубликовано 31 июля, 2019 · Жалоба 7 hours ago, Megas said: Понимаю что использовать REJECT очень плохо, но увы, без него просто нельзя. 1) А почему нельзя? REJECT это помогать себя DDoS'ить, просто делайте DROP. 2) вы уверены что проблема именно в REJECT, а не в LOG перед ним, которое каждый пакетик старательно пишет в логи? Убрать это и посмотреть стало ли лучше. 3) если всё же правда в REJECT, попробуйте вместо него перейти на -t raw -I PREROUTING -m set ! --match-set ... -j DROP Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NewUse Опубликовано 31 июля, 2019 · Жалоба а какая сетевая карта? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Megas Опубликовано 1 августа, 2019 (изменено) · Жалоба Это ENI от AWS с последней версией драйвера Можно попробовать log сделать лимит на количество записей и проанализировать, в ближайшие пару дней попробую все. Изменено 1 августа, 2019 пользователем Megas Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_INF_ Опубликовано 4 августа, 2019 · Жалоба Простите, а конечная задача какая ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShyLion Опубликовано 7 августа, 2019 · Жалоба On 7/31/2019 at 11:07 AM, Megas said: reject-with icmp-port-unreachable На _КАЖДЫЙ_ отвергнутый пакет система генерирует свой ICMP пакет отправителю, увеличивая тем самым зло во вселенной. Потому как вовсе не факт что исходный пакет был реально отправлен тем, кому полетел ваш ICMP. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vurd Опубликовано 7 августа, 2019 · Жалоба ТС наверное понимает разницу между дропом и режектом. Пишет же, что задача специфичная, какая не говорит) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...