听说twiki是一个很好的管理知识的工具,今天我们就来安装体验一下。 继续阅读Linux安装TWiki
月份:2012年12月
CentOS安装配置Apache Subversion
最近打算使用subversion管理自己的一键安装包,或者其它开源项目。因为是第一次开始使用subversion,所以记录下配置方法和使用方法。 继续阅读CentOS安装配置Apache Subversion
CentOS启用sudo
CentOS默认不启用sudo,且可以直接用超级管理员身份登录服务器。ubuntu这方面做得比较好,为了安全,减小误操作带来的损失,还是推荐启用sudo。 继续阅读CentOS启用sudo
OpenResty(nginx扩展)实现防cc攻击
本文介绍使用openresty来实现防cc攻击的功能。openresty官网http://openresty.org/cn/index.html。下面是防cc攻击的流程图。
根据流程图,我们知道防cc攻击主要包括两部分,一是限制请求速度,二是给用户发送js跳转代码进行验证请求是否合法。
一、安装依赖
centos:
- yum install readline-devel pcre-devel openssl-devel
ubuntu:
- apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl
二、luajit安装
- cd /tmp/
- git clone http://luajit.org/git/luajit-2.0.git
- cd luajit-2.0/
- make && make install
- ln -sf luajit-2.0.0-beta10 /usr/local/bin/luajit
- ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib/
三、openresty安装
- cd /tmp
- wget http://agentzh.org/misc/nginx/ngx_openresty-1.2.4.13.tar.gz
- tar xzf ngx_openresty-1.2.4.13.tar.gz
- cd ngx_openresty-1.2.4.13/
- ./configure –prefix=/usr/local/openresty –with-luajit
- make && make install
四、nginx配置
nginx.conf:
- http{
- [……]
- lua_shared_dict limit 10m;
- lua_shared_dict jsjump 10m;
- <pre><code>server {
- #lua_code_cache off;
- listen 80;
- server_name devops.webres.wang;
- location / {
- default_type text/html;
- content_by_lua_file "/usr/local/openresty/nginx/conf/lua";
- }
- location @cc {
- internal;
- root html;
- index index.html index.htm;
- }
- }
- </code></pre>
- }
/usr/local/openresty/nginx/conf/lua文件:
- local ip = ngx.var.binary_remote_addr
- local limit = ngx.shared.limit
- local req,_=limit:get(ip)
- if req then
- if req > 20 then
- ngx.exit(503)
- else
- limit:incr(ip,1)
- end
- else
- limit:set(ip,1,10)
- end
- local jsjump = ngx.shared.jsjump
- local uri = ngx.var.request_uri
- local jspara,flags=jsjump:get(ip)
- local args = ngx.req.get_uri_args()
- if jspara then
- if flags then
- ngx.exec("@cc")
- else
- local p_jskey=”
- if args["jskey"] and type(args["jskey"])==’table’ then
- p_jskey=args["jskey"][table.getn(args["jskey"])]
- else
- p_jskey=args["jskey"]
- end
- if p_jskey and p_jskey==tostring(jspara) then
- jsjump:set(ip,jspara,3600,1)
- ngx.exec("@cc")
- else
- local url=”
- if ngx.var.args then
- url=ngx.var.scheme.."://"..ngx.var.host..uri.."&jskey="..jspara
- else
- url=ngx.var.scheme.."://"..ngx.var.host..uri.."?jskey="..jspara
- end
- local jscode="<script>window.location.href=’"..url.."’;</script>"
- ngx.say(jscode)
- end
- end
- else
- math.randomseed( os.time() );
- local random=math.random(100000,999999)
- jsjump:set(ip,random,60)
- local url=”
- if ngx.var.args then
- url=ngx.var.scheme.."://"..ngx.var.host..uri.."&jskey="..random
- else
- url=ngx.var.scheme.."://"..ngx.var.host..uri.."?jskey="..random
- end
- local jscode="<script>window.location.href=’"..url.."’;</script>"
- ngx.say(jscode)
- end
lua代码部分解释:
1、1-12行是限速功能实现,第5和第10行表示10秒钟内容最多只能请求20次。
2、14-48行是验证部分,24行中的3600表示验证通过后,白名单时间为3600秒,即1小时。
update: 2013.5.26
1、修复JS无限跳转bug
2、增加随机种子
Xshell SecureCRT rz sz上传下载命令
介绍两个很方便的命令,rz和sz,这两个命令能在你使用Xshell SecureCRT登录时,执行rz可以上传文件到服务器,执行sz file可以下载文件到客户端,putty不支持这两个命令。 继续阅读Xshell SecureCRT rz sz上传下载命令
virtualbox host-only网络设置
经过以上三步的设置,宿主机可以连接虚拟机,虚拟机也可以上网了。
防止端口扫描shell脚本
网上有现在的防端口工具,如psad、portsentry,但觉得配置有点麻烦,且服务器不想再装一个额外的软件。所以自己就写了个shell脚本实现这个功能。基本思路是:使用iptables的recent模块记录下在60秒钟内扫描超过10个端口的IP,并结合inotify-tools工具实时监控iptables的日志,一旦iptables日志文件有写入新的ip记录,则使用iptables封锁源ip,起到了防止端口扫描的功能。 继续阅读防止端口扫描shell脚本
远程密令临时开启ssh端口
linux服务器,我们一般是通过ssh通道远程管理,这就需要我们开启ssh端口,如22。但开启端口有被暴力破解的风险,你会说可以设置复杂的密码或使用证书避免。就算破解不了密码,但openssh也可能会有漏洞,你会说可以更改ssh端口,但还是有可能被扫描出来。还有一种选择,我们可以只允许指定IP访问ssh,通过vpn登录管理服务器,但局限很明显,万一紧急情况vpn登录不上去了怎么办。下面给出一种个人觉得比较满意的解决方案,即使用iptables的recent模块,通过密令临时开启ssh端口。当然,密令需要保管好,防止外泄。
1、iptables规则设定
- #指定78字节的icmp数据包(包含IP头部20字节,ICMP头部8字节)通过被加入sshopen列表。
- iptables -A INPUT -p icmp –icmp-type 8 -m length –length 78 -m recent –set –name sshopen –rsource -j ACCEPT
- #检查sshopen列表是否存在你的来源IP,如果存在,即从第一次使用密令开始15秒钟内开启ssh端口22,超过15秒端口自动关闭,不再允许新连接,已连接的不会断开。
- iptables -A INPUT -p tcp –dport 22 –syn -m recent –rcheck –seconds 15 –name sshopen –rsource -j ACCEPT
2、临时开启ssh端口密令
- linux下:ping -s 50 host
- windows下:ping -l 50 host
3、我目前使用的iptables规则
- -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
- -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
- -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
- -A INPUT -p tcp -m tcp –dport 123 -j ACCEPT
- -A INPUT -p icmp -m icmp –icmp-type 8 -m length –length 50 -m recent –set –name sshopen –rsource -j ACCEPT
- -A INPUT -p tcp -m tcp –dport 22 –syn -m recent –rcheck –seconds 15 –name sshopen –rsource -j ACCEPT
- -A INPUT -i lo -j ACCEPT
- -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
- -A INPUT -p icmp -m icmp –icmp-type 11 -j ACCEPT
- -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
- -A OUTPUT -o lo -j ACCEPT
- -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
- -A OUTPUT -p tcp -m tcp –dport 443 -j ACCEPT
- -A OUTPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
- -A OUTPUT -p icmp -m icmp –icmp-type 11 -j ACCEPT
tar增量备份
现在我们来展示一个使用tar工具来增量备份的例子。
一、增量备份
1、新建backup目录,里面新建file1,file2,file3文件
- mkdir backup/
- touch backup/{file1,file2,file3}
2、进行完整备份
- tar -g tarinfo -czf backup-full.tar.gz backup/
3、新增文件到backup
- touch backup/file4
4、进行增量备份
- tar -g tarinfo -czf backup-incre1.tar.gz backup/
5、查看增量备份文件
- tar -ztf backup-incre1.tar.gz
二、进行还原
1、删除backup目录
- rm -rf backup/
2、执行还原操作
- tar xzf backup-full.tar.gz
- tar xzf backup-incre1.tar.gz
现在已经完成tar的还原操作。其它tar的增量备份只需要指定-g参数,tarinfo文件则是用来记录备份的一些信息。