Jun20

l2tp vpn搭建总结(linode ubuntu)

前段时间开始,公司的vpn开始不太好用了,因此我也逐步感觉到墙的力量。 恰好@Zealot有一个linode的vps,之前他搭了一个pptp的vpn,但是联通3g又不能使用pptp vpn,于是尝试自己捣鼓一个l2tp的vpn,断断续续尝试了几次,终于在今天成功了。 参考了很多网上的文章,发现网上的文章都没有涵盖到我碰到的种种问题,因此在这里针对我的案例,写一篇总结性的文章。 首先,按照apple4us的文章,安装一系列软件,写配置: sudo aptitude install openswan vim /etc/ipsec.conf config setup nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 oe=off protostack=netkey conn L2TP-PSK-NAT rightsubnet=vhost:%priv also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport left=222.222.222.222 leftprotoport=17/1701 right=%any rightprotoport=17/%any 注意,ipsec.conf对格式要求很严格,缩进一定要有。 vim /etc/ipsec.secrets 222.222.222.222 %any: PSK “fan1qiang” 这里的psk要解释一下,这个是你在连接l2tp vpn时,需要填写的secret。 此外,别忘记把222.222.222.222替换成你自己服务器的ip(一共两处)。继续: for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo […]

trackback Tags: 评论 (2)

Dec13

善用分布式版本管理系统管理个人代码

大多数人都知道或者善用多种版本管理系统,传统集中式版本管理系统有CVS、SVN等,后来,出现了一些分布式管理系统,如GIT、mercurial等。几乎所有有开发工作的公司,都会选择一个版本管理系统,并且制定一些规范来管理代码,道理很简单,使用版本管理系统能在多人开发,跟进bug,追查问题方面减少很多管理和沟通的成本。 但是,我觉得个人的代码,包括一些软件配置文件,完全可以使用分布式版本管理系统来管理,可以让我们减轻很多麻烦。 使用传统的集中式版本控制软件来管理,好处如下: 不用担心因为无意的错误修改,删除而丢失过去的代码 可以随时查看历史情况,你就不用为“xx功能、yy修改到底是什么时候加进来的,为什么要加”这类事情而挠破头皮了 可以进行分支开发,比如说一个功能你不是很确定能否实现,拉一个分支开发就是了 更进一步,使用分布式的版本控制还有如下好处: 在本地就有版本仓库,你可以在任何时候进行ci和roolback,无需联网 超级快速的分支切换 方便的和他人(其他机器)共享代码,一个push,或者pull,就能快速的同步修改 下面我举几个例子来让大家感受一下善用分布式版本管理的好处。 保证多台机器上的配置文件统一 我们有很多很多配置文件,尤其是linux下。vim配置,apache站点设置,桌面的配置,pidgin的账号设置等等。 但是如果有多台计算机,如果两台机器上配置不统一,用起来不顺手,更可能会带来麻烦,我们需要找到这些配置文件,并且拷贝一份最新的到当前机器,但是如果两边都有修改,就可能会丢失修改,或者需要手动merge。 过去可能用人使用过rsync来同步文件,能解决部分问题,但是如果使用分布式版本管理系统,在每台机器上都有一个独立的代码仓库,用这来管理配置文件再方便不过了! 首先,我们现在一台拥有最新版本配置文件的机器上初始化一个版本库 cd ~/ hg init hg add .vimrc .screenrc .fvwm #添加所有你关注的配置文件 然后,一旦有新机器需要使用这个配置,clone一份即可 cd ~/ hg clone ssh://berg@lastPC://home/berg/ hg up 如果在任何一台机器上有修改,只需要ci到当前机器,并且到其他机器上pull这份修改。 hg ci ssh berg@anotherPC://home/berg/ 我们不需要关心代码的合并,也不需要关心配置文件的具体名称和位置(在linux下面,所有的配置都是隐藏文件),一切细节都交给mercurial来管理。 使用中心服务器 分布式管理原则上是没有一个强制的中心服务器,但是如果我们在管理的规则中加上中心服务器,在某些时候就能避免一些尴尬的发生。 举一个例子,假设我有三个开发环境,一台在公司,一台在家里,还有一台服务器。在公司时,我家里的机器是离线的,在家里则反过来。于是我白天在公司开发完毕后,想在家里获得最新的版本,最简单的办法就是在服务器上架设一个中心版本库,下班时,push代码到服务器上,回家就可以直接pull了。 使用中心服务器可以避免在需要开发时,发现最新版本所在计算机不在身边,并且处于离线状态的尴尬。 灵活的分支开发 不要以为分支功能在小项目中就毫无用处,有的时候,善用分支可以减少很多麻烦。而集中的版本控制系统处理分支很麻烦,让人避退三舍,可是到了分布式版本控制这里,分支变得很简单,看看下面的例子。 我在开发一个项目时,遇到了一个较大的修改,涉及面较广。 如果直接在主干上开发,如果在开发过程中发现了bug,或者其他临时插入的想法,我有两种选择: 直接在线上修改,或者重新clone一份到本地的其他目录进行开发 把“projectA”这个项目做为一个分支在本地开发 两种好处的优劣是很明显的,第一种,我要么需要冒线上修改的风险,要么需要在本地配置另外一套环境;而第二种,我只需要在碰到其他问题的时候,将分支切换回去就好了。下面是命令示例: 首先,将本地仓库的当前branch设置成项目A的名称:projectA hg branch projectA […]

trackback Tags: 评论 (1)

Jun2

553 this mail is blocked by kbas system

一直以来服务器都有收到来自tom的退信,拿一封摘录如下: —– The following addresses had permanent fatal errors —– (reason: 553 this mail is blocked by kbas system,blockid=cnmx12.tom.com.1821.1243877415 & date=2009060201) —– Transcript of session follows —– … while talking to tommx.163.net.: >>> DATA <<< 553 this mail is blocked by kbas system,blockid=cnmx12.tom.com.1821.1243877415 & date=2009060201 554 5.0.0 Service unavailable 我的服务器ip不在PBL列表里面,给其他邮箱系统发邮件也没有问题,在网上查找了一些资料,没找到合理的解释,于是自己动手测试了一下。 我注册了一个tom的账号,在服务器上发送邮件过去,发现是的确能接收到的,测试了好些系统邮件都没有问题。 初步怀疑如下: 1. 可能KBAS系统有内容过滤,某些内容的邮件是发送不过去的 2. […]

trackback Tags: 评论 (1)

May29

在crontab的脚本里面不能用iptables相关命令

最近服务器老被攻击,加了几条iptables命令,聊做自我安慰,本想把iptables的配置每日保存,然后备份,于是我在crontab里调用的一个备份脚本里面加上了: iptables -L > iptables.conf 发现半夜运行的时候,iptables命令找不到,改成: iptables-save > iptable.conf 照旧。最后改成 /sbin/iptables-save > iptables.conf 就正常了。 应该是crontab的运行用户里面没有加上/sbin这个环境变量吧。 这篇日志是每日一web-dev tip计划的一部分,如果你关注web开发或者linux,请订阅我的rss。

trackback Tags: 评论

May28

让nginx用awstats来分析日志

其实这个方法在网上另外一篇文章已经有介绍,来自18m developerWorks 但是一个很xx的问题是,他里面有一个错误,其中在改nginx配置文件,让nginx打出apache格式日志的时候,他少了一对引号,多了一对引号,导致awstats不认这个日志。他原文的配置是: ‘$remote_addr – $remote_user [$time_local] $request ‘ ‘”$status” $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘; access_log logs/access.log new_log; #日志生成路径 正确的格式应为: ‘$remote_addr – $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘; access_log /home/sharej/log/nginx/sharej.access.log default_log_sharej; #日志生成路径 这篇日志是每日一web-dev tip计划的一部分,如果你关注web开发或者linux,请订阅我的rss。

trackback Tags: 评论

May27

打印当前机器连接并且排序

昨天晚上突然机器负载又很高,在网上找了这样一条语句: netstat -na|grep :80|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -r -n 打印出来的结果还挺清楚的。来源 这篇日志是每日一web-dev tip计划的一部分,如果你关注web开发或者linux,请订阅我的rss。

trackback Tags: 评论

May24

如何踢出Linux下其他登陆用户

今天服务器又被攻击了,机房又给我换了一个ip,需要给他们root权限。修改好以后,但是那个root死活不下线。 于是我用下面的办法把他踢下去,然后改密码。 >>who -w berg – tty1 2009-05-24 18:51 berg + pts/0 2009-05-24 19:02 (123.120.13.***) berg@sharej.com /home/berg >>ps aux | grep tty1 root 3221 0.0 0.0 2628 1204 tty1 Ss 18:50 0:00 /bin/login — berg 5046 0.0 0.0 3116 732 pts/0 R+ 19:20 0:00 grep –color=auto tty1 berg@sharej.com /home/berg >>sudo kill -9 3221 很简单,很暴力。 顺便鄙视一下攻击者,我这小站现在还是入不敷出,也没有几个流量,你攻击了得不到任何好处。 […]

trackback Tags: 评论 (1)

May23

fvwm中实现类似windows下alt-tab效果

很早以前就在用fvwm了,但是对于fvwm下的windowslist实现的alt-tab效果实在很无语,偏偏王垠童鞋还说这就是windows下的效果。干脆就屏蔽了alt-tab,自己搞了一个win+z热键,用来降低当前窗口(RaiseLower)。窗口少的时候还好,大量窗口的时候简直是噩梦。 前几天又找了一圈,终于找到一个80%类似的: AddToFunc SwitchWindow + I $[DIR] (CurrentPage, !Iconic, !Sticky) FocusRaiseAndStuff + I Deschedule 134000 + I PipeRead `[ “$[DIR]” == “Prev” ] && echo ‘SetEnv NDIR Next’ || echo ‘SetEnv NDIR Prev’` + I Schedule 700 134000 SetEnv DIR $[NDIR] 和windows下面的切换效果一致,只是没有窗口图标显示而已。我已经受罪了很久,有这个已经很欣慰了。 来源 这是每日一web-dev tip计划的一部分,如果你关注web开发或者linux,请订阅我的rss。

trackback Tags: 评论 (2)

May4

wine-door使用时报错,无法显示软件列表的问题

报错如下 gzip: /tmp/Applications.xml.gz: not in gzip format Error: Could not find packlist /tmp/Applications.xml gzip: /tmp/System Base.xml.gz: not in gzip format Error: Could not find packlist /tmp/System Base.xml gzip: /tmp/Games.xml.gz: not in gzip format Error: Could not find packlist /tmp/Games.xml gzip: /tmp/Libraries and Fonts.xml.gz: not in gzip format Error: Could not find packlist /tmp/Libraries and Fonts.xml […]

trackback Tags: 评论

Apr1

退信记

前几天,重写了分享家的忘记密码功能,采用了PEAR的MAIL库。 但是陆续收到退信通知,摘抄几则: (reason: 553 Mail from 58.sharej.com.57 not allowed – [80]) 上面是Yahoo!的 (reason: 550 Error: content rejected.http://mail.qq.com/zh_CN/help/content/rejectedmail.html) 这个是QQ的 开始着手排查问题。首先是检查代码,发现我在header里面的From字段里面用的不是@sharej.com域的邮箱,而是用的我的Gmail。修改这个字段为@sharej.com后缀的邮箱,写一个测试程序测试一下,发现QQ已经不退信了。但是Yahoo的退信还是存在。 上网搜索错误提示,发现是spamhaus把我的ip列到PBL名单里面了,很多国外邮箱都看这个名单,导致拒收。转了一圈,发现一个解决方案,做MX解析后,申请移除名单。 很久没有设置过MX记录了,直接做了一个@.sharej.com的MX解析到我自己的ip。今天发现能收gmail的信了,但是在spamhaus申请移除的时候,怎么样都收不到信。后来才发现MX记录不能直接指向IP,而需要指向一个域名,像下面这样: mx记录: @ -> mail.sharej.com. A记录:  mail -> 1.2.3.4 刚才去尝试申请移除,已经收到邮件了。晚一点我再测试一下发邮件到yahoo和live mail,希望一切顺利。 另外,在网上还看到一些别的建议,如添加RDNS解析。这个需要向当地的电信部门申请,貌似比较麻烦。 总结一下: 在发送时的From尽量用真实地址,可以加一个Reply-To字段用来给用户回复,或者直接在sendmail里面配置转发到其他邮箱。 发邮件的服务器做好MX解析 有条件可以做反向解析 设置一下Return-Path吧,这样退信也能收到 UPDATE: 移出黑名单以后,发往163、gmail、qq、live mail的邮件已经正常。yahoo会进垃圾箱。

trackback Tags: 评论