开发者社区> 问答> 正文

我的阿里云主机安全设置历程

我是在2012年双十一期间购入首台阿里云主机的,当时买的时候是个很优惠的价格,买一年送了一年。迁入阿里云之前用过非常多的主机,包括国内和国外及香港的VPS,但我只用VPS,从不用普通虚拟主机。

迁入阿里云后起初最让我烦的就是备案,从一开始就非常抵触备案制度,认为没有任何意义,但在阿里云备案让我些许改变了看法,阿里云的备案可以说已经在为你做保姆的活了,每步都跟你说的非常清楚,我身处杭州市区,所以比较方便直接去阿里云总部当面核验,备案很快通过,一切都正常就绪了。

下面我主要说说我在阿里云使用期间被无数次攻击恶意扫描攻击后所做的安全设置,希望能帮到新手。我所遇到的主要安全问题并不是被挂马、DDOS或被黑之类,而主要是被恶意扫描到网站打不开。


问题一:自从迁入阿里云后的头半个月开始就先是被恶意扫描端口,主要是SSH端口恶意扫描,为了杜绝此类恶意端口扫描,我所采用的办法是直接把所有除80端口外的其它默认端口名统统改掉,这招非常管用,修改后云盾再也没报警过了。

问题二:除了被频繁恶意扫描端口外,我所遇到的最严重的威胁就是网站不存在的文件URL被恶意扫描,此类扫描的目的非常明确,就是要找网站的漏洞,其危害也最大。经常由于恶意扫描在出现大量404错误时,服务器CPU被拉高到100%,然后长时间下不来,就直接导致网站无法打开,也就彻底当机了。针对此类恶意扫描,我目前采用了以下方法基本杜绝了恶意扫描至当机的情况:

1、利用.htaccess文件拦截已知恶意客户端及本机不存在或不用的文件后缀,以及.htaccess文件的其它安全相关设置。

(1)、拦截恶意客户端方法:
SetEnvIfNoCase User-Agent .*special_archiver.* bad_bot
Order Allow,Deny
Allow from All
Deny from env=bad_bot

(2)、拦截不存在的文件后缀方法:
<FilesMatch ".(.html|.htm|.zip|.rar|.exe|.shtml|.asp|.net)$">
Order Allow,Deny
Deny from all
</FilesMatch>


(3)、.htaccess文件自身保护:
<Files .htaccess>
order allow,deny
deny from all
</Files>

2、启用iptables防火墙拦截恶意IP。

(1)、iptables拦截单个IP方法:
iptables -I INPUT -s 211.1.193.19 -j DROP

(2)、iptables拦截单个IP段方法:
iptables -I INPUT -s 173.199.0.0/16 -j DROP

(3)、iptables拦截整个IP段方法:
iptables -I INPUT -s 211.0.0.0/8 -j DROP

3、利用fail2ban拦截大部分的恶意访问。

(1)、多个404错误后自动调用iptables拦截恶意IP方法:
在jail.conf配置文件添加如下代码,以下代码的含义是当一个IP在60秒内有2次404访问即屏蔽一小时。
# kill on 404s to prevent probing

[apache-404]
enabled = true
port = http,https
filter = apache-404
action = sendmail-whois[name=404, dest=gchiacchieri+ fail2ban@gmail.com, sender=glen@bowser]
logpath = /var/log/apache*/other_vhosts_access.log
bantime = 3600
findtime = 60
maxretry = 2

(2)、调用iptables拦截恶意php fopen请求:
在jail.conf配置文件添加如下代码,以下代码的含义是当一个IP在60秒内有1次php fopen访问即屏蔽一小时。
[php-url-fopen]

enabled = false
port    = http,https
filter  = php-url-fopen
action   = iptables-allports[name=php-url-fopen]
logpath = /var/log/virtualmin/*_access_log
bantime = 3600
findtime = 60
maxretry = 1

(3)、拦截恶意HEAD请求:
在jail.conf配置文件添加如下代码,以下代码的含义是当一个IP在30秒内有3次以HEAD形式访问即屏蔽一小时。
[http-head-dos]
enabled = true
port = http,https
filter = http-head-dos
action = iptables-allports[name=http-head-dos]
logpath = /var/log/virtualmin/*_access_log
bantime = 3600
findtime = 30
maxretry = 3

这里就不对fail2ban的配置展开说明了,可以自行上网搜索相关介绍。fail2ban的功能极其强大,我建议所有云主机用户一定要正确掌握使用它来拦截大量的恶意访问行为,以保障自身网站的正常访问,它甚至可以拦截DDOS攻击。

4、服务器及网站文件基本安全设置。

(1)、关闭一切你不需要的功能,并关闭不需要功能随机启动,这不仅可以提高安全性,还可以减少服务器内存等资源的开销。
(2)、修改默认root及MYSQL超级管理员名。
(3)、修改服务器上网站文件权限,慎用777权限,一般755权限就可以有读写权限了。网站根目录权限尤其重要,一般644就可以。
(4)、apache配置文件添加匹配常见恶意扫描文件名关键词,只有发起对包含已配置的拦截关键词文件名访问就可以直接给予403禁止访问拦截。这个虽然是个简单技术,但非常管用。因为有很多扫描都是针对特定开源程序下文件名进行的,例如DEDECMS下的PLUS目录,对这个的恶意扫描是最多的。你可以在服务器端拦截带有所有PLUS关键词的URL访问。具体配置方法如下:
在httpd.conf文件中添加如下代码可以拦截常见的一些恶意扫描:
<LocationMatch "/(plus|filemanager|member|statics|data|templates|phppath|text-base|annonces|dede|sfupdate|base|cert|streamrotator|MSOffice|_vti_bin|backup|core|scripts|components|manager|twentytwelve|administrator|install|forum|forums|cgi-bin|akismet|blog|utility|humans|passwd)">
  Order Allow,Deny
Deny from all
</LocationMatch>

我曾经被一个叫tBaiduspider的恶意扫描客户端扫描到当机N次,可恶至极,在此特别提醒大家一定要经常查看你的服务器日志,及时将恶意客户端或蜘蛛加入拦截。以上是目前我对自己的云主机常见的安全问题所采取的主要防御措施,希望能帮到更多新手!另外,也借此表扬下阿里云的技术客服,每次遇到问题,只要发起工单,阿里云客服总能很快地协助解决,一般都在20分钟内就能解决,非常感谢他们在一年多的时间内给予的所有帮助!

展开
收起
bailimei 2014-06-06 12:15:30 15730 0
2 条回答
写回答
取消 提交回答
  • 您的帖子很精彩!希望很快能再分享您的下一帖!
    2014-07-01 22:45:06
    赞同 展开评论 打赏
  • Re我的阿里云主机安全设置历程
    2014-06-06 15:28:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
百度外卖从 IDC 到云端服务迁移历程 立即下载
百度外卖从IDC到云端服务迁移历程 立即下载
阿里云栖开发者沙龙PHP技术专场-静态扫描为你的项目上线保驾护航-周梦康 立即下载