Урок #11
[Блокиране на атаки чрез iptables]
Има различни начини за изграждане на ваши собствени анти-DDoS правила за iptables. В този изчерпателен урок ще обсъдим най-ефективните методи за защита от DDoS.
Това ръководство ще ви научи как да:
Изберете най-добрата таблица и верига за iptables, за да спрете DDoS атаките
Оправете настройките на ядрото си, за да смекчите ефектите на DDoS атаките
Използвайте iptables, за да блокирате повечето базирани на TCP DDoS атаки
Използвайте iptables SYNPROXY, за да блокирате байпасване на по-горните правила в Iptables
--------------------------------------------------------------------------------------------------------------------------
Въпреки това, не е невъзможно да се филтрира повечето лош трафик при скорост на линия с помощта на iptables!
Ще покрием само защитата от атаки, базирани на TCP. Повечето UDP-базирани атаки са усилени рефлекторни атаки, които ще изчерпат мрежовата интерфейсна карта на всеки споделен сървър.
Единственият подход за смекчаване, който има смисъл срещу тези видове атаки, е блокирането им в края или в основната мрежа или дори при оператора.
Ако те успеят да достигнат до вашия сървър, няма какво да направите срещу тези мулти-Gbit / s атаки, освен да се преместите в DDoS защитена мрежа. (Както съм описал в урок #10 )
Какво е IPtables?
netfilter iptables (скоро ще бъде заменен с nftables ) е полезна програма за команден ред на потребителско пространство за конфигуриране на правила за филтриране на пакети от ядро, разработени от netfilter.
Това е помощната програма за управление на защитната стена по подразбиране в Linux системите - всеки, който работи с Linux системи, трябва да е запознат с нея или поне да е чувал за нея.
iptables могат да се използват за филтриране на определени пакети, блокиране на изходни или дестинационни портове и IP адреси, пренасочване на пакети чрез NAT и много други неща.
Най-често се използва за блокиране на дестинационни портове и изходни IP адреси.
Защо вашите IPtables Anti-DDoS правила не са правилни
За да разберем защо вашите текущи правила за iptables за предотвратяване на DDoS атаки не помагат, първо трябва да разберем как работи iptables.
iptables е инструмент за команден ред, използван за настройка и контрол на таблиците на правилата за филтриране на IP пакети. Има различни таблици за различни цели.
IPable таблици
Филтър: Таблицата с филтри е таблицата по подразбиране и най-често използваната таблица, към която отиват правилата, ако не използвате опцията -t ( –table ).
NAT: Тази таблица се използва за превод на мрежови адреси (NAT). Ако пакет създаде нова връзка, nat таблицата се проверява за правила.
Mangle: Таблицата с mangle се използва за промяна или маркиране на пакети и информация за техните заглавки.
Raw: Целта на тази таблица е главно да изключи определени пакети от проследяване на връзката, като използва целта NOTRACK.
Както можете да видите, има четири различни таблици в средна Linux система, която няма заредени нестандартни модули на ядрото. Всяка от тези таблици поддържа различен набор от iptables вериги .
IPtables
ПРЕДУПРЕЖДЕНИЕ:raw, nat, mangle
Отнася се за пакети, които влизат в мрежовата интерфейсна карта (NIC)
INPUT: filter, mangle
Отнася се за пакети, които се маршрутизират през сървъра
ИЗХОД: filter, mangle
Отнася се за пакети, които сървърът изпраща (локално генерирани)
OUTPUT: raw, filter, nat, mangle
Отнася се за пакети, които напускат сървъра
В зависимост от това какъв тип пакети искате да блокирате или модифицирате, избирате определена таблица за iptables и вериги, която избраната таблица поддържа.
Разбира се, все още ни липсва обяснение на целите на iptables (ACCEPT, DROP, REJECT и т.н.), но предполагаме, че ако четете тази тема, вече знаете как да се справите с iptables.
Ще обясним защо вашите правила за iptables не помагат, за да спрете DDoS, а не да ви научим как да използвате iptables. Да се ??върнем на това.
Ако искате да блокирате DDoS атака с iptables, изпълнението на правилата на iptables е изключително важно. Повечето типове DDoS базирани на TCP атаки използват висока скорост на пакети, което означава, че чистият брой пакети в секунда е това, което кара сървъра да пада.
Ето защо искате да сте сигурни, че можете да обработвате и блокирате колкото се може повече пакети в секунда.
Ще откриете, че повечето, ако не всички ръководства за това как да блокират DDoS атаки с помощта на iptables, използват филтърната таблица и веригата INPUT за анти-DDoS правила.
Проблемът с този подход е, че веригата INPUT се обработва само след веригите PREROUTING и FORWARD и следователно се прилага само ако пакетът не съвпада с която и да е от тези две вериги.
Това причинява забавяне на филтрирането на пакета, който консумира ресурси. В заключение, за да направим правилата си възможно най-ефективни, трябва да преместим нашите анти-DDoS правила колкото е възможно по-нагоре по веригите.
Първата верига, която може да се приложи към пакет, е веригата PREROUTING, така че в идеалния случай вече ще искаме да филтрираме лошите пакети в тази верига.
Въпреки това, филтър таблица не поддържа PREROUTING верига. За да заобиколим този проблем, можем просто да използваме таблицата с mangle вместо филтърната таблица за нашите правила против DDoS iptables.
Той поддържа повечето, ако не всички правила, които филтърната таблица поддържа, като същевременно поддържа всички iptables вериги.
Така че искате да знаете защо вашите правила за защита от iptables DDoS не помагат? Това е така, защото използвате филтърната таблица и веригата INPUT, за да блокирате лошите пакети!
-------------------------------------------------------------------------------------------------------------------------------
Най-доброто решение за драстично повишаване на производителността на вашите правила за iptables и следователно количеството (TCP) DDoS трафик за атака, което те могат да филтрират, е да използвате таблицата на mangle и веригата PREROUTING!
Най-добрите настройки на ядрото на Linux за смекчаване на DDoS
Друга често срещана грешка е, че хората не използват оптимизирани настройки на ядрото, за да смекчат по-добре ефектите на DDoS атаките.
Имайте предвид, че това ръководство се фокусира върху CentOS 7 като операционна система по избор. CentOS 7 включва скорошна версия на iptables и поддръжка на новата цел на SYNPROXY.
Няма да покриваме всяка една настройка на ядрото, която трябва да коригирате, за да смекчим по-добре DDoS с iptables.
Вместо това предоставяме набор от настройки на ядрото CentOS 7, които бихме използвали. Просто поставете по-долу във вашия /etc/sysctl.conf файл и приложете настройките с sysctl -p .
Настройки на анти-DDoS ядрото (sysctl.conf)
kernel.printk = 4 4 1 7
kernel.panic = 10
kernel.sysrq = 0
kernel.shmmax = 4294967296
kernel.shmall = 4194304
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
vm.swappiness = 20
vm.dirty_ratio = 80
vm.dirty_background_ratio = 5
fs.file-max = 2097152
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 31457280
net.core.rmem_max = 67108864
net.core.wmem_default = 31457280
net.core.wmem_max = 67108864
net.core.somaxconn = 65535
net.core.optmem_max = 25165824
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384
net.ipv4.neigh.default.gc_interval = 5
net.ipv4.neigh.default.gc_stale_time = 120
net.netfilter.nf_conntrack_max = 10000000
net.netfilter.nf_conntrack_tcp_loose = 0
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_no_pmtu_disc = 1
net.ipv4.route.flush = 1
net.ipv4.route.max_size = 8048576
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.udp_rmem_min = 16384
net.ipv4.tcp_wmem = 4096 87380 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 400000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1
Тези настройки на sysctl.conf помагат за увеличаване на ефективността на вашия сървър под DDoS, както и ефективността на правилата на iptables, които ще предоставим в това ръководство.
------------------------------------------------------------------------------------------------------------------
Действителните IPtables Anti-DDoS правила
Имайки предвид, че сега знаете, че трябва да използвате таблицата на mangle и веригата PREROUTING, както и оптимизирани настройки на ядрото, за да смекчите ефектите на DDoS атаките, сега ще преминем към няколко примерни правила за смекчаване на повечето TCP DDoS атаки.
DDoS атаките са сложни.
Има много различни видове DDoS и е почти невъзможно да се поддържат базирани на подписа правила срещу всички тях.
Но за щастие има нещо, наречено проследяване на връзката (модул на ядрото nf_conntrack), което може да ни помогне да смекчим почти всяка TCP-базирана DDoS атака, която не използва SYN пакети, които изглеждат легитимни.
Това включва всички видове ACK и SYN-ACK DDoS атаки, както и DDoS атаки, които използват фалшиви TCP флагове.
Ще започнем само с пет прости iptables правила, които вече ще отпаднат много TCP-базирани DDoS атаки.
Блокиране на невалидни пакети
iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP
Това правило блокира всички пакети, които не са SYN пакет и не принадлежат към установена TCP връзка.
Блокирайте нови пакети, които не са SYN
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
Това блокира всички нови пакети (не принадлежат към установена връзка) и не използват флаг SYN. Това правило е подобно на "Блокиране на невалидни пакети", но открихме, че той улавя някои пакети, които другият не.
Блокиране на нечести стойности на MSS
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
Горното правило iptables блокира нови пакети (само SYN пакетите могат да бъдат нови пакети съгласно двете предишни правила), които използват TCP MSS стойност, която не е често срещана. Това помага да се блокират SYN атаките.
Блокиране на пакети с флагове на Bogus TCP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
Горният набор от правила блокира пакети, които използват фалшиви TCP флагове, т.е. TCP флагове, които законните пакети не биха използвали.
Блокиране на пакети от частни подмрежи (Spoofing)
iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP
iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP
iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP
Тези правила блокират подправени пакети, произхождащи от частни (локални) подмрежи. В интерфейса на вашата обществена мрежа обикновено не искате да получавате пакети от IP-адреси на частен източник.
Тези правила предполагат, че вашият loopback интерфейс използва 127.0.0.0/8 IP в пространството.
Тези пет набора правила сами вече блокират много базирани на TCP DDoS атаки при много високи скорости на пакети.
С горепосочените настройки и правила на ядрото ще можете да филтрирате ACK и SYN-ACK атаки с линейна скорост.
Допълнителни правила
iptables -t mangle -A PREROUTING -p icmp -j DROP
Това отпада всички ICMP пакети. ICMP се използва само за ping на хост, за да разбере дали все още е жив. Тъй като обикновено това не е необходимо и представлява само друга уязвимост, която атакуващите могат да експлоатират, ние блокираме всички пакети ICMP, за да смекчим Ping of Death (ping poplava), потоп на ICMP и потоп от фрагментиране на ICMP.
iptables -A INPUT -p tcp -m connlimit --connlimit-above 80 -j REJECT --reject-with tcp-reset
Това правило за iptables помага срещу атаките за връзка. Той отхвърля връзки от хостове, които имат повече от 80 установени връзки. Ако се сблъскате с някакви проблеми, трябва да повдигнете лимита, тъй като това може да доведе до проблеми с посетителите, които установяват голям брой TCP връзки.
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP
Ограничава новите TCP връзки, които клиентът може да установи в секунда. Това може да бъде полезно срещу атаки на връзки, но не толкова срещу SYN атаки, тъй като обикновено използват безкрайно количество от различни IP-адреси в бот мрежа.
iptables -t mangle -A PREROUTING -f -j DROP
Това правило блокира фрагментирани пакети. Обикновено нямате нужда от тях и блокирането на фрагменти ще смекчи потопа от фрагментиране на UDP. Но през повечето време атаките с фрагментация на UDP използват голямо количество честотна лента, което е вероятно да изтощи капацитета на вашата мрежова карта, което прави това правило незадължително и вероятно не е най-полезното.
iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP
Това ограничава входящите TCP RST пакети, за да смекчи TCP RST наводненията. Ефективността на това правило е съмнителна.
--------------------------------------------------------------------------------
Смекчаване на атаките на SYN с SYNPROXY
SYNPROXY е нова цел на iptables, която е добавена във Linux ядро ??версия 3.12 и iptables 1.4.21. CentOS 7 подкрепи функцията и тя е достъпна в ядрото си по подразбиране 3.10.
Целта на SYNPROXY е да провери дали хостът, изпратил SYN пакета, действително установява пълна TCP връзка или просто не прави нищо, след като изпрати SYN пакета.
Ако не направи нищо, изхвърля пакета с минимално въздействие върху производителността.
Докато правилата на iptables, които предоставихме по-горе, вече блокират повечето атаки, базирани на TCP, типът атака, който все още може да се промъкне през тях, ако е достатъчно сложен, е SYN потоп.
Важно е да се отбележи, че изпълнението на правилата винаги ще бъде по-добро, ако намерим определен шаблон или подпис за блокиране, като дължина на пакета ( -m дължина ), TOS ( -m tos ), TTL ( -m ttl ) или низове и шестнадесетични стойности ( -m string и -m u32 за по-напредналите потребители).
Но в някои редки случаи това не е възможно или поне не е лесно за постигане. Така че в тези случаи можете да се възползвате от SYNPROXY.
Ето правила за iptables SYNPROXY, които помагат за смекчаване на наводненията на SYN, които заобикалят другите ни правила:
iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Тези правила важат за всички портове. Ако искате да използвате SYNPROXY само на определени TCP портове, които са активни (препоръчително - също така трябва да блокирате всички TCP портове, които не се използват, използвайки таблицата на mangle и веригата PREROUTING), можете просто да добавите –dport 80 за всяко от правилата ако искате да използвате SYNPROXY само на порт 80.
За да проверите дали SYNPROXY работи, можете да гледате -n1 cat / proc / net / stat / synproxy . Ако стойностите се променят, когато установите нова TCP връзка с порта, на който използвате SYNPROXY, той работи.
--------------------------------------------------------------------------------------------------------------
Ето още няколко правила за iptables, които са полезни за повишаване на общата сигурност на Linux сървър:
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
iptables -N port-scanning
iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
iptables -A port-scanning -j DROP
Заключение
Този урок демонстрира някои от най-мощните и ефективни методи за спиране на DDoS атаки с помощта на iptables.
Успешно смекчихме DDoS атаките, които достигнаха максимум с няколко милиона пакета в секунда, използвайки тези правила за iptables.
Ако се използва правилно, iptables е изключително мощен инструмент, който може да блокира различни видове DDoS атаки със скорост 1 - 10GBPS
! | Съобщение от: Jaxxin |
Не подценявайте силата на iptables! |
Превод: V.A.L.V.E & Jaxxin
Източник: Google
Урока е добавен по молба на hackera457