6/30/2009

如何架设Tor+Privoxy服务器

GFW渐趋肆虐的和谐大环境下,在没有更加主动的应对策略前,每日被动使用Tor+Privoxy 的频率自然也越来越频繁了。但是我们通常都是在自家的自留地上种上Tor和Privoxy,这是典型的互联网小农意识,我们需要更方便、更有效率和能同时为更多的网络羔羊提供Tor+Privoxy 服务。因此本文将介绍如何在服务器上架设Tor+Privoxy,虽然本文以Ubuntu 8.04 LTS 服务器为例,但是类似的配置在Windows Server平台上也是同样适用的。

Step-1. 安装Tor+Privoxy
请先确保具有Ubuntu 8.04 LTS 服务器的root权限,在Terminal中输入如下命令安装Tor和Privoxy:
sudo apt-get update
sudo apt-get install tor privoxy

Step-2. 配置Privoxy
由于Tor不能作为Web代理服务器(Web Proxy),因此只需要将Privoxy的TCP通讯(TCP Traffics)转到Tor的本机TCP侦听端口(127.0.0.1:9050),然后将防火墙开放Privoxy的默认TCP端口8118,重启Privoxy服务即可。


1) 将Privoxy的TCP通讯前导到Tor
编辑Privoxy的配置文件: 用你熟悉的编辑器打开/etc/privoxy/config, 找到# forward-socks4a / 127.0.0.1:9050 .配置行,然后将单行注释符#删除掉,然后保存该配置文件。

2) 重启Privoxy服务
sudo /etc/init.d/privoxy restart

3) 配置防火墙开放Privoxy的默认端口
在Ubuntu下,防火墙默认是全开放的,因此默认情况下是不需要为Privoxy配置防火墙的。由于大多数Linux防火墙都是基于Linux内核级防火墙Netfilter(IPTables),所以在此只介绍如何利用iptables开放Privoxy的TCP端口,可以用iptables的Append或Insert输入链(Input Chain),如下:
sudo iptables -I INPUT 5 -m state --state NEW -p tcp --dport 8118 -j ACCEPT
上述命令是在输入链中第5条的位置插入开放TCP 8118端口的输入链,该项操作会因你的服务器防火墙的具体环境而异,因此如果碰到问题请参见Ubuntu IPTables How To

4) 保存IPTables的配置
在Terminal中输入如下命令:
sudo sh -c "iptables-save > /etc/iptables.rules"
为确保在服务器重启后能自动应用之前的防火墙配置,请在/etc/network/interfaces网络接口配置文件尾部添加如下配置语句:
# The iptables rules
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules

Step-3. 客户端配置
在Firefox和IE下配置网络代理的过程基本类似,在Firefox>(Edit>Preferences|Tools>Options)>Advanced>Network>Settings进行相应设置即可。在Firefox中可以使用FoxProxy插件配合Tor,不过个人觉得FoxProxy虽然强大,但是太慢了,另外你还得不断地手动添加基于URL的模式(Patterns),显得有些过于繁琐。因此我将会以Firefox为例介绍一种在Tor+Privoxy 与正常模式之间的自动切换的方法:

1) 创建Firefox Profile
首先需要终止所有Firefox进程,在Linux Terminal或Windows Command-line中输入:
firefox -ProfileManager
然后依据Create Profile向导完成你需要为Tor+Privoxy 配置Firefox的相应环境,设置Firefox网络代理,将该新创建的Profile命名为tor。
f-3-1:

2) 启动Firefox
在Linux Terminal或Windows Command-line中输入:
firefox -P <profile-name>
这里的<profile-name>即为Firefox创建的Profile名称,例如:firefox -P tor 将以使用Privoxy的Profile启动Firefox。
f-3-2:

最后可以通过访问Are you using Tor?测试是否已正确连接上Tor网络。


后记:
前段时间宫刑部用俺们的肆仟柒佰萬的超高价买了一坨叫什么"绿坝-花季护航"的屎疙瘩,然后异常慷慨的强置在每一台新出货的计算机中,并且保证这陀屎对俺们的身心健康是多么的有益,尤其是祖国的花朵;与其说GFW干的是偷偷摸摸的见不得人的男盗女娼,而"绿坝-花季护航"却是对私权的公然入侵,在性质上是不可同日而语的。无论如何,被动的应对总是效率太低,并且显得过于无奈了,随着GFW的进化,我们也迫切地需要由被动应对转为更有效率的主动应对。





6/21/2009

Vista 安全瘦身10条

Vista比XP便捷高效的多,前提是如果你真的会搞XP。目前XP已过了主流支持期,To Vista or to Windows 7 that is the question,XP的拥趸已被M$无情地抛弃了,Oops, that's good! 在此我不想讨论同样都为愚蠢的Windows的XP和Vista孰优孰劣的问题,显然这样做是毫无意义的,我只想:在你有幸了解Windows的行为方式之后,对愚蠢的Windows喋喋不休地打扰你的生活,能发出纯爷们的呐喊:停下,DB!。本文将对Vista如何安全瘦身的问题进行讨论并提供一些建议,通常Vista会耗尽你的硬盘可用空间,因此你不需要怀疑问题的提出,这是由M$商业模式决定的,即由不得你也由不得我。另外非常重要的一点是我是教你安全瘦身,因此你不要过分的担心你的Vista会出现上吐下泻的症状。


既然是要瘦身,总得知道需要瘦哪,哪些地方能瘦,哪些地方不能瘦,怎么个瘦法。首先,可以通过WinDirStat等磁盘使用情况分析工具找到瓶颈,明确问题所在,然后进行相应调整。其次,严格依据3个指导性策略进行瘦身:1) 尽量减少Vista对整体磁盘空间的占用率;2) 如果不能有效做到1),那么就尽可能减少对Vista所在的系统分区的磁盘空间的占用率;3) 尽可能避免采用瘦身后对Vista造成负面影响的瘦身方法,即我们需要的是安全瘦身。

为了便于讨论,对于一个系统特性如果同时适用于XP和Vista的情况,文中会以Windows作为限定。在以下是各项是根据硬盘空间所占比重和能对其的控制程度作为排序条件,列举的在Vista下影响磁盘空间的主要因素;另外,在本文中除非必要将不会显式的说明具体应用了上述策略。

1. 硬盘容量的标准误差
当发现你的硬盘的实际容量比硬盘标称容量要少时,请不要诧异。这是因为硬盘生产商和操作系统采用了不同的计量标准而已,硬盘生产商为了方便采用K=1000字节(Kilobytes),M=1000K(Megabytes),G=(Gigabytes)作为计量单位,而操作系统则是采用K=1024字节(Kibibytes),M=1024K(Mebibytes),G=1024M(Gibibytes)为单位的,因此标称160GB的硬盘实际上只有160*1000^3/1024^3=149GiB(注意中间的字母i)。目前正式发行的Windows操作系统并不区分这种计量标准上的差异,也是造成混淆的一个因素,而IEC提议采用GiB来避免这种混淆,这个提议被包括IEEE在内的多家标准组织所接受,毫无疑义的是Linux的也是该提议的支持者之一。

2. 系统恢复分区
目前新出货的品牌机通常都会带有一个系统恢复分区(Recovery Partition),在这个分区上存有可以将系统恢复至出厂状态的所有软件和数据。系统恢复分区通常为5~10GiB大小,这取决于机器的不同的品牌以及不同的型号。在你决定干掉这个硕大的分区之前,请先确保已根据用户手册正确地将系统恢复分区上的内容刻录到DVDs(有的机器生产厂家会免费提供系统恢复光盘,但是需要另行申请)。

3. VSS占用的硬盘空间
VSS(卷影拷贝,Volume Shadow Copy),默认会将硬盘空间的15%或硬盘剩余空间的30%分配给系统还原点(System Restore Points)和Vista备份工具使用。到底是15%还是30%取决于2种情况:首先在你从未更改过VSS设置的前提下默认为15%;其次,当你重新开启VSS后,系统将会根据这两个比值计算而来的值孰小的原则来决定最终需要分配的硬盘空间。然而无论是15%还是30%都将会占用非常大块的硬盘空间,虽然在Vista下VSS服务相对于在XP/Server 2003没有直接的调整占用硬盘空间的操作,但是Vista的VSS比XP/Server 2003的VSS服务进化了很多,所以除非你很清楚系统崩溃带来的成本和完全恢复系统的成本,否则的话请不要作出关闭VSS服务的疯狂并且危险的决定。

下面介绍一个既能利用VSS给系统上TT又能安全减少VSS占用硬盘空间的方法,步骤如下:
a) 使用vssadmin list shadowstorage查看影子拷贝存储空间(Shadow Copy Storage,以下简称:SCS)的使用情况。
f-3-a:
b) 设定的SCS的上限
通过计算Vista系统分区的15%来确定SCS的上限的基值,再根据此基值与2~4GiB作比较,如果基值大于4GiB,你可以选取2~4GiB来作为你的SCS的上限;如果基值位于2~4GiB之间,请选择此基值作为SCS的上限。例如,Vista系统分区为40GiB,基值=40GiB*15%=6GiB,因6GiB>4GiB,故选择4GiB作为SCS的上限。
使用vssadmin resize shadowstorage设定SCS的上限。假定Vista系统分区的盘符为C,预设定的SCS上限为4GB:vssadmin resize shadowstorage -for=c: -on=c: -maxsize=4GB2
f-3-b:

4. 光盘刻录的临时镜像
Windows从XP开始就支持光盘刻录功能,Vista内置支持DVD刻录。如果你的机器支持DVD刻录(DVD RW),要注意的就是Vista会在刻录的过程中创建一份比刻录内容稍大的临时镜像文件,比如你的刻录内容是4.7GiB那么额外还需要约5GiB的硬盘空间来存储这个临时镜像文件。因此为避免占用Vita所在的系统分区的磁盘空间请选择其它分区来存储刻录时产生的临时镜像文件,具体操作如下图: 
f-4:

5. 虚拟内存页面交换文件
虚拟内存页面交换文件(pagefile.sys),由Windows在系统分区根目录下创建,主要由Windows的虚拟内存(Virtual Memory)所使用。在初始安装Windows后通常为物理内存空间(Physical Memory Size)的1.5倍左右,可以通过系统设置来调整pagefile.sys的大小,这取决于机器的配置和个人偏好,有3个选项: a) 手动配置(Custom size) b) 由系统管理(System managed size) c) 不产生页面交换文件(No paging file)。如果机器的物理内存足够大,可以尝试选择选项c;就我个人而言我选择b,理由是:就让愚蠢的Windows自己摆弄她那套愚蠢的规则也许是个不得已的好主意。
f-5:

6. 系统休眠镜像文件
系统休眠镜像文件(hiberfil.sys),由Windows在系统分区根目录下创建,用于镜像Windows进入休眠模式(Hibernated mode)时RAM的内容,因此hiberfil.sys文件的大小和物理内存空间相等。正由于hiberfil.sys是Windows系统当前RAM的完全镜像,因此重新开机后Windows能恢复至进入休眠模式前的状态,这对于有足够磁盘空间同时又讨厌Windows漫长前戏的朋友非常实用。当然也可以通过Start>Control Panel>Power Options来关闭休眠模式,然后就可以安全地删除该文件了。

7. Users目录
干掉XP下的Documents and Settings目录而在Vista中采用类似于Unix-like系统的/home目录,即Users目录,无疑M$是在未付出任何版权和许可协议费用的情况下取得的又一伟大创新。/home目录的存在是Unix-like多用户操作系统(Multi-user Operating Systems)的需要,其存在的根本理由是分离系统数据和用户数据,这样能更有效得利用磁盘空间也使得备份工作更加简单,同时有效避免病毒对系统造成的伤害。然而在Vista中的Users目录可没那么幸运,由于M$一贯的妄自尊大、缺乏弹性及严重依赖注册表(Registry)的系统设计,使得Users目录并没有进化到能与/home目录相提并论的地步。但是可以肯定的是: 至少在Vista下用命令行(Command line)访问用户目录时会令你的手指倍感轻松。
a) 对于特殊目录(Special Folders)依据策略2可以使用Location进行实际文件存储的重定向(以Symbol Link实现),以减少占用Vista系统所在分区的磁盘空间。
f-7-a:
b) 在Users目录的当前用户目录下包含一个AppData的目录,主要用于存储Windows的本地化设置和应用程序数据。因此在理论上是可以安全地移除该目录的,但是建议采用以下步骤进行安全清理:首先必须保持AppData的目录结构,即不能删除或重命名AppData的3个子目录: Local, LocalLow, Roaming;其次,在你不清楚错误清理的后果时请先对要操作的目录和文件做好必要的备份;再次,对于Local子目录应尽可能的使用相应的应用程序来完成清理,比如我的Google Chrome在Local目录中占用了近1GiB的磁盘空间,我首先会通过Customize and control Google Chrome>Clear browsing data来清理;最后,在清理Local, LocalLow, Roaming的子目录时如果Vista弹出File In Use对话框,请务必选择Skip。
f-7-b:


8. Program Files目录
对待这个目录你可以安全的使用Program and Features(在XP下称为:添加或删除程序)卸载不再需要的程序。就我个人的卸载原则是:不使用即浪费,对于2个月碰都不碰的程序如果其的安装成本低廉就可以毫不犹豫的对其进行卸载;为不使用并且又唾手可得的东西付款这是可笑的松鼠哲学。有些程序活着的时候是坨屎,卸载后到处都是屎,碰上这种情况你可要劳神了,当然踩上屎的几率和个人的价值观及审美情趣毫无疑议的具有负相关性。如果在卸载过程中出现问题不能正常卸载而该程序又是以Windows Installer安装的,可以考虑使用Windows Installer Cleanup Utility工具,它可以帮助你清理该程序在注册表(Registry)留下的屎点,尽管注册表本身就是个了不起的公厕,最后需要手动清理该程序的安装文件;如果你在卸载过程中碰上了其它问题,那么我要恭喜你,你的Windows很可能因此获得重生。

9. 索引选项
Index Options在Vista下有了很大提高,但是你需要精心地配置索引选项,尽可能在索引占用的磁盘空间,Vista系统性能,搜索文件的性能3者之间取得合适的平衡,然而这需要额外的大量工作。在不触碰Vista默认的索引设置的前提下,依据策略2改变索引数据的存储,通过Index Options>Advanced Options。
f-9:

10. Disk Cleanup工具
Windows磁盘清理工具(Disk Cleanup Tool)是个垂垂老矣的Windows檫屁股程序,Windows补丁导向(Service Packages Oriented)的设计和实现必然导致一大坨檫屁股的程序的存在,这种存在将会伴随Windows愚蠢和羞耻的一生。但是在你决定清理Windows时请优先考虑使用Windows磁盘清理工具,理由就是5. 虚拟内存页面交换文件提到的:就让愚蠢的Windows自己摆弄她那套愚蠢的规则也许是个不得已的好主意。

后记:
本文是3个月前就开始准备,由于这段时间琐事繁多,再加上又不是个勤快的爷们,所以就拖拉到了今天。目前Vista SP2也已发布,昨天我已安装了SP2,但是至今并没有看过任何SP2的文档,也没有研究和体验SP2在SP1的基础上有哪些改进和提高,所以如果SP2对本文的内容涉及到有较大的技术变动时,我只能说非常抱歉。

1. WinDirStat ,有关Windows下磁盘使用情况的分析工具的介绍可以参考Geek to Live: Visualize your hard drive usage
2. 在Vista下-on选项的参数必须和-for选项的参数一致,即同为Vista所在系统分区盘符,在例中为c:,在Windows Server 2008可将SCS存储于由-for选项指定的监视分区不同的-on选项指定的分区上。
3. Symbol/Soft Link(软链接),在Vista中引入的又一Unix-like技术,相当于文件指针。
4. Windows Installer Cleanup Utility,点击下载


6/03/2009

How to re-add database objects into EDMX

When you working on ADO.NET Entity Framework in VS2008, may be there are some things wrong or other else you'll need to re-add database objects into your EDMX. 

You can try the following steps:
1. Delete the Entity from the EDMX Designer's Diagram. Because that is the only way to delete an Entity from EDMX, I don't know why not MS add this function into Model Browser in VS2008.
2. Now, you can see the Entity that had been deleted exists in Model.Store yet. So, you cannot re-add it via 'Update from Database...' .
3. Open EDMX through XML Editor (Right-Click EDMX item in Solution Explorer>Open With...>XML Editor), find the Entity in <edmx:StorageModels> sections, then delete it.

Now, you can re-add database objects into your EDMX.