新手教程③ 常用安全设置 iftop查看当前流量 CC攻击防护

2010年12月10日19点21分 44 一键抢沙发得好礼 标签:SSH · Education · aliyun 广告图片

购买机器前 请先看用户评价 对于评价较差的商家 谨慎购买

 仍旧新手教程类,适合新手及才接触VPS的朋友们看一下,主要是关于VPS安全方面相关内容的,陆续更新:

  • 禁止ROOT登陆 保证安全性
  • 使用DDoS deflate简单防攻击
  • iftop Linux流量监控工具
  • 每日自动备份VPS到FTP空间
  • 升级LNMP的NGINX到最新版

 一、修改SSH端口

vi /etc/ssh/sshd_config

 找到其中的#Port 22(第13行),去掉#,修改成Port 3333

 使用如下命令,重启SSH服务,注:以后用新端口登陆。

service sshd restart

 二、禁止ROOT登陆

 先添加一个新帐号vpsmm,可以自定义:

useradd vpsmm

 给vpsmm帐号设置密码:

passwd vpsmm

 仍旧是修改/etc/ssh/sshd_config文件,第39行:#PermitRootLogin yes,去掉前面的#,并把yes改成no,然后,重启SSH服务。以后,先使用vpsmm登陆,再su root即可得到ROOT管理权限。

login as: vpsmm
vpsmm@ip password:*****
Last login: Tue Nov 22 14:39:58 2010 from 1.2.3.4
su root
Password:*********** #注这里输入ROOT的密码

 三、使用DDos deflate简单防落CC和DDOS攻击

 使用netstat命令,查看VPS当前链接确认是否受到攻击:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

 IP前面的数字,即为连接数,如果说正常网站,几十到一百都属于正常连接,但出现几百,或上千的就可以垦定这个IP与你的VPS之间可能存在可疑连接现象。

 可以使用iptables直接BAN了这个IP的永久访问:

iptables -A INPUT -s 12.34.56.78 -j DROP

 今天介绍给大家一种方法,是使用软件DDos deflate来自动检测并直接BAN掉的方法,首先我们要确认一下iptables服务状态,默认CENTOS就安装的,不看也行。

service iptables status

 安装DDos deflat:

wget http://www.inetbase.com/scripts/ddos/install.sh
chmod +x install.sh
./install.sh

 安装后需要修改/usr/local/ddos/ddos.conf,主要是APF_BAN=1要设置成0,因为要使用iptables来封某些可疑连接,注意EMAIL_TO="root",这样BAN哪个IP会有邮件提示:

##### 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地址白名单
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   //检查时间间隔,默认1分钟
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150     //最大连接数,超过这个数IP就会被屏蔽,一般默认即可
##### 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        //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。
##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1   //是否屏蔽IP,默认即可
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="root"   //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600    //禁用IP时间,默认600秒,可根据情况调整

 四、使用iftop查看详细网络状况

 安装IFTOP软件:

yum -y install flex byacc  libpcap ncurses ncurses-devel libpcap-devel
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make && make install

 安装后,使用iftop运行,查看网络情况。TX,发送流量;RX,接收流量;TOTAL,总流量;Cumm,运行iftop期间流量;peak,流量峰值;rates,分别代表2秒、10秒、40秒的平均流量。

 快捷键:h帮助,n切换显示IP主机名,s是否显示本机信息,d是否显示远端信息,N切换端口服务名称,b切换是否时数流量图形条。

 五、每日备份你的VPS上传到FTP空间

 脚本:https://www.vpsmm.com/soft/AutoBackupToFtp.sh详细使用说明

 六、升级LNMP中的NGINX到最新版

 现在最新版是0.8.53,如果以后出新版,只要更新版本号就可以,在SSH里运行:

wget http://www.nginx.org/download/nginx-0.8.53.tar.gz
tar zxvf nginx-0.8.53.tar.gz
cd nginx-0.8.53
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module  --with-http_sub_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cd objs/
cp nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx -t
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
/usr/local/nginx/sbin/nginx -v
cd ..
cd ..
rm -rf nginx-0.8.53
rm -rf nginx-0.8.53.tar.gz

 七、常用netstat命令:

 1.查看所有80端口的连接数

netstat -nat|grep -i "80"|wc -l

 2.对连接的IP按连接数量进行排序

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

 3.查看TCP连接状态

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

 4.查看80端口连接数最多的20个IP

netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A,i}' |sort -rn|head -n20

 5.用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20

 6.查找较多time_wait连接

netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

 7.找查较多的SYN连接

netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

 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

 nginx处理静态的能力是无与伦比的,如果只是简单的判断分发,就可以解决掉很多攻击。

广告图片

购买机器前 请先看用户评价 对于评价较差的商家 谨慎购买

真皮沙发少不了 抢沙发得32GU盘 只要你是第一个回帖评论用户 用发帖邮箱发送收货信息到 2919909342@qq.com邮箱领取 32G 小夜博客赠送的U盘
小夜QQ:2919909342 小夜QQ群:602757584(VPS交流) 小夜QQ群:53360732(老年闲聊)

已有 44 条评论

  1. CXM CXM

    3333端口不一定吧?可以是其他不和系统冲突的吧?

    1. 这个你随意,我乱打的。用啥端口都行,只要别脑残到用80就可以。

  2. 使用21这些端口可以吗?(没装FTP)
    还有为什么无法发信,我换了几个邮箱都无法发送.
    在PHP探针上查是可以发的.

    1. 端口随便用哈,哪个都行。我从来不用sendmail发信的,一般都是SMTP。

  3. DDoS deflate支持设置SMTP发信?

    1. 你说的DDoS deflate啊,你试一下收信的邮箱,我用的QQ企业邮。开始是进垃圾箱的,白名单以后。每封都能收到。

    2. 0 0,为什么我的企业邮箱一直收不到,是不是还有设置发件邮箱啊,
      我安装lnmp默认域名是设置的VPS的IP地址,
      有影响吗?

    3. 没准儿哦。改一下nginx.conf里面的默认域名试一下。我用的就是一个普通的域名。

    4. 已经改了,今天看看效果.

  4. ty ty

    小夜你好,我想问问,你禁止了ROOT登录以后,那上传文件什么的是通过什么来的啊?安装了FTP?

    1. 嗯,我装了pureftpd,用来上传和下载文件。

  5. 我非正常关闭vi 有些问题
    vi -r {your file name} 博主这个是什么作用
    rm .{your file name}.swp 这个文件呢
    生成的。wap 是不是和被编辑的文件在一个目录 我用sftp怎么看不到

  6. 秋上书 秋上书

    我禁用root远程登录 就没办法登陆sftp了呀 要开启root远程登录 vi那个文件 居然找不到 PermitRootLogin 这个选项了。。晕掉,咋办?有啥提议没?

    1. 仔细找,垦定有的。把那个前面加个#,然后,运行/etc/rc.d/init.d/sshd restart

  7. 醒醒 醒醒

    禁用root后sftp怎么用?

    1. ROOT禁用以后,就不能用SFTP了。

    2. nothing nothing

      那怎么能再用sftp呢,我上传网站都是用flashfxp上传的!不能用了,怎么上传下载啊

    3. 新建一个用户,给ROOT权限。或者,再用相反的方式,恢复ROOT登陆。

    4. nothing nothing

      我把PermitRootLogin no 改成yes,还是没用,重启了ssh没用

  8. nothing nothing

    service sshd restart 和 /etc/init.d/sshd restart有什么区别么?

  9. 很全很重要。

  10. 小夜姐姐,有没有打算写一个VPN的安装教程哟?

    1. 您好,接受您的建议。近期更新,关于openvz和xen搭建VPN的教程。
      其实很简单,大多一键包就可以。

  11. 关于Debian及Ubuntu系统的教程很少啊,这些新手教程多数是CentOS的哟?!

    1. 因为centos适合新手。等过了新手阶段,debian或centos用起来是一样的。

    2. 我最先接触的是Ubuntu然后Debian,现在都还没弄过CenTOS……

  12. 夜妹纸,想请教下如果我需要修改某目录的php执行权限,改怎么修改域名.conf文件,看到说改成:
    location ~* ^/(uploads|images|data)/.*.(php|php5|PHP|PHP5)$
    {
    deny all;
    }
    但是貌似没有效果,这个示例是修改三个文件夹的php执行权限,求指教~

    1. 小夜 小夜

      一般这样的都是用权限解决,例如666之类。

  13. 新手 新手

    PureFTPd 要给什么权限才可以修改/etc/ssh/sshd_config啊?

    1. 小夜 小夜

      你把sshd_config给个777权限就行,不过,仍旧建议在ssh下面,用命令:
      vi /etc/ssh/sshd_config 修改

  14. Dan Dan

    小夜,求助来了。
    刚按照上面的教程更改了port为3333。结果现在连接不上服务器了。

  15. 求助小夜,我按照您的图示禁止root修改登录名为pcdmm

    结果没有出来这一行Last login: Tue Nov 22 14:39:58 2010 from 1.2.3.4,直接显示Access denied了,现在root也没有办法登录了,怎么办呢

    1. 你登陆的时候,输入用户名pcdmm,再输入pcdmm的密码。登陆成功后,使用 su root 再输入 root 密码,来切换成root权限。

  16. 夜MM,介个端口可以随便改的吧?我上次改4444的时候直接挂掉了。o(╯□╰)o

  17. 请问按照教程的第二步 !禁止ROOT登陆!
    新建用户名newroot后禁用root账号登陆是指只限制shh登陆吗,如果禁用了那root还能用winscp登陆上去吗?
    如果不能那以后基本管理不了VPS了.比如shh用root登陆后执行/etc/ssh/sshd_config都提示权限不足了,只能用winscp来打开修改..
    还有如果错误把root限制了登陆还有其他方法可能重新让root登陆上吗?不能的话那可不是要重装系统了??

  18. 小夜粉丝 小夜粉丝

    小夜你好,为了防止网站被人采集,请问有没有限制每个IP浏览网页页数的代码,比如每个IP每天限制访问50页,超过了就只能第二天访问了,谢谢

    1. 你可以用NGINX+MEMCACHED+NGX_MEMC_MODULE来实现这个功能