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

2010年12月10日 6579 字数 51380 阅读 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处理静态的能力是无与伦比的,如果只是简单的判断分发,就可以解决掉很多攻击。

小夜博客仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决。

已有 44 条评论

  1. CXM CXM

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

    1. 小夜 小夜

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

  2. change change

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

    1. 小夜 小夜

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

  3. change change

    DDoS deflate支持设置SMTP发信?

    1. 小夜 小夜

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

    2. change change

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

    3. 小夜 小夜

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

    4. change change

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

  4. ty ty

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

    1. 小夜 小夜

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

  5. xinger.tk xinger.tk

    我非正常关闭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有什么区别么?

    1. 剑书 剑书

      效果一样的

  9. vpsge vpsge

    很全很重要。

  10. deardongdong deardongdong

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

    1. 小夜 小夜

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

  11. deardongdong deardongdong

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

    1. 小夜 小夜

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

    2. deardongdong deardongdong

      我最先接触的是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. ca123456 ca123456

    求助小夜,我按照您的图示禁止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. IT乐吧 IT乐吧

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

评论已关闭