Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 12603|Відповідь: 2

[linux] Подивіться, як мій Linux захищає від SYN-атак

[Копіювати посилання]
Опубліковано 12.12.2015 00:04:58 | | | |

Коли я прийшов до компанії сьогодні вранці, я відчував себе досить повільно, коли увійшов на офіційний сайт компанії, увійшов на сервер, щоб перевірити статус доступу до офіційного сайту:

[root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn

     172 ЗАСНОВАНИЙ

     59 CONNECTED

    589 SYN_RECV

     15 ПОТІК

SYN насправді настільки високий, що продовжуйте відстежувати SYN, надісланий цими IP-адресами:

[root@tweb ~]# netstat -an | grep SYN | awk '{друк $5}' | awk -F: '{print $1}' | сортувати | uniq -c | sort -nr | більше

570 x.x.x.x   

(IP не записується, це IP компанії Shandong Zaozhuang Unicom), але ця одна IP надіслала так багато SYN-запитів, і конкурентність нашого веб-сервера не дуже висока, тому звичайні запити користувачів не можуть відповідати, і сторінку неможливо відкрити. Оскільки апаратний фаєрвол управляється ІТ-відділом групи, у мене немає повноважень, тому я можу лише частково вжити заходів на локальному сервері, щоб частково зменшити атаку на SYN.

Перш за все, давайте поговоримо про принцип атаки в SYN:

У протоколі TCP/IP протокол TCP забезпечує надійні сервіси з'єднання шляхом тристороннього рукостискання для встановлення з'єднання.

Перше рукостискання: Під час встановлення з'єднання клієнт надсилає син-пакет (syn=j) на сервер і переходить у стан SYN_SEND, очікуючи підтвердження сервером.

Друге рукостискання: Коли сервер отримує пакет SYN, він повинен підтвердити SYN клієнта (ack=j+1), а також надіслати пакет SYN (syn=k), тобто пакет SYN+ACK, після чого сервер переходить у стан SYN_RECV.

Третє рукостискання: Клієнт отримує пакет SYN+ACK від сервера і надсилає пакет підтвердження ACK (ack=k+1) на сервер. Після трьох рукостискань клієнт і сервер починають передавати дані.


Якщо користувач ініціює запит на підключення до сервера, щоб потиснути руку вдруге, і не відповідає серверу, сервер продовжує чекати підтвердження користувача. Отже, ми робимо наступні зміни безпосередньо з SYN-з'єднання:

Перевірте стандартну конфігурацію SYN у Linux:

[root@web ~]# sysctl -a | GREP _syn

net.ipv4.tcp_max_syn_backlog = 1024

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog — довжина черги SYN, і збільшення її довжини може вмістити більше мережевих з'єднань, які чекають на підключення. tcp_syncookies — це перемикач для увімкнення функції cookie SYN, яка може запобігти частковим атакам SYN. tcp_synack_retries і tcp_syn_retries визначають кількість повторних з'єднань для SYN і зменшують параметри за замовчуванням, щоб максимально контролювати кількість SYN-з'єднань.

Нижче наведені параметри, які я змінив і які можна коригувати відповідно до реальної ситуації мого сервера:

[root@web ~]# більше /etc/rc.d/rc.local

#!/bin/sh

# Цей скрип{фільтр}т буде виконаний *після* всіх інших init scrip{filter}ts.

# Можеш додати сюди свої ініціалізаторні матеріали, якщо ні

# хочу зробити повний стиль Sys V init.

дотик /var/lock/subsys/local

ulimit -HSn 65535

/usr/local/apache2/bin/apachectl start

#####

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.tcp_synack_retries=3

sysctl -w net.ipv4.tcp_syn_retries=3

Щоб конфігурація набула чинності одразу без перезавантаження сервера, її можна виконати

#sysctl -w net.ipv4.tcp_max_syn_backlog=2048

#sysctl -w net.ipv4.tcp_syncookies=1

#sysctl -w net.ipv4.tcp_synack_retries=3

#sysctl -w net.ipv4.tcp_syn_retries=3

Деяким людям подобається використовувати списки контролю доступу, щоб запобігти SYN-атакам, що певною мірою уповільнює SYN-атаки:

Атака син-флудом

#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ПРИЙНЯТИ

--limit 1/s обмежує кількість syn concurrency до 1 разу на секунду

Антипортове сканування

# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Пінг смерті

# iptables -A FORWARD -p icmp --icmp-тип echo-request -m limit --limit 1/s -j ПРИЙНЯТИ

#>iptables-save >/etc/sysconfig/iptables

Щоб подивитися, #iptables -L

ПРИЙНЯТИ tcp — будь-де і будь-де tcp-прапорці: FIN,SYN,RST,ACK/SYN обмеження: в середньому 1/сек burst 5

ACCEPT tcp — будь-де і будь-де tcp-прапорці: FIN,SYN,RST,ACK/RST обмеження: в середньому 1/сек burst 5

ПРИЙНЯТИ ICMP — будь-де і будь-де, обмеження запиту на ехо-запит ICMP: середній показник 1/сек 5

Перевірте з'єднання Syn ще раз:

[root@web ~]# netstat -an | grep SYN | awk '{друк $5}' | awk -F: '{print $1}' | сортувати | uniq -c | sort -nr | більше

     20 10.92.10.220

      1 125.43.36.199

Очевидно, кількість SYN-з'єднань зменшилася.






Попередній:"Вибачте, ви не встановлюєте справжній додаток, інсталятор не може продовжувати виконувати обхідний шлях
Наступний:SC Create створює системний сервіс Windows
Опубліковано 13.12.2015 10:53:04 |
Який потужний вигляд
Опубліковано 14.12.2015 15:55:43 |
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com