4dminkO 64 Опубликовано 19 августа, 2016 (изменено) Вот тут нашел данный скрипт 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 ? Может помочь ? Изменено 19 августа, 2016 пользователем 4dminkO Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FarmA 29 Опубликовано 19 августа, 2016 есть какой то хороший софт от защиты DDoS ? Может помочь ? есть какое то оборудование) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
4dminkO 64 Опубликовано 19 августа, 2016 (изменено) есть какое то оборудование) Вот нашел Radware Attack Mitigation System ) Всё есть ) Но мы такие люди что можем и какой то макинтош сделать ) Изменено 19 августа, 2016 пользователем 4dminkO Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FarmA 29 Опубликовано 19 августа, 2016 Всё есть ) Но мы такие люди что можем и какой то макинтош сделать ) есть такое) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DupleX13 3 Опубликовано 19 августа, 2016 Ещё такой вопрос, может глуповат, но всё же, какая разница между Ubuntu Desktop 16.04.1 и Ubuntu Server 16.04.1 [это из вариантов скачки Ubuntu 16.04.1 LTS ] думаю что данный релиз лучше чем Ubuntu 14.04.2 LTS Как писалось выше что в серверной нету интерфейс части, а в десктоп есть ? Не заморачивайся с 16й став 14.04,4,проверено временем Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
4dminkO 64 Опубликовано 19 августа, 2016 Не заморачивайся с 16й став 14.04,4,проверено временем хм... может Вы правы Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
chaeman 0 Опубликовано 8 октября, 2016 У нас около серверной было очень большое излучение что негативно влияло на работу серверов и мы просто экранировали все вот таким профнастилом http://www.budmagazin.com.ua/profnastil, и все стало нормально работать но с этой проблемой мы возились не один день Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты