Перейти к содержанию
Авторизация  
4dminkO

Есть свой сервер и есть вопросы

Рекомендуемые сообщения

Вот тут нашел данный скрипт http://linux-notes.org/zashhita-ot-ddos-s-iptables-gotovy-j-skript/            <~ не реклама 

Защита от DDoS с iptables, готовый скрипт
Надоели атаки на компьютер или на сервер, то я покажу готовый и хороший скрипт для решение DDoS атак на ваш сервер.

Сейчас я расскажу, про виды которые часто используются для защиты серверов или сайтов.

Защита на уровне PHP. Честно, не могу врубится в работу этой логики. То есть, нужно запретить доступ для ботов на этот уровень, чтобы не было огромной нагрузки. Не очень хорошее решение!
Защита на уровне Apache. Есть модуль mod_evasive, но толку от него тоже не сильно много, не больше чем от PHP!
Защита на уровне nginx. Самый оптимальный вариант для решение многих атак. Можно прокешировать все страницы и энжинкс будет отдавать страницы почти без нагрузки на процессор. Только канал будет нагружаться весьма прилично. Также можно настроить и использовать  limit_req.
Защита на уровне iptables. Это один из самых эффективных и надежных способов защиты вашего сервера от различных атак.
Для получения списка доступных модулей для IPTables, выполните:


# ls /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/
1
# ls /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/
Чтобы получить информацию о всех модулях:


# modinfo /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/*.ko
1
# modinfo /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/*.ko
Защита от атаки с использованием SYN flood.

Одна из распространенных DoS атак — это посылка  очень большого числа SYN пакетов к серверу.

Чтобы узнать о атаке SYN служит команда netstat, которая показывает список открытых подключений на сервере:


# netstat -n --tcp | grep SYN_RECV
1
# netstat -n --tcp | grep SYN_RECV
Так же, можно подсчитать их количество, выполнив:


# netstat -n --tcp | grep SYN_RECV | wc -l
1
# netstat -n --tcp | grep SYN_RECV | wc -l
Первое что необходимо сделать, так это установить опцию tcp_syncookies в значение 1, посмотреть можно так:


# cat /proc/sys/net/ipv4/tcp_syncookies
1
# cat /proc/sys/net/ipv4/tcp_syncookies
Следующим действием служит увеличения очереди открытых соединений — tcp_max_syn_backlog, например до (но сначала проверим сколько сейчас):


# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1
# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
Чтобы увеличить, выполните:


# echo "40000" > /proc/sys/net/ipv4/tcp_max_syn_backlog
1
# echo "40000" > /proc/sys/net/ipv4/tcp_max_syn_backlog
Так же, уменьшаем время ожидания соединения — это параметр tcp_synack_retries,но посмотрим сколько имеется на данный момент:


# cat /proc/sys/net/ipv4/tcp_synack_retries
1
# cat /proc/sys/net/ipv4/tcp_synack_retries
Уменьшим их до 1. Данный параметр говорит что будет ожидаться соединения около 9 секунд:


# echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
1
# echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
Уменьшаем параметр tcp_fin_timeout — который определяет время хранения сокета в состоянии FIN-WAIT-2 и после чего будет закрыт на локальной стороне (выводим сколько сейчас):


# cat /proc/sys/net/ipv4/tcp_fin_timeout
1
# cat /proc/sys/net/ipv4/tcp_fin_timeout
Изменим данный параметр и уменьшим его до 30:


# echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
1
# echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
Уменьшаем опцию tcp_keepalive_probes  — это число служит для передачи проб keepalive, по завершению, соединение будет считаться разорванным. Данный параметр имеет 9 проб по умолчанию. Чтобы посмотреть какое число имеет данный параметр, используйте:


# cat /proc/sys/net/ipv4/tcp_keepalive_probes
1
# cat /proc/sys/net/ipv4/tcp_keepalive_probes
Убавим его до 5:


# echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
1
# echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
Опция tcp_keepalive_intvl задает интервал передачи для проб и по умолчанию, имеет число 75 сек. Уменьшим данный параметр, но прежде убедимся что он уже не прописан оптимальным:


# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
1
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
Выставим его в 15:


# echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
1
# echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
Опция  netdev_max_backlog служит для указания максимального количества пакетов в очередь на обработку в случае чего, интерфейс будет получать пакеты быстрей чем ядро сможет обработать их. Данный параметр должен быть увеличен, но смотрим что имеется:


# cat /proc/sys/net/core/netdev_max_backlog
1
# cat /proc/sys/net/core/netdev_max_backlog
Увеличиваем его до 20к:


# echo "20000" > /proc/sys/net/core/netdev_max_backlog
1
# echo "20000" > /proc/sys/net/core/netdev_max_backlog
Выставляем оптимальное цисло для somaxconn который задает максимальное число всех открытых сокетов которые ждут соединения. Его нужно увеличить:


# cat /proc/sys/net/core/somaxconn
1
# cat /proc/sys/net/core/somaxconn
Увеличим:


# echo "20000" > /proc/sys/net/core/somaxconn
1
# echo "20000" > /proc/sys/net/core/somaxconn
Прописываем еще один не маловажный параметр:


# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
1
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
PS: Данные применения для опций ядра не сохраняются после перезагрузки ОС, то их нужно добавить  в /etc/rc.local:


# echo "20000" > /proc/sys/net/ipv4/tcp_max_syn_backlog
# echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
# echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
# echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
# echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo "20000" > /proc/sys/net/core/netdev_max_backlog
# echo "20000" > /proc/sys/net/core/somaxconn
1
2
3
4
5
6
7
# echo "20000" > /proc/sys/net/ipv4/tcp_max_syn_backlog
# echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
# echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
# echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
# echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo "20000" > /proc/sys/net/core/netdev_max_backlog
# echo "20000" > /proc/sys/net/core/somaxconn
После чего, нужно добавить ограничения в iptables:


# iptables -N syn_flood
# iptables -A INPUT -p tcp --syn -j syn_flood
# iptables -A syn_flood -m limit --limit 500/s --limit-burst 2000 -j RETURN
# iptables -A syn_flood -j DROP
1
2
3
4
# iptables -N syn_flood
# iptables -A INPUT -p tcp --syn -j syn_flood
# iptables -A syn_flood -m limit --limit 500/s --limit-burst 2000 -j RETURN
# iptables -A syn_flood -j DROP
В данных правилах, я задал определенное число для новых SYN пакетов ( 500 за сек), и если привысит ограничение 2000, то все новые новые пакеты будут заблокированы.
Добавляем в iptables еще полезные опции:


# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
Установить SYN и FIN:


# iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
Установить SYN и RST:


# iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
Установить FIN и RST:


# iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
Установить FIN, без ожидаемого сопутствующего ACK:


# iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
Установить PSH,без ожидаемого сопутствующего ACK:


# iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
Установить URG, без ожидаемого сопутствующего ACK:


# iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
1
# iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
Приведу скрипт, который нашел в интернете для зашиты от DDoS атак с использованием ipset. Почему именно я использую ipset а не iptables? Да все потому что, после блокировки больше чем 100 IP  адресов iptables начинает тормозить весь сервер.

PS: нужно установить пакет ipset. Если не знаете как, то можете воспользоваться инструкцией что ниже.

Установка IPset.

Для Redhat’s ОС:


# yum install ipset
1
# yum install ipset
Для Debian’s ОС:


# apt-get install ipset
1
# apt-get install ipset
После установки добавлем правило блокировки в iptables:


# iptables -I INPUT 1 -m set --set dos src -j DROP
1
# iptables -I INPUT 1 -m set --set dos src -j DROP
dos — это таблица из ipset.

Следующим шагом необходимо создать хеш для таблицы dos:


# ipset -N dos iphash
1
# ipset -N dos iphash
ВНИМАНИЕ! При необходимости можно заблокировать даже всю подсети, но для этого вместо iphash стоит использовать nethash.

После завершения  необходимо сохранить все правила iptables:


#/sbin/service iptables save
1
#/sbin/service iptables save
Собственно, все уже готово, за исключением скрипта который будет блокировать флуд на сервере.

Вы его можете прочитать и поглядеть тут, чтобы скачать себе на сервер выполните команду:


# wget http://linux-notes.org/wp-content/uploads/scripts/Anti_SYN_Flood_IPTables.sh
1
# wget http://linux-notes.org/wp-content/uploads/scripts/Anti_SYN_Flood_IPTables.sh
После чего, запускаем скачанный скрипт:


# bash Anti_SYN_Flood_IPTables.sh
1
# bash Anti_SYN_Flood_IPTables.sh
Стоит заметить, что целесообразно установить данный скрипт на выполнение в crontab на каждые 1-5 минут. Промежуток выберите сами. Если не знаете как, то можете воспользоваться моей инструкцией:

создать cron задание

Чтобы вывести все заблокированные IP адресы, выполняем команду:


# ipset -L | head
1
# ipset -L | head
Более подробно о ipset я расскажу в своей статье:

Установка ipset в Linux (centOS/Debian/Ubuntu)

Защита от DDos атаки

Атаку можно найти если выполнить команду:


# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1
# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n



 

Не поможет тебе linux, если будет хороший DDoS.
А он точно будет!

есть какой то хороший софт от защиты DDoS ?
 
Может помочь ?

Изменено пользователем 4dminkO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть какой то хороший софт от защиты DDoS ?

 

Может помочь ?

есть какое то оборудование)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть какое то оборудование)

Вот нашел Radware Attack Mitigation System )

Всё есть ) Но мы такие люди что можем и какой то макинтош сделать )

Изменено пользователем 4dminkO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё есть ) Но мы такие люди что можем и какой то макинтош сделать )

есть такое)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё такой вопрос, может глуповат, но всё же, какая разница между Ubuntu Desktop 16.04.1 и Ubuntu Server 16.04.1 [это из вариантов скачки 

Ubuntu 16.04.1 LTS ] думаю что данный релиз лучше чем Ubuntu 14.04.2 LTS

 

Как писалось выше что в серверной нету интерфейс части, а в десктоп есть ?

Не заморачивайся с 16й став 14.04,4,проверено временем

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не заморачивайся с 16й став 14.04,4,проверено временем

хм...

может Вы правы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У нас около серверной было очень большое излучение что негативно влияло на работу серверов и мы просто экранировали все вот таким профнастилом http://www.budmagazin.com.ua/profnastil, и все стало нормально работать но с этой проблемой мы возились не один день

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...