linux下防DDOS攻击软件及使用方法详解
互联网如同现实社会【shí shè huì】一样充满钩心🛺斗角【dòu jiǎo】🚕,网站被🍀DDOS也成为站长最【zhàn zhǎng zuì】头疼的【tóu téng de】事【shì】🤺。在没有硬防的🎉情况下【qíng kuàng xià】,寻找软😎件代替是最直接的方法🌐,比如用🌦 iptables,但是【dàn shì】iptables不能在自动屏蔽【dòng píng bì】,只能手动屏蔽【dòng píng bì】。
一、什么是DDOS攻击?
DDoS也就是分布式拒绝服务攻击【gōng jī】😝。它使用【tā shǐ yòng】🖥与普通【yǔ pǔ tōng】的拒绝服务攻击【gōng jī】😝同样的方法🔏,但是发【dàn shì fā】📋起攻击【gōng jī】📠的源是【de yuán shì】多个。通常攻击【gōng jī】📠者使用下载的【xià zǎi de】工具渗透无保【tòu wú bǎo】护的🤾主机🍈,当获得该主机【gāi zhǔ jī】🍈的适当👲的访问权限后,攻击【gōng jī】📠者在主机💛中安装📨软件的【ruǎn jiàn de】服务或【fú wù huò】进程(以下简侈怔理【chǐ zhēng lǐ】🌹)。这些代理保持睡眠状【shuì mián zhuàng】态🏆,直到从它们的🥊主控端得到指令🗃,对指定的目标【de mù biāo】发起拒【fā qǐ jù】绝服务攻击【gōng jī】😝。
二、如何确认自己受到DDOS攻击?
在系统上执行:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
执行后,将会显示服务器上所有的每个【měi gè】IP多少个👊连接数。
以下是【yǐ xià shì】🏒我自己🚋用【yòng】VPS测试的【cè shì de】🐙结果【jié guǒ】:
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.132
1 174.129.237.157
1 58.60.118.142
1 Address
1 servers)
2 118.26.131.78
3 123.125.1.202
3 220.248.43.119
4 117.36.231.253
4 119.162.46.124
6 219.140.232.128
8 220.181.61.31
2311 67.215.242.196
每个【měi gè】IP几个【jǐ gè】、十几个【jǐ gè】🏁或几十【huò jǐ shí】🧠个连接🔣数都还🤪算比较正常,如果像上面成百上千【bǎi shàng qiān】肯定就不正常【bú zhèng cháng】😽了。
三、防范DDOS攻击的方法:
一些常【yī xiē cháng】🗺用的防DDOS攻击的【gōng jī de】方法🖖,罗列如下:
1.增加🚫硬件防💉火墙【huǒ qiáng】和增加🚫硬件设备来承📑载和抵御DDOS攻击【gōng jī】🕗,最基本的方法【de fāng fǎ】,但成本比较高【bǐ jiào gāo】。
2.修改【xiū gǎi】SYN设置抵御【yù】🧞SYN攻击:
SYN攻击是【gōng jī shì】利用😝TCP/IP协议【xié yì】3次握手【cì wò shǒu】的原理🚰,发送大量的建立连接🍧的网络【de wǎng luò】包,但不实【dàn bú shí】际建立👧连接,最终导致被攻【zhì bèi gōng】🎨击服务器的网络【de wǎng luò】队列被占满,无法被〰正常用🥕户访问。
Linux内核提【nèi hé tí】供了若干🚖SYN相关设【xiàng guān shè】👃置,使用命【shǐ yòng mìng】令⏮:
sysctl -a | grep syn
看到:
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog是【shì】🧜SYN队列的长度🚮,tcp_syncookies是【shì】🧜一个开👆关,是【shì】🧜否打开👆SYN Cookie
功能【gōng néng】,该功能【gōng néng】可以防止部分✳SYN攻击。tcp_synack_retries和【hé】tcp_syn_retries定义【dìng yì】SYN
的重试【de chóng shì】次数📟。
加大⛴SYN队列长度可以容纳更🤬多等待🏳连接的网络连【wǎng luò lián】接数【jiē shù】,打开SYN Cookie功能可【gōng néng kě】以阻止【yǐ zǔ zhǐ】部分🎽
SYN攻击【gōng jī】,降低重🛰试次数也有一【yě yǒu yī】🐞定效果。
调整上述设置【shù shè zhì】🚸的方法是🈹:
增加SYN队列长【duì liè zhǎng】度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打开【dǎ kāi】🤮SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重【jiàng dī chóng】试次数🕰:
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3
为了系统重启🐨动时保持上述配置,可将上【kě jiāng shàng】述命令🚡加入到【jiā rù dào】🚗/etc/rc.d/rc.local文件中【wén jiàn zhōng】。
3.安装🚝iptables对特定ip进行屏【jìn háng píng】🤦蔽【bì】。
A.安装【ān zhuāng】iptables和系统【hé xì tǒng】内核版本对应的内核【de nèi hé】模块🌑kernel-smp-modules-connlimit
B. 配置相😛应的iptables规则
示例如🈺下【xià】🐃:
(1)控制单🐊个【gè】📠IP的最大【de zuì dà】📢并发连🔀接数【shù】
iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT
#允许单【yǔn xǔ dān】个【gè】📠IP的最大【de zuì dà】📢连接数【shù】为【wéi】 30
(2)控制单🐊个【gè】📠IP在😗一定的时间(比如【bǐ rú】🕸60秒)内允许新建立【xīn jiàn lì】🌀的连接数【shù】
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \
–hitcount 30 -j REJECT
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT
#单个【dān gè】📠IP在😗60秒内只允许最多新建【duō xīn jiàn】30个【gè】连接🤤
(3)用iptables屏蔽IP
iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT
指定端【zhǐ dìng duān】口的参数【shù】🌇是【shì】--dport 80;多了🔙--syn参数【shù】🌇,可以自动检测【dòng jiǎn cè】sync攻击
(4)使用🤚iptables禁止ping:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable
(5)允许某🕡ip连接【lián jiē】
iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT
C. 验证🗜
(1)工具:flood_connect.c(用来模【yòng lái mó】拟攻击)
(2)查看效【chá kàn xiào】果🎥:
使用🤚
watch ‘netstat -an | grep:21 | \ grep< 模拟攻【nǐ gōng】🐡击客户【jī kè hù】🕐机的IP>| wc -l’
实时查【shí shí chá】🚯看模拟攻【nǐ gōng】🐡击客户【jī kè hù】🕐机建立起来🦌的连接数,
使用🕴
watch ‘iptables -L -n -v | \grep< 模拟攻【nǐ gōng】🐡击客户【jī kè hù】🕐机的IP>’
查看模【chá kàn mó】拟攻【nǐ gōng】🐡击客户【jī kè hù】🕐机被【jī bèi】 DROP 的数据包【bāo】🌳数。
D.注意【zhù yì】⛱
为了增强iptables防止CC攻击的🚋能力【néng lì】,最好调😬整一下ipt_recent的参数【de cān shù】✅如下【rú xià】:
#cat/etc/modprobe.conf
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
#记录1000个IP地址,每个地址记录60个数据【gè shù jù】包【bāo】🌳
#modprobe ipt_recent
E.可编写【kě biān xiě】脚本自【jiǎo běn zì】动提娶攻击🎞ip然后自动屏蔽🦏:
*/2 * * * * /usr/local/nginx/var/log/drop.sh
#!/bin/sh
cd /usr/local/nginx/var/log
tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
这🏇shell 每几分【měi jǐ fèn】钟执行一次【yī cì】,就可自🐂动屏蔽【dòng píng bì】那些不正常🌵IP,相信大😝家都看【jiā dōu kàn】的懂,下面是针对连接数屏【jiē shù píng】🚸蔽代码
#!/bin/sh
/bin/netstat -ant |grep 80 |awk 'print $5}' |awk -F ' |sort |uniq -c |sort -rn |grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
说下,grep -v -E '192.168|127.0' 也就是【yě jiù shì】😗排除内网【wǎng】IP,免得把自己给【zì jǐ gěi】屏蔽了🃏,当然还可以加些自己【xiē zì jǐ】😍的🚶IP。
4.安装【ān zhuāng】DDoS deflate自动抵御ⓂDDOS攻击【gōng jī】💺:
DDoS deflate是一款♟免费的【de】用来防御和减轻【qīng】🏅DDoS攻击的【gōng jī de】脚本【jiǎo běn】。它通过netstat监测跟🚤踪创建大量网络连接的【de】IP地址,在检测【zài jiǎn cè】到某个🚋结点超【jié diǎn chāo】🍠过预设的【de】限制时,该程序🌽会通过📙APF或⬜IPTABLES禁止或【jìn zhǐ huò】⬜阻挡这【zǔ dǎng zhè】些IP.
DDoS deflate官方网【guān fāng wǎng】站🍨:
(1)安装【ān zhuāng】🏠DDoS deflate
wget
chmod 0700 install.sh //添加权📽限【xiàn】
./install.sh //执行
(2)配置【pèi zhì】🉑DDoS deflate
下【xià】📠面是【miàn shì】DDoS deflate的默认配置位【pèi zhì wèi】于🕟/usr/local/ddos/ddos.conf ,内容如下【xià】📠:
##### Paths of the script and other files
PROGDIR=”/usr/local/ddos”
PROG=”/usr/local/ddos/ddos.sh”
IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白【dì zhǐ bái】🎣名单【míng dān】
CRON=”/etc/cron.d/ddos.cron” //定时执行程序🧠
APF=”/etc/apf/apf”
IPT=”/sbin/iptables”
##### frequency in minutes for running the script
##### Caution: Every time this setting is changed run the script with –cron
##### option so that the new frequency takes effect
FREQ=1 //检查时间间隔,默认【mò rèn】➖1分钟【fèn zhōng】⛺
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150 //最大连🍶接数,超过这【chāo guò zhè】🍟个数IP就会被【jiù huì bèi】屏蔽【píng bì】,一般默认即可👶
##### 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 //使用【yòng】💥APF还是iptables,推荐使【tuī jiàn shǐ】用【yòng】💥iptables
##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1 //是否屏🎍蔽【bì】IP,默认即可【kě】🍩
#### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO=”root” //当IP被屏蔽【bèi píng bì】🗑时给指✅定邮箱发送邮件,推荐使【tuī jiàn shǐ】用【yòng】,换成自己的邮【jǐ de yóu】🎮箱即可🔘
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600 //禁用🏿IP时间【shí jiān】,默认600秒【miǎo】,可根据🛡情况调【qíng kuàng diào】😽整
用户可【yòng hù kě】根据给【gēn jù gěi】默认配置文件💎加上的注释提【zhù shì tí】🌛示内容,修岗🕧?置文件💎。
喜欢折🦈腾的可以用【yǐ yòng】Web压力测🎾试软件🏩(《Web服务器Ⓜ性能/压力测🎾试工具http_load、webbench、ab、Siege使用教【shǐ yòng jiāo】程【chéng】🛡》)测试一🧀下效果【xià xiào guǒ】,这东西【zhè dōng xī】只能防御小流【yù xiǎo liú】量的攻击了,聊胜于无吧。
5.APACHE上安装【shàng ān zhuāng】mod_evasive 组件增🕠强抵御力【lì】🔩
mod_evasive是一个🏖预防Apache 遭受【zāo shòu】🐤DDos 攻击的【gōng jī de】🛷模块,可以防🤩止同一【zhǐ tóng yī】个🏖IP 对相同URI 发【fā】
关键词:linux,DDOS攻击
阅读本文后您有什么感想? 已有 人给出评价!
- 1
- 1
- 1
- 1
- 1
- 1