2013年3月21日星期四

Linux iptables 配置详解



如果你的IPTABLES基础知识还不了解,建议先去看看.

一、配置一个filter表的防火墙

1. 查看本机关于 iptables 的设置情况
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么规则都没有.
2.清除原有规则.
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
# iptables -F 清除预设表filter中的所有规则链的规则
# iptables -X 清除预设表filter中使用者自定链中的规则
我们在来看一下
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.
# /etc/rc.d/init.d/iptables save
这样就可以写到 /etc/sysconfig/iptables 文件里了.写入后记得把防火墙重起一下,才能起作用.
# service iptables restart
现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧
3.设定预设规则
# iptables -p INPUT DROP
# iptables -p OUTPUT ACCEPT
# iptables -p FORWARD DROP

上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.
可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.
这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.
注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.
怎么办,去本机操作呗!
4.添加规则.
首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链
为了能采用远程SSH登陆,我们要开启22端口
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.
其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:
# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
其他同理.
如果做了WEB服务器,开启80端口
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了邮件服务器,开启25,110端口
# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服务器,开启53端口
# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
如果你还做了其他的服务器,需要开启哪个端口,照写就行了.
上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP
允许icmp包通过,也就是允许 ping
# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
允许loopback!(不然会导致DNS无法正常关闭等问题)
# iptables -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
# iptables -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.
减少不安全的端口连接
# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
# iptables -A OUTPUT -p tcp --dport 31337 -j DROP

有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会
还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.
当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加
允许SSH登陆一样.照着写就行了.
下面写一下更加细致的规则,就是限制到某台机器
如:我们只允许192.168.0.3的机器进行SSH连接
# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.
或采用命令方式:
# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.
# /etc/rc.d/init.d/iptables save
这样写 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的规则连接也一样这么设置.
在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.
开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包
#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个
#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允许ICMP包通过,就是因为我在这里有限制.

二、配置一个NAT表放火墙

1. 查看本机关于NAT的设置情况
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章
当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的
如果你想清除,命令是
# iptables -F -t nat
# iptables -X -t nat
# iptables -Z -t nat
2. 添加规则
添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章)
添加规则,我们只添加DROP链.因为默认链全是ACCEPT.
防止外网用内网IP欺骗
# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接
# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
禁用FTP(21)端口
# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
这样写范围太大了,我们可以更精确的定义.
# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.
最后:
drop非法连接
# iptables -A INPUT -m state --state INVALID -j DROP
# iptables -A OUTPUT -m state --state INVALID -j DROP
# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# /etc/rc.d/init.d/iptables save

这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用
# service iptables restart
别忘了保存,不行就写一部保存一次.你可以一边保存,一边做实验,看看是否达到你的要求

阿里云服务器上使用iptables设置安全策略



      公司的产品一直运行在云服务器上,从而有幸接触过aws的ec2,盛大的云服务器,最近准备有使用阿里云的弹性计算(云服务器)。前两种云服务器在安全策略这块做的比较好,提供简单明了的配置界面,而且给了默认的安全策略,反观阿里云服务器,安全策略需要自己去配置,甚至centos机器上都没有预装iptables(起码我们申请两台上都没有),算好可以使用yum来安装,安装命令如下:

yum install -y iptables
iptables安装好后就可以来配置规则了。由于作为web服务器来使用,所以对外要开放 80 端口,另外肯定要通过ssh进行服务器管理,22 端口也要对外开放,当然最好是把ssh服务的默认端口改掉,在公网上会有很多人试图破解密码的,如果修改端口,记得要把该端口对外开发,否则连不上就悲剧了。下面提供配置规则的详细说明:
第一步:清空所有规则

当Chain INPUT (policy DROP)时执行/sbin/iptables -F后,你将和服务器断开连接
所有在清空所有规则前把policy DROP该为INPUT,防止悲剧发生,小心小心再小心
/sbin/iptables -P INPUT ACCEPT
清空所有规则
/sbin/iptables -F
/sbin/iptables -X
计数器置0
/sbin/iptables -Z

第二步:设置规则

允许来自于lo接口的数据包,如果没有此规则,你将不能通过127.0.0.1访问本地服务,例如ping 127.0.0.1
/sbin/iptables -A INPUT -i lo -j ACCEPT 

开放TCP协议22端口,以便能ssh,如果你是在有固定ip的场所,可以使用 -s 来限定客户端的ip
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

开放TCP协议80端口供web服务
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

10.241.121.15是另外一台服务器的内网ip,由于之间有通信,接受所有来自10.241.121.15的TCP请求
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT

接受ping
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

这条规则参看:http://www.netingcn.com/iptables-localhost-not-access-internet.html
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

屏蔽上述规则以为的所有请求,不可缺少,否则防火墙没有任何过滤的功能
/sbin/iptables -P INPUT DROP

可以使用 iptables -L -n 查看规则是否生效
至此防火墙就算配置好,但是这是临时的,当重启iptables或重启机器,上述配置就会被清空,要想永久生效,还需要如下操作:
/etc/init.d/iptables save
或
service iptables save

执行上述命令可以在文件 /etc/sysconfig/iptables 中看到配置
以下提供一个干净的配置脚本:
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -P INPUT DROP
最后执行 service iptables save ,先确保ssh连接没有问题,防止规则错误,导致无法连上服务器,因为没有save,重启服务器规则都失效,否则就只有去机房才能修改规则了。也可以参考:ubuntu iptables 配置脚本来写一个脚本。
最后再次提醒,在清空规则之前一定要小心,确保Chain INPUT (policy ACCEPT)。

2013年3月20日星期三

原标题 [TVB男星涉同性卖淫:开价55000 可组8人团轮奸]



( 102 )
TVB男星涉同性卖淫:开价55000 可组8人团轮奸 [保存到相册]
( 82 )
TVB男星涉同性卖淫 [保存到相册]

  搜狐娱乐讯 据香港媒体报道,黄长发与鞋王三奶李姿霆Karen的不伦恋、富商刘定成过千张男艺员裸照,引爆港男“鸭”史。愈爆愈多,早前在《法网狙击》强奸“波神”高海宁、2010年参选“香港先生”落败的白健恩,上周末深夜竟现身天水围酒店外涉卖淫,被逮个正着更是吓到狂奔
  香港娱乐周刊发现近日有人在同志聊天室,高调地向网友兜生意,主题为“付三万五港元起,可玩香港先生”。周刊与中间人成功联络,再在上周六(16日)相约在天水围的嘉湖海逸酒店,中间人更称只要付5万5就可以单对单任玩,组成8人团、每人3万5,更可1对8,实在大胆!当晚现身的白健恩,被周刊拍下了整个过程。
  电话确认
  两周前,周刊收到读者爆料,表示有人在同志聊天室高调地兜生意,可与香港先生性交易,在聊天室交谈中,更指明是“姓白”的港男:过往7届港男中,只有在2010年参选的白健恩姓白。其后周刊成功与中间人联络,上周二(12日)在电话交谈,商议交易细节,价钱出奇地高,1对1收费55,000港币(两小时,过夜收10万),如果可以组8人团每人就收费35,000港币,为什么要8人?中间人说方便和白先生分钱。
  怎么玩都要用安全套
  相约交易日期在上周六(16日),中间人事前已表明酒店地点要由他而定,选择在天水围的嘉湖海逸酒店,更要求前一日(15日)把房租1500港币存到指定户口。上周六约11时多,周刊男记者到达之前,再和中间人通话,要求与白健恩先生在大堂见面,但遭中间人拒绝,中间人说:“我怕让人拍到!”记者说没有人会认得白健恩的。中间人说:“现在肯定认识的,他在TVB出镜这么多。”
  记者试图讲价,但中间人坚持55,000港币服务两小时,问到服务细节,中间人说:“怎么玩都好都要用避孕套,底线是可以口交,总之正常的同志做的事都可以,他15到20分钟内到,你们是不是带了现金?”记者一心想拖延时间,不停问中间人问题,问他是否跟白健恩先生上房间?他说:“我和他上完房间再下来,谁先来就先接待谁。”
  加一位顾客立减一万
  约晚上11时半,周刊男记者与另一名男摄影师到达酒店,在酒店门外确认了中间人,但对方见多了一人,起初亦有怀疑,但记者说只是即兴加人数,其后中间人不停用手机发短信,之后表示如果两个人的话,每人收费为45000港币,中间人说:“你先坐一下,我要和他沟通一下,因为现在多了一个人。”
  之后中间人不停发短信,又表示白健恩已经在附近等候。中间人表示整个交易过程,他会在房间内,而收钱之前,更要求记者先脱光,以免被偷拍,中间人更说自己是新手第一次做,记者问卖淫港男都是第一次?中间人只说:“你不要管!”更催促记者,价钱OK的话,就立即上房,在走廊见到卖淫港男才一手交钱。
  解释破绽百出
  其实在这段时间,周刊的另一队记者已发现白健恩在酒店附近徘徊,戴上棒球帽穿牛仔裤的白健恩不停走来走去,一直在马路边吸烟,又不断通电话和按手机,等到累了又坐在公园的木凳,行迹甚是可疑。
  记者对中间人表示现金没带够,可否先付55000港币,之后再给尾数,但中间人坚决拒绝,示意一个可先上房,但另一个和他去取款机取钱付款。
  记者假装不安心,中间人主动提出:“我让他和你聊一句。”之后中间人拨通电话,跟对方说:“喂,客户要求你和他说一句。”记者接过中间人的电话,对方说:“放心,我是白健恩。”而记者亦认出电话另一端声音极似白健恩。之后中间人便抢回电话,不想记者跟卖淫港男说太多。其后,中间人带路到天水围酒店附近商场的取款机,记者终于表明身份,中间人突然发难,要记者安抚多时才平静。
  直至凌晨近1时,记者亦向仍然在酒店附近的白健恩,表明身份和要求访问。
  记者:这么晚?想和你做个小小的访问。
  白:我不认识你!
  记者:其实我们已经全部拍下来了,中间人也说了,你对此有回应吗?
  白:没有回应。
  记者:每次大约可以赚多少钱?是不是第一次?你怎么认识他(指中间人)的?
  白:我不认识他!
  记者:刚刚有联络,拿着你的户口号码哦!
  白:不是我!(突然反向奔走)
  记者:有个代理人在网上接生意,而你真的出现了,我刚刚还和你通过电话。
  白:哪个代理人?什么是代理人?
  记者:你是不是不同意这么做?还说可以给8个人轮奸?其实当中你有没有苦衷?
  白:其实我这的不知情,他说的东西,我都觉得是开玩笑,随便应承他而已,我想知道他是一个什么人,说的是真是假,我们是在Facebook上认识的,我要更多人知道我的存在,所以我什么人都打广告。
  记者:今晚来接客都肯?
  白:我……我不是来接客,我希望你们不要写出来。
  记者:怕不怕被无线知道?
  “害怕被无线炒!”
  白:我好怕(被无线炒)不想影响形象和前途。
  记者:其实有没有什么苦衷?是不是需要钱?
  白:我不想说这么多,越描越黑,我不想解释,我只希望你们不要登出来,求求你们好不好?
  记者:你是第一次接客?
  白:好奇……好奇……我从来没有接,我先做都不是接客。
  记者:你和中间人认识多久了?
  白:其实是在网上聊了一段时间!
  记者:价钱你和他有没有谈过?
  白:有谈过,由头到尾都是他自己说,说给我知道,我没有答应他要些什么,要多少。
  记者:但你刚才说如果两个人肯减价啊!
  白:他说的嘛,他说什么都行,我不知道,我不知道这个人。(之前却说在Facebook认识)
  记者:这么晚了来天水围就是为了好奇?
  白:刚好得空嘛!
  记者:你是不是同性恋者?
  白:我不是!
  记者:接男客你又ok?
  白:我没有接!
  记者:要不要立刻和乐小姐(乐易玲)解释?
  白:最好希望你们不要写出来!
  记者:要不要和中间人现在对质?
  白:全部的东西都是他自己讲,他约我出来,叫我在这里等,我在这里等就见到你们啦,我以为他是fans……
  记者:你把户口号码都给了他哦?
  白:那个……其实是因为他欠我钱……
  记者:那你之前有说不认识他?怎么欠你钱了?
  白:(越讲越乱)因为他说他会给钱给我,他就是说了一些接客的事情,我说好呀,有钱就给啦……
  记者:有说他欠你钱?
  白:如果我真是做的话,他不是差我钱咯,那我又没有做到,他不是没有欠我钱咯。(开始语无伦次)
  记者:你有没有把柄被人抓住了?
  白:没有,你们可不可以高抬贵手呀?
  本周一(18日),傍晚时分记者致电白健恩经理人问回应后,白健恩连原先在微博公布称会出席的“亚洲电影大奖”,也没有现身红地毯,似乎不想被记者追问。

何润东称微博被盗号 警方:证据不足 不予立案



  在今年央视3·15晚会进行的过程中,何润东发了一条指责苹果手机售后服务的微博,但最后一句“大概8点20分发”连日来持续发酵,引发了网友的质疑之声。此后何润东发声明,称出现微博异常疑似被盗号,并已报案。今日(19日),有媒体连线怀柔公安分局,警方回应称因证据不足暂不予立案。
  今年央视的3·15晚会,曝光了苹果手机售后服务的地区差异,在众多“果粉”中引起热烈讨论。而何润东也于晚会进行当中的20:20分左右,发布一条谴责苹果手机的微博:“#315在行动#苹果竟然在售后玩这么多花样?作为‘果粉’很受伤。你们这样做对得起乔帮主吗?对得起那些卖了肾的少年吗?果然是店大欺客么。大概8点20分发。”何润东的声讨行为本无可厚非,但是最后一句“大概8点20分发”,被不少网友认为是公关贴,系提前准备好定时发送的。
  随后,何润东迅速删除了该微博,并于当晚22:08分发文称微博账号被盗用,还连声说“太扯了”。17日晚间,何润东更发表声明,称自己15日从早7:30分到晚间21:30分都在拍戏,手机一直在经纪人手里,但这段时间内两人都没有发布任何微博。直至21:50分收工才发现微博出现异常情况,后才紧急发表声明。声明中,何润东表示,团队内部也在努力调查该微博事件,但一直没有结果。因此,已于17日向怀柔公安分局报警。
  今日(19日),有娱乐现场的记者连线何润东报案的怀柔公安分局,警方回应称因为证据不充分,暂时不予立案。

2013年3月19日星期二

五步轻松搞定Linux下的文件同步(备份)


rsync文件同步配置

server端:主机名s170
client端:主机名s156
目录:/opt/test
用户:root
目标:配置rsync使得client端可以把server的/opt/test目录中的文件同步(备份)过来。

操作步骤一:确认rsync是否安装
server端和client端:

[root@s156 ~]# yum list rsync
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
Installed Packages
rsync.i386                                                                  3.0.6-4.el5_7.1                                                                   installed
[root@s156 ~]#

如果没有安装,则使用下面的命令安装
yum install -y rsync


操作步骤二:启动rsync服务
server端:

[root@s170 mysql]# chkconfig rsync --list
rsync           关闭
[root@s170 mysql]# chkconfig rsync on
[root@s170 mysql]# chkconfig rsync --list
rsync           启用
[root@s170 mysql]#

操作步骤三:设置ssh免登录
server端:

检查server端的.ssh目录
[root@s170 ~]# cd .ssh/
[root@s170 .ssh]# ls -a
.  ..  known_hosts

此步的目的是为了后面确认~/.ssh目录中文件的变化。


client端:

[root@s156 ~]# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
0b:9d:3e:64:77:17:6a:d8:60:1e:ab:47:42:d1:8e:51 root@s156
[root@s156 ~]#

其中,/root/.ssh/id_dsa 是私钥,/root/.ssh/id_dsa.pub 是公钥。


现在,将公钥复制到server端。
[root@s156 .ssh]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@s170
21
ssh: connect to host s170 port 22: Connection refused
由于s170机器的ssh服务端口已修改,使用默认的22端口访问失败。
注意:下面的命令行中指定端口的方法。
[root@s156 .ssh]# ssh-copy-id -i ~/.ssh/id_dsa.pub "-p 21702 root@s170"
21
root@s170's password:
Now try logging into the machine, with "ssh '-p 21702 root@s170'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[root@s156 .ssh]#

server端:

[root@s170 .ssh]# ls -a
.  ..  authorized_keys   known_hosts
[root@s170 .ssh]# cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAKUqlhhT8mEj39aKgqgziI/TqYEtaz5epS/gWVTZBmtBiY3hgYK1F+/2ItwmKI85ouIuHN4y0axzsPZv27gkYAt+Qz2AZ+QQ4IthN8cNlPQzZ1dcqtoHzFAJYpgB/HcGh2RUl/mpkHXbllOIpr281nyr+Y9LyC/qF0031A0WegyzAAAAFQDroRvSeqS9mpsJmqm0wZpNbFOSGwAAAIA4j9tGmKQ/40fpfJZ+mC5GyW+nbuL9vYHqCujX7mLku7apCq7MXqXR/s2Q4av2T68J6qR2p84obDnqbCN+H3d+7JFblLjST9WSNGMXEiPZB9lTWFV38n6exJ96rSKfeBkdOUO49MYcNX/mMpypmIHqGfpvuXbQKqWFQH7WLxVAYwAAAIBWTyQiWkkLNZkRzKjjcORtYLHss+QfqvbygXNiZSuijZ+mXyjZ9A5CxU781FsU/NmD+i6qtSr5XVyRRuigIJGWAYZ8IcD2Ct18+WPzapgO6/Ptn9I2a+6dV44MbGTtn4Rax0UaSHzWHsg+G3Kvwh9x5gcvmuoSGeamVpmcsEHjZg== root@s156
[root@s170 .ssh]#

注:非对称加密方式下,公钥是可以公开的,而私钥必须妥善保管!


client端:

测试一下免登录ssh。
[root@s156 .ssh]# ssh -p21702 xxx.170
Last login: Sun May 20 11:14:50 2012 from 180.168.215.167
[root@s170 ~]#
[root@s170 ~]# ls
anaconda-ks.cfg  backup  install.log  install.log.syslog  setup
[root@s170 ~]# exit
logout

Connection to s170 closed.
[root@s156 .ssh]#

操作步骤四:使用rsync同步文件
server端:
创建测试文件
[root@s170 .ssh]# cd /opt/
[root@s170 opt]# mkdir test
[root@s170 opt]# cd test
[root@s170 test]# ls
[root@s170 test]# cat >1.txt
hello sync
[root@s170 test]#
[root@s170 test]# ls -l
总计 4
-rw-r--r-- 1 root root 11 05-20 17:10 1.txt


client端:

执行同步

[root@s156 .ssh]# cd /opt/
[root@s156 opt]# mkdir test
[root@s156 opt]# cd test
[root@s156 test]# ls
[root@s156 test]# rsync -avR -e ssh s170:/opt/test /    
ssh: connect to host s170 port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [receiver=3.0.6]
[root@s156 test]# rsync -avR -e "ssh -p 21702" s170:/opt/test /          
receiving incremental file list
opt/
opt/test/
opt/test/1.txt

sent 38 bytes  received 142 bytes  360.00 bytes/sec
total size is 11  speedup is 0.06
[root@s156 test]# ls -l
总计 4
-rw-r--r-- 1 root root 11 05-20 17:10 1.txt

server端:

又在server端创建了3.txt文件。
[root@s170 test]# cat >3.txt
ddd

ddd
[root@s170 test]#
[root@s170 test]# ls -l
总计 8
-rw-r--r-- 1 root root 11 05-20 17:10 1.txt
-rw-r--r-- 1 root root  9 05-20 17:21 3.txt
[root@s170 test]#

client端:

注意:这次rsync的参数少了-R,对比一下。
[root@s156 test]# rsync -av -e "ssh -p 21702" s170:/opt/test /
receiving incremental file list
test/
test/3.txt

sent 34 bytes  received 132 bytes  332.00 bytes/sec
total size is 20  speedup is 0.12
[root@s156 test]# ls -l
总计 8
-rw-r--r-- 1 root root 11 05-20 17:10 1.txt
怪了,没有3.txt。
[root@s156 test]# updatedb
[root@s156 test]# locate 3.txt
/test/3.txt
[root@s156 test]#
如果没有-R参数,要像下面这样写。
[root@s156 test]# rsync -av -e "ssh -p 21702" s170:/opt/test /opt
receiving incremental file list
test/
test/3.txt

sent 34 bytes  received 132 bytes  332.00 bytes/sec
total size is 20  speedup is 0.12
[root@s156 test]# ls
1.txt  3.txt
[root@s156 test]#

操作步骤五:使用crontab定期执行同步
使用 crontab 执行同步的最小时间粒度为 1分钟,也就是说最长可能要1分钟才能将新增的文件同步。
如果是主备冗余的方式,这问题也不大。

client端:

crontab -e
* * * * * rsync -avR -e "ssh -p 21702" s170:/opt/test /

现在来测试crontab设置是否有效

server端:

[root@s170 test]# cat >c.txt
hello world
[root@s170 test]#

client端:

[root@s156 test]# ls -l
总计 12
-rw-r--r-- 1 root root 11 05-20 17:10 1.txt
-rw-r--r-- 1 root root  9 05-20 17:21 3.txt
-rw-r--r-- 1 root root 12 05-20 18:22 c.txt
[root@s156 test]#

成功了!

本文链接:http://codingstandards.iteye.com/blog/1539363   转载请注明出处


PS:存在的问题:
使用crontab方式执行rsync,不能实时同步文件。有文章说道,可以采用inotify实现实时通知同步。下次有空再试验一下。

2013年3月16日星期六

linux强制删除目录命令rm -rf


分类: 技术手册 linux 2009-03-06 15:17 7000人阅读 评论(0) 收藏 举报
linux
Linux删除文件夹命令--rm, rmdir

linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,
就陷入深深的苦恼之中,现在使用rm -rf命令即可。
直接rm就可以了,不过要加两个参数-rf

即:rm -rf 目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思
删除文件夹实例:
#rm -rf /opt/real/RealPlayer
将会删除/opt/real/RealPlayer目录以及其下所有文件、文件夹
需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的
当然,rm还有更多的其他参数和用法,man rm就可以查看了
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件

Linux CentOS中cp复制强制覆盖拷贝的命令



Linux下默认cp命令是有别名的(alias cp='cp -i'),无法在复制时强制覆盖,即使你用 -f 参数也无法强制覆盖文件,下面提供几个从网上找的Linux下cp命令覆盖的方法。
1) 取消cp的alias(放心这不是永久生效):
#unalias cp
#cp a /test/a

2) 加反斜杠 \cp 执行cp命令时不走alias(测试过,这个有用):
#\cp a /test/a

如果是要复制所有文件,并包含文件夹下的内容使用如下命令:
\cp ./2013/* /data/www/myweb

3)另外一个有意思的方法:
#yes|cp a /test/a