Megas Posted July 31, 2019 Posted July 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 подскакивает и система тупит очень сильно. Может у кого-то есть идеи как можно оптимизировать и куда можно посмотреть еще, чтобы понять что именно убивает? Вставить ник Quote
TriKS Posted July 31, 2019 Posted July 31, 2019 dns_amplification замучал? :) откуда ж столько пакетов то c внутряны на DNS? Вставить ник Quote
s.lobanov Posted July 31, 2019 Posted July 31, 2019 Сделайте per-IP ratelimit, пока он не превышен, отправляйте reject, как превышен - DROP Вставить ник Quote
rm_ Posted July 31, 2019 Posted July 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 Вставить ник Quote
Megas Posted August 1, 2019 Author Posted August 1, 2019 (edited) Это ENI от AWS с последней версией драйвера Можно попробовать log сделать лимит на количество записей и проанализировать, в ближайшие пару дней попробую все. Edited August 1, 2019 by Megas Вставить ник Quote
_INF_ Posted August 4, 2019 Posted August 4, 2019 Простите, а конечная задача какая ? Вставить ник Quote
ShyLion Posted August 7, 2019 Posted August 7, 2019 On 7/31/2019 at 11:07 AM, Megas said: reject-with icmp-port-unreachable На _КАЖДЫЙ_ отвергнутый пакет система генерирует свой ICMP пакет отправителю, увеличивая тем самым зло во вселенной. Потому как вовсе не факт что исходный пакет был реально отправлен тем, кому полетел ваш ICMP. Вставить ник Quote
vurd Posted August 7, 2019 Posted August 7, 2019 ТС наверное понимает разницу между дропом и режектом. Пишет же, что задача специфичная, какая не говорит) Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.