A
Защищаться даже от небольших DDoS-атак при помощи PHP-скриптов крайне неэффективно. Относительно эффективную защиту можно обеспечить, используя shell, однако постоянное использование этих скриптов снизит производительность системы.
ddos.conf - файл с настройками для скрипта
ignore.ip.list - в этом файле указываем список IP - исключений. Можно добавить туда свой IP адрес.
ddos.sh - антиддос скрипт
Для активации скрипта вам необходимо изменить права доступа к ssh-файлу, установив значение 755 (chmod 755 - каждый пользователь имеет право читать и запускать файл на исполнение; владелец может редактировать). Если, при этом, выполнить команду
"/usr/local/ddos/ddos.sh --cron > /dev/null 2>&1", то скрипт будет запускаться автоматически (с интервалом в 1 минуту) при помощи крона (служба, отвечающая за автоматическое выполнение отложенных задач).
Вышеупомянутый скрипт отслеживает количество соединений с сервером, выполняемых
с одного IP-адреса. Если число соединений превышает значение, указанное в файле
ddos.conf, скрипт банит такой IP-адрес, закрывая доступ к серверу посредством iptables.
Один из минусов вышеописанного способа защиты от DDoS-атак состоит в том, что он
подходит лишь для выделенных или же виртуальных выделенных серверов, так как на
обычном хостинге менять настройки подобным образом нельзя.
В любом случае данный способ защиты от DDoS-атак далеко не панацея. При относительно серьёзной DDoS-атаке этот способ, в лучшем случае, позволит лишь спасти ваш сервер от «смерти». Кроме того, если посредством сервера, который вы хотите защитить, предоставляются какие либо услуги, например, редирект с другого сервера, с использованием директивы proxy_pass, вам необходимо добавить IP-адреса этого сервера в список исключений или же активировать скрипт лишь при выявлении DDoS-атаки.
Оптимальным решением проблемы может стать использование аппаратного фаервола (межсетевой экран), который бы блокировал отдельные IP-адреса, число подключений с которых превышает заданное значение.
Если у вас есть доступ к iptables, и вы не планируете работать в китайском или корейском сегменте сети Интернет, то можно заблокировать большинство китайских/корейских IP-адресов, используя правила, изложенные на сайте okean.com.
Практика показывает, что подобные меры снижают количество атак и усложняют жизнь кибершпионам.
ddos.conf - файл с настройками для скрипта
Код:
##### Пути к скриптам
PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"
CRON="/etc/cron.d/ddos.cron"
APF="/etc/apf/apf"
IPT="/sbin/iptables"
##### указываем время как часто будет запускаться скрипт.
##### чем чаще он будет запускаться тем сильнее нагрузка на процессор, поэтому, если ддос-атака прекратилась, скрипт надо отключать.
FREQ=1
##### Предел подключений для айпи, то что больше этого предела - заносится в бан-лист.
NO_OF_CONNECTIONS=150
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=1
##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="root"
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600
Код:
127.0.0.1
ddos.sh - антиддос скрипт
Код:
#!/bin/sh
##############################################################################
# DDoS-Deflate version 0.6 Author: Zaf <[email protected]> #
##############################################################################
# This program is distributed under the "Artistic License" Agreement #
# #
# The LICENSE file is located in the same directory as this program. Please #
# read the LICENSE file before you make copies or distribute this program #
##############################################################################
load_conf()
{
CONF="/usr/local/ddos/ddos.conf"
if [ -f "$CONF" ] && [ ! "$CONF" == "" ]; then
source $CONF
else
head
echo "\$CONF not found."
exit 1
fi
}
head()
{
echo "DDoS-Deflate version 0.6"
echo "Copyright (C) 2005, Zaf <[email protected]>"
echo
}
showhelp()
{
head
echo 'Usage: ddos.sh [OPTIONS] [N]'
echo 'N : number of tcp/udp connections (default 150)'
echo 'OPTIONS:'
echo '-h | --help: Show this help screen'
echo '-c | --cron: Create cron job to run this script regularly (default 1 mins)'
echo '-k | --kill: Block the offending ip making more than N connections'
}
unbanip()
{
UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`
TMP_FILE=`mktemp /tmp/unban.XXXXXXXX`
UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX`
echo '#!/bin/sh' > $UNBAN_SCRIPT
echo "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT
if [ $APF_BAN -eq 1 ]; then
while read line; do
echo "$APF -u $line" >> $UNBAN_SCRIPT
echo $line >> $UNBAN_IP_LIST
done < $BANNED_IP_LIST
else
while read line; do
echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT
echo $line >> $UNBAN_IP_LIST
done < $BANNED_IP_LIST
fi
echo "grep -v --file=$UNBAN_IP_LIST $IGNORE_IP_LIST > $TMP_FILE" >> $UNBAN_SCRIPT
echo "mv $TMP_FILE $IGNORE_IP_LIST" >> $UNBAN_SCRIPT
echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT
echo "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPT
echo "rm -f $TMP_FILE" >> $UNBAN_SCRIPT
. $UNBAN_SCRIPT &
}
add_to_cron()
{
rm -f $CRON
sleep 1
service crond restart
sleep 1
echo "SHELL=/bin/sh" > $CRON
if [ $FREQ -le 2 ]; then
echo "0-59/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
else
let "START_MINUTE = $RANDOM % ($FREQ - 1)"
let "START_MINUTE = $START_MINUTE + 1"
let "END_MINUTE = 60 - $FREQ + $START_MINUTE"
echo "$START_MINUTE-$END_MINUTE/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
fi
service crond restart
}
load_conf
while [ $1 ]; do
case $1 in
'-h' | '--help' | '?' )
showhelp
exit
;;
'--cron' | '-c' )
add_to_cron
exit
;;
'--kill' | '-k' )
KILL=1
;;
*[0-9]* )
NO_OF_CONNECTIONS=$1
;;
* )
showhelp
exit
;;
esac
shift
done
TMP_PREFIX='/tmp/ddos'
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"
BANNED_IP_MAIL=`$TMP_FILE`
BANNED_IP_LIST=`$TMP_FILE`
echo "Banned the following ip addresses on `date`" > $BANNED_IP_MAIL
echo >> $BANNED_IP_MAIL
BAD_IP_LIST=`$TMP_FILE`
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
cat $BAD_IP_LIST
if [ $KILL -eq 1 ]; then
IP_BAN_NOW=0
while read line; do
CURR_LINE_CONN=$(echo $line | cut -d" " -f1)
CURR_LINE_IP=$(echo $line | cut -d" " -f2)
if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then
break
fi
IGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST`
if [ $IGNORE_BAN -ge 1 ]; then
continue
fi
IP_BAN_NOW=1
echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL
echo $CURR_LINE_IP >> $BANNED_IP_LIST
echo $CURR_LINE_IP >> $IGNORE_IP_LIST
if [ $APF_BAN -eq 1 ]; then
$APF -d $CURR_LINE_IP
else
$IPT -I INPUT -s $CURR_LINE_IP -j DROP
fi
done < $BAD_IP_LIST
if [ $IP_BAN_NOW -eq 1 ]; then
dt=`date`
if [ $EMAIL_TO != "" ]; then
cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO
fi
unbanip
fi
fi
rm -f $TMP_PREFIX.*
"/usr/local/ddos/ddos.sh --cron > /dev/null 2>&1", то скрипт будет запускаться автоматически (с интервалом в 1 минуту) при помощи крона (служба, отвечающая за автоматическое выполнение отложенных задач).
Вышеупомянутый скрипт отслеживает количество соединений с сервером, выполняемых
с одного IP-адреса. Если число соединений превышает значение, указанное в файле
ddos.conf, скрипт банит такой IP-адрес, закрывая доступ к серверу посредством iptables.
Один из минусов вышеописанного способа защиты от DDoS-атак состоит в том, что он
подходит лишь для выделенных или же виртуальных выделенных серверов, так как на
обычном хостинге менять настройки подобным образом нельзя.
В любом случае данный способ защиты от DDoS-атак далеко не панацея. При относительно серьёзной DDoS-атаке этот способ, в лучшем случае, позволит лишь спасти ваш сервер от «смерти». Кроме того, если посредством сервера, который вы хотите защитить, предоставляются какие либо услуги, например, редирект с другого сервера, с использованием директивы proxy_pass, вам необходимо добавить IP-адреса этого сервера в список исключений или же активировать скрипт лишь при выявлении DDoS-атаки.
Оптимальным решением проблемы может стать использование аппаратного фаервола (межсетевой экран), который бы блокировал отдельные IP-адреса, число подключений с которых превышает заданное значение.
Если у вас есть доступ к iptables, и вы не планируете работать в китайском или корейском сегменте сети Интернет, то можно заблокировать большинство китайских/корейских IP-адресов, используя правила, изложенные на сайте okean.com.
Практика показывает, что подобные меры снижают количество атак и усложняют жизнь кибершпионам.