linux服务器并webbench攻击解决方案:封锁攻击者ip
首先我📒来说一下这个🚻被攻击的【de】网站😨的【de】🤪大概部【dà gài bù】署状况【shǔ zhuàng kuàng】.这个网📒站主要是🥃nginx+mysql+php,有两台【yǒu liǎng tái】服务【fú wù】器分别放【fèn bié fàng】了🥫web和数据🎦库【kù】,web只对外【zhī duì wài】开启了🥫80端口操作系统是🥃centos,而数据库【kù】服务【fú wù】器则在内网,攻击者的手段【de shǒu duàn】🔹其实很💙简单,用webbench网站压【wǎng zhàn yā】🚋力测试【lì cè shì】工具发送大量的【de】🤪请求到服务【fú wù】😻器,之前的【de】🤪时候发【shí hòu fā】送每一个请求之后数👭据库【kù】就会相应,然后读【rán hòu dú】🌑取内容🔛最终显【zuì zhōng xiǎn】示,造成数据库和【jù kù hé】web之间大🐳量的【de】🤪交换数据,甚至导致mysql达到连🤛接数上【jiē shù shàng】🤠限【xiàn】,请求被🦓拒绝,而且攻【ér qiě gōng】击者时【jī zhě shí】🍪间挺多🐵的【de】🤪,他不停【tā bú tíng】📒地换浮动【dòng】ip,因此直【yīn cǐ zhí】接用防火墙封锁【suǒ】ip没意义.
刚开始我的做法【de zuò fǎ】是➗,用【yòng】php取得攻击者的agent头,判断是【pàn duàn shì】不是webbench来【lái】访👪,如果是【rú guǒ shì】🔛就die掉,不在请💳求数据库,确实挺🔗有效【yǒu xiào】,数据库不会再超出限制了【zhì le】,但是对方频繁【fāng pín fán】的发送请求过来【lái】🔛,导致网【dǎo zhì wǎng】络带宽被严重🚸消耗🤘,看来【lái】🔛得想想其🍰他办法【tā bàn fǎ】,最终想【zuì zhōng xiǎng】到了一个🔍解决方法且【fǎ qiě】🚣实际测试发现可行【kě háng】,因此分享给大🌀家【jiā】,其实我的做法【de zuò fǎ】原理很简单【jiǎn dān】:用【yòng】php取得用【yòng】🎛户agent头判断【tóu pàn duàn】是否是webbench来【lái】🔛源【yuán】,如果是【rú guǒ shì】🔛的话就在服务【zài fú wù】器上写一个🔍shell文件【wén jiàn】🎞,这个文🎍件的内😛容就是🗺封锁🕔IP的规则【de guī zé】🔺,
然后再用🐖chmod函数修【hán shù xiū】改一下🏎这个文【zhè gè wén】件让其🧗可执行【háng】🈯,再用🐖cron服务读🐵取这个🍧文件执【wén jiàn zhí】🙋行【háng】🈯,把ip封锁掉,整个过【zhěng gè guò】🧜程全部【chéng quán bù】自动化【zì dòng huà】🔋完成不需要人💃为干预,另外在【lìng wài zài】封锁的时候给我发一封email通知我有个倒霉蛋被干掉了【gàn diào le】,这样就行【háng】🈯了.
具体实现代码如下:
IF(isSet($_SERVER['HTTP_USER_AGENT']) And Trim($_SERVER['HTTP_USER_AGENT'])!='') {
$_SERVER['HTTP_USER_AGENT']=StrToLower($_SERVER['HTTP_USER_AGENT']);
IF(StriStr($_SERVER['HTTP_USER_AGENT'],'webbench')!==False) {
$p='/home/www/webbench.sh';
$_SERVER['REMOTE_ADDR']=isSet($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknow';
<span style="color: #ff0000;">File_Put_Contents($p,"#!/bin/bash\niptables -I INPUT -s {$_SERVER['REMOTE_ADDR']} -j DROP;\n",LOCK_EX);
</span> Chmod($p,0755);
chown($p,'www');
<span style="color: #ff0000;">Function sMail($to,$tit,$msg) {
IF(Filter_var($to,FILTER_VALIDATE_EMAIL)==''){
throw new Exception('邮箱地【yóu xiāng dì】址错误🕣!');
}
$tit='=?UTF-8?B?'.Base64_Encode($tit).'?=';
$msg = str_replace("\n.","\n..",$msg); //Windows如果在🛬一行开🎺头发现🕣一个句号【hào】🎹则会被删掉,要避免【yào bì miǎn】此问题将单个句号【hào】🎹替换成【tì huàn chéng】两个句【liǎng gè jù】号【hào】🎹
Return Mail($to,$tit,$msg,'From:No-reply@adm.bossadm.com.tw'."\n".'Content-Type:text/html;charset=utf-8');
}
sMail('see7di@gmail.com','【WebBench又开始【yòu kāi shǐ】了💌t】!',date('Y-m-d H:i:s',time())." {$_SERVER['REMOTE_ADDR']}");</span>
Header('Location:http://127.0.0.1');
Die();
}
}
后来我【hòu lái wǒ】又做了【yòu zuò le】🛬一次调🤵整【zhěng】,把发【fā】☕email的部份【de bù fèn】写入了📏shell文件内,不再用php发【fā】☕email,因為那会灌爆你的信箱,把上边😀的代码修改成【xiū gǎi chéng】🛥:
IF(isSet($_SERVER['HTTP_USER_AGENT']) And Trim($_SERVER['HTTP_USER_AGENT'])!='') {
$_SERVER['HTTP_USER_AGENT']=StrToLower($_SERVER['HTTP_USER_AGENT']);
IF(StriStr($_SERVER['HTTP_USER_AGENT'],'webbench')!==False) {
$p='/home/www/webbench.sh';
$_SERVER['REMOTE_ADDR']=isSet($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknow';
File_Put_Contents($p,"#!/bin/bash\niptables -I INPUT -s {$_SERVER['REMOTE_ADDR']} -j DROP;\necho \"{$_SERVER['REMOTE_ADDR']} - `date`\" | mail -s \"WebBench-zbbingyang.com\" see7di@gmail.com\n",LOCK_EX);
Chmod($p,0755);
chown($p,'www');
Header('Location:http://127.0.0.1');
Die();
}
}
关键词:linux服务器
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0