Skip to content


[转]喜悦村 美国移民之路

http://www.phpx.com/happy/thread-258821-1-1.html 转自村长sadly 个人站长不容易。除了有时间 有热情 没什么资源。

有关部门动辄就一个通知,随时掐你的生命线。

本站由于有论坛,无法完成相关要求现主站已移民至美国 he.net 的 Fremont 机房。 该机房位于美国西海岸的加州Fremont市。

“中美之间的网络电话等数据传输毫无疑问得通过跨域太平洋的海底光缆来进行。目前中美之间有两条直达海底光缆,一条是China-US Cable Network, 网络容量达到了80Gbps,中国大陆登陆点为上海崇明岛和汕头,美国登陆点为加州的San Luis Obispo(位于圣何塞与洛杉矶之间)。还有一条即著名的Trans Pacific Cable,设计容量达到了惊人的5.12Tbps,大陆登陆点为上海(中国电信)和青岛(中国联通),美国登 陆点为俄勒冈州的Nedonna沙滩。两条光缆均已开通商用,但从目前我多次traceroute的结果来看,TPE似乎还没有向一般宽带用户开放。中美之间的带宽增长速度相当惊人,根据CNNIC的统计数据,截至2008年底中国电信与美国之间的带宽为203980MB,而中国网通为110456MB.目前中国电信在北美西海岸的节点有华盛顿州的西雅图,加州的圣何塞,洛杉矶和帕拉阿图。

一般电信/网通用户访问美国站点网络数据传输所走的路线先是本地ISP网络,然后是城域网,接着是各省市网络节点,然后是骨干网,最后从上海等出口出去,跨越一万多公里的浩瀚太平洋后,在美国加州/俄勒冈州登陆。网络延时(latency)在200ms以上。很多人误认为GFW的网络过滤会影响网速,但事实上这种影响可以忽略不计的,网络延时在200ms以上主要还是在于传输距离太长,日本/澳大利亚网民的对美网络延时和大陆用户差不多的,而欧洲用户跨越大西洋一般在100ms以上。如果是你是移动用户的话,带宽资源想对于两大巨头要少的可怜,移动用户一般是先南下到香港连接NTT的节点,然后绕道日本达到美国,网络延时达到了惊人的七八百毫秒。

  这样对于大陆用户来说最佳的机房所在地应该是在西海岸加州,加州的机房最集中的主要有三个,San Jose(圣何塞),Fremont和洛杉矶。其中,San Jose和Fremont都位于湾区,也即是硅谷的入口。 ” (文字为引用,未找到原始出处)

另外,在Dallas 和Seattle由于有光纤连接加州主要的数据交换中心,大陆的访问速度也不错。

 

服务器选址过程及注意事项

基于以上帖子所说的信息,村长开始选择IDC。

大家一般用的工具包括 ping 看ping值, traceroute 看路由线路。 这两个工具都不错,但是要会合理利用。

C:\>ping www.phpx.com -t Pinging www.phpx.com [72.13.82.90] with 32 bytes of data: Reply from 72.13.82.90: bytes=32 time=224ms TTL=51 Reply from 72.13.82.90: bytes=32 time=223ms TTL=51 Reply from 72.13.82.90: bytes=32 time=223ms TTL=51 Reply from 72.13.82.90: bytes=32 time=223ms TTL=51 Reply from 72.13.82.90: bytes=32 time=223ms TTL=51 Reply from 72.13.82.90: bytes=32 time=223ms TTL=51 Reply from 72.13.82.90: bytes=32 time=224ms TTL=51 Reply from 72.13.82.90: bytes=32 time=223ms TTL=51 Reply from 72.13.82.90: bytes=32 time=224ms TTL=51 Reply from 72.13.82.90: bytes=32 time=226ms TTL=51 Ping statistics for 72.13.82.90:     Packets: Sent = 10, Received = 10, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:     Minimum = 223ms, Maximum = 226ms, Average = 223ms

如上ping值的意义: a)主机的IP地址是 72.13.82.90,这个比较简单啦 b)数据包的大小是32个字节 c)最小ping值223毫秒,最大ping值226毫秒,平均 223毫秒 d)累计发送了10个ping包,收到10个,丢失0个,丢失率 0%

测ping值要注意, ping 值只是个参考值,它的大小和用户访问速度有关但并不完全相等, (我在北京联通ping上海电信服务器基本不超过140ms,但是访问速度比美国 还慢。)

ping要关注的是,ping值是否稳定也就是线路是否稳定,如果一条线路最快10ms, 最慢100ms,平均50ms,这条线路绝对是够烂的。

另外重点关注的是丢包率,丢包意味着一个数据发出去但是对端没收到,丢包率 高一般意味着对方带宽用的比较满。

下面说tracert

C:\>tracert www.phpx.com Tracing route to www.phpx.com [72.13.82.90] over a maximum of 30 hops:   1    <1 ms    <1 ms    <1 ms  localhost [192.168.10.1]   2    24 ms    21 ms    23 ms  localhost [10.160.38.1]   3    46 ms    22 ms    12 ms  61.148.45.65   4    31 ms    12 ms     8 ms  61.148.154.237   5    37 ms    25 ms    11 ms  bt-228-021.bta.net.cn [202.106.228.21]   6    50 ms    32 ms    10 ms  202.96.12.25   7    50 ms    56 ms    53 ms  219.158.4.58   8    57 ms    54 ms    41 ms  219.158.5.134   9   226 ms   279 ms   223 ms  219.158.25.26 10   249 ms   276 ms   222 ms  gige-g5-7.core1.sjc2.he.net [216.218.209.113] 11   223 ms   294 ms   234 ms  10gigabitethernet1-1.core1.fmt1.he.net [72.52.92 .109] 12   225 ms   224 ms   237 ms  10gige1-1.fmt1.egihosting.com [64.71.129.70] 13   225 ms   224 ms   249 ms  72.13.82.90 Trace complete.

traceroute (linux) tracert (win) 用来跟踪从用户端发出的数据到达对端经过了 哪些路由节点。

请注意    9   226 ms   279 ms   223 ms  219.158.25.26 ,这一行,他的ip是中国 网通的,但它并不在中国,到这里数据实际已经到达了中美海缆的美国登陆点。

tracert的意义在于,知道从你这里出发是怎么到达服务器的,譬如北京从家里到天津,可以有 多条路有多种走法,坐公车可能要2个小时(可能要转乘市内公交,相当于路由节点增加了), 开车可能要1个小时,坐城际特快可能要30分钟。

虽然路径的两端一致,但是总共所花费的时间却很大不同。

数据传递所经过的节点越多,出错的概率就越大,好比你做公交车,换来换去的走到某一段路赶上那堵车,速度就超慢了。

但是所经过的节点少也不完全等于快,好比你家门口两条路,可以从门口的广场直接到1公里以外 的单位,也可以从另一边的公园里绕到单位的另一侧再往回走。 可是广场上有活动人超多(带宽阻塞了),走不快,而公园里很空,这样虽然绕了路(多了中间节点),但花费的时间却很少。

 

上面说过了IDC选址的基本出发点和测试工具。

不过呢,要想知道一个地方是不是合适,最重要的办法,还是让潜在用户群直接访问看效果。 当然,可以是显式的(如村长经常在群里请大家帮忙测试某个网站的速度)也可以是隐式的(如监控宝工具)。

村长将着眼点放在了   The planet的Dallas机房, Softlayer的Dallas机房,Seattle机房, Peer1的Los Angeles机房, He.net的Fremont等几个地方。

这几个机房都是属于带宽、实体面积都比较大的独立服务商,企业实力比较雄厚,不太会出现跑路的情况。

村长选择了主机以上机房的多个客户网站,请大家做了测试,也使用很多工具做了自动测试。 最后的综合结论是各家都不错,但是Theplanet,Peer1的机房方向性比较强,有的地方很快,有的地方很慢。 另外的两个相对来说,各地访问速度比较均衡。

Softlayer的用户也比较多,购买也方便。He.net几乎是专心运营骨干网的,租用服务器的价格高的吓人。 于是村长决定先在Softlayer Seattle做个更长时间的实际访问测试,荷包不鼓啊不能直接租独服 做测试用,找个二级代理商租个VPS算了。

这样 sea.phpx.com 就诞生了,这是假设在一台 openvz 基础上的vps服务器,内存512M,流量500G每月。

这里来说一下VPS, 村长想大部分人都用过vmware吧? 就是那个意思。 把一台物理的服务器分隔成多个逻辑独立的虚拟服务器,每个虚拟服务器也就是VPS都有自己的 CPU,内存,硬盘,可以单独的安装不同的操作系统,应用程序。 那台物理的主机被称为母机。

VPS的核心技术是虚拟化,包括虚拟机(如vmware,virtual pc) ,准虚拟化(如XEN),全虚拟化 (如Virtuozzo/OpenVZ), 这方面说起来很长,大家自己百度学习吧。

这里强调一下,首先母机的挂掉会直接的让所有的vps都挂掉,这个不难理解:)

然后,虚拟机毕竟不是实体的,有仿真损耗,性能要平均损失20%左右。

再然后,基于XEN软件的vps分配的是独占资源,也即1G的内存分配512M的vps只能分配4个, 基于OpenVZ软件的vps分配的是共享资源,也即1G的内存可以分配多余4个VPS。 因此OpenVZ的VPS是可以超售(over selling)的,一旦一台母机上的vps子机都来请求资源就会 使用硬盘模拟内存,性能急剧下降,有可能挂掉。

最后,也是最重要的,vps不是物理机,你的所有数据只是对应到母机的一个文件夹下相应的目 录树而已。比如你的 /etc/iptables 可能对应的就是 /vz/vps000/etc/iptables 。 因此你的所有数据对于母机而言是完全暴露的,母机管理员还可以通过工具直接进入你的vps运 行中环境而不需要把他们停机,这也不会在你的系统上留下任何log。 所以万不可把私密的数据放在那里,倒不是说母机管理员会盗你的数据,而是一旦母机被黑客攻 击,就全玩完了,你自己在vps上做再多的安全设置都保护不了。 。

还有一点,无论物理机,还是vps,都存在硬件或者仿真硬件失效的可能性,经常做数据备份是 个好习惯。

好啦,下面继续说村子,有了VPS又不能把重要数据放在上面,那么Nginx就该上场了。 村长于是在西雅图的vps上用nginx做了一个反向代理,直接从北京联通的服务器上取网页数据 送给用户。 因为没有数据库,php这些,所以512M跑这个简直就是小菜一碟啦。

大家对cdn还是有误区,这个诞生于网络带宽匮乏的Web1.0时代的产物。 大家都认为它是搞静态的,比如新闻,把服务器上的文件取下来放在自己这缓存下来, 然后用户请求的时候就从自己的缓存发给用户而不用去服务器上取了。

这是老观念了。实际上,你用Nginx对网站做个反向代理,不带缓存,就是个动态的CDN了。 那这样每次都去一对一的请求,也没有节省服务器的web请求啊,还浪费了更多带宽,这不是 瞎折腾吗?

不是这样的!它是解决了访问速度的问题。 上一次说tracert的时候,村长提到过, 访问节点少的路径未必是最快的。 一个北京的用户走公开路径去访问上海A机房里的网站速度很慢, 但是他从北京访问北京机房的B机房的服务器, 再由B机房的服务器做A机房的网站的反向代理 传输数据这样却可能很快。

这是为啥呢? 因为IDC之间和用户到IDC直接走的路径是不同的,这条路径上的带宽状况要好的多。 这也是为什么你家里安装了上行4Mbps的ADSL开个网站,用户访问速度也远比在IDC里租个1Mbps 的带宽慢的原因。

 

今天说点简单的。 大家租服务器的时候经常遇到,端口、带宽这种问题。 在此细讲一下。 100Mbps端口指的是你的主机接在交换机的100Mbps端口上,它为你提供了支持大峰值 访问条件。 如果是10Mbps端口,则指的是你的主机接在交换机的10Mbps端口上,这样,你的最大 峰值就是10Mbps,冲不上去了。 而带宽是指你可以使用的数据流量,这个有用 带宽速率 和 数据量两种表达方式。 譬如本站Fremont的服务器,网络方面的限制是 100Mbps端口,月数据流量2000GB,超出部分$1/GB 数据流量2000GB,折合成带宽限制就是 2000GB/30天/86400秒* 1024  (1GB=1024MB) * 8 (1Byte =1 bits) = 6.32Mbps 换言之,相当于一个全天24小时满载的独享6.32Mbps带宽。 那既然用量这么低为什么端口是100Mbps呢? 大家都知道,网站的访问是有明显的峰 谷效应的, 白天人多的时候可能有几千人,晚上则可能只有几十个人。 这样,如果你租的是一个独享6.32Mbps的线路,那白天繁忙的时候一定是不够用的。 现在计算一下: 100Mbps端口,意味着你全天24小时满载每月数据流量可以达到32400GB,提供了 更好的峰值带宽。 10Mbps端口,意味着你全天24小时满载每月数据量可以达到3240GB,限制了最大 可能发生的费用。 另外租主机的时候,要注意 10Mbps unmetered port ,10Mbps bandwidth, 这是两个不同的概念。 10Mbps unmetered port 指的是给你的主机接在10Mbps的交换机端口上,带宽不限, 也就是最大可以跑3240GB 10Mbps bandwidth 指的是以速率方式计算带宽用量,月平均速度不高于10Mbps, 也就是实际可以跑到3240GB。 如果服务商没有明确的说明,最好问一下,以免发生不必要的麻烦。 然后,请注意一下服务商是全额计数据流量,还是95%计费法,(称作 95th percentile) 95%计费法是对用户比较有利的,也是一般服务商采用的。 简单的说,就是在一个月的计费周期里的,把带宽使用量按每五分钟统计一次(以bps速率计), 然后去掉最高的5%,而剩下的95%就是要付费的使用量。 你注意看MRTG 或者 CACTI 的流量图表里,那个偶然高上去的毛刺,最后一般 都会被平均掉。 本村用的100Mbps端口,然后每天清晨做数据备份的时候,实时带宽速率达到过80Mbps, 哈哈,这远高于平均速率,所以最后肯定被去掉了,于是一个月就省去了100GB左右的数据流量。 最后,请注意以上说的都是主机和IDC内部交换机的连接,带宽也是指的最大可能带宽。 机房的出口将会是最后限制,比如一个机房他的出口带宽就2Gbps,但它在机房里卖了 50个100Mbps独享带宽的机柜,大家无非就是在2Gbps的范围内抢罢了,不会都能跑 到100Mbps的。 所以机房出口越大越好。 当然还有接入商的问题,美国有很多带宽运营商,所以机房是单线接入,还是多线接入也 是个需要考虑的问题。

Posted in IDC.

Tagged with .


yum卸载X window

查看已安装的包

yum list installed

卸载X window

yum groupinstall “X Window System”

卸载时的包会比安装的包少,install 对应的是“包所依赖的”包,remove对应“包被依赖的”包。

Posted in linux 维护优化, 技术.

Tagged with .


nginx反向代理多个域名(虚似主机)

nginx反向代理同一ip多个域名,给header加上host就可以了

proxy_set_header Host $host;

nginx.conf例子

upstream mysvr { server 127.0.0.1:8080; } server { listen 80; server_name servera.c1gstudio.com; index index.html index.htm index.php; root /opt/htdocs/www; location / { proxy_pass http://mysvr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name serverb.c1gstudio.com; index index.html index.htm index.php; root /opt/htdocs/www; location / { proxy_pass http://mysvr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Posted in Nginx, 技术.

Tagged with , .


phpize不重新编译PHP实现扩展的安装

当php已经编译好在运行,又不想停机重新编译时可用此方法增加扩展。 增加自已写的库也可用此方法,参考HonestQiao 的记录 http://chinaunix.net/jh/27/547568.html

php之前的编译环境, 增加运行phpmsnclass需mhas和pcntl库为例

1.先下载类库 cd /home/c1g/src/

wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz wget http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz

2.编译安装类库

tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure make make install /sbin/ldconfig cd libltdl/ ./configure –enable-ltdl-install make make install cd ../../ tar zxvf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9/ ./configure make make install cd ../ ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 tar zxvf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ /sbin/ldconfig ./configure make make install cd ../

3.开始编译安装mhash扩展 进入php原始编译目录

cd /home/c1g/src/php-5.2.6/ext/mhash /opt/php/bin/phpize #会有以下信息生成,并产生编译文件 #Configuring for: #PHP Api Version: 20041225 #Zend Module Api No: 20060613 #Zend Extension Api No: 220060519 ./configure –with-php-config=/opt/php/bin/php-config make make install

生成的mhash.so会存下以下目录 Installing shared extensions: /opt/php/lib/php/extensions/no-debug-non-zts-20060613/

4.安装pcntl

cd ../pcntl /opt/php/bin/phpize ./configure –with-php-config=/opt/php/bin/php-config make make install

生成的pcntl.so会存下以下目录 Installing shared extensions: /opt/php/lib/php/extensions/no-debug-non-zts-20060613/

5.编辑php.ini,指定好扩展的目录和需加载的库

extension_dir = “/opt/php/lib/php/extensions/no-debug-non-zts-20060613/” extension=”mhash.so” extension=”pcntl.so”

6.重新reload一下php

7.检查下是否已生效 /opt/php/bin/php -m

[PHP Modules] bcmath ctype curl date dom filter gd hash iconv json libxml mbstring mcrypt memcache mhash mysql mysqli pcntl pcre PDO pdo_sqlite posix Reflection session shmop SimpleXML SPL SQLite standard sysvsem tokenizer XCache xml xmlreader xmlwriter zlib [Zend Modules] XCache

参考: http://blog.s135.com/nginx_php_v5/ http://blog.csdn.net/sdomain/archive/2009/09/04/4520425.aspx

Posted in PHP, 技术.

Tagged with , , .


snmpd输出日志的过滤

messages会有很多snmpd的信息,影响阅读正常信息 #tail /var/log/messages

Jan 19 10:01:07 touran snmpd[4033]: Received SNMP packet(s) from UDP: [127.0.0.1]:5392 Jan 19 10:01:07 touran snmpd[4033]: Connection from UDP: [127.0.0.1]:5392 Jan 19 10:01:07 touran last message repeated 10 times Jan 19 10:04:09 touran snmpd[4033]: Connection from UDP: [127.0.0.1]:5396 Jan 19 10:04:09 touran snmpd[4033]: Received SNMP packet(s) from UDP: [127.0.0.1]:5396 Jan 19 10:04:09 touran snmpd[4033]: Connection from UDP: [127.0.0.1]:5396 Jan 19 10:06:07 touran last message repeated 11 times Jan 19 10:06:07 touran last message repeated 11 times

我们可以重新定义snmpd的日志输出级别来降低垃圾信息 我这里是centos的系统 #vi /etc/init.d/snmpd

OPTIONS=”-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a”

修改此行为下面

OPTIONS=”-LS 0-4 d -Lf /dev/null -p /var/run/snmpd.pid -a”

重启snmpd #/etc/init.d/snmpd restart

详细的参数意思 可以用 man snmpd和man snmpcmd来查看 man snmpcmd中对日志等级的定义 0 or ! for LOG_EMERG, 1 or a for LOG_ALERT, 2 or c for LOG_CRIT, 3 or e for LOG_ERR, 4 or w for LOG_WARNING, 5 or n for LOG_NOTICE, 6 or i for LOG_INFO, and 7 or d for LOG_DEBUG.

参考:http://www.diybl.com/course/6_system/linux/Linuxjs/2008930/146976.html

Posted in linux 维护优化, 技术, 日志.

Tagged with , .


使用fail2ban来阻止Ssh暴力入侵

fail2ban可以设置对方密码失败n次后用防火墙屏蔽n分钟, 写入日志中,并可邮件你。 时间到后会恢复iptables,很干净

http://sourceforge.net/projects/fail2ban/files/ http://www.fail2ban.org/

目前最新版为0.8.4

下载安装 wget “http://downloads.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2?use_mirror=ncu” #tar xvfj fail2ban-0.8.4.tar.bz2 #cd fail2ban-0.8.4 #python setup.py install #cp ./files/redhat-initd /etc/init.d/fail2ban #./files目录下还有供其它系统使用的文件如:getoon,suse等 #chkconfig –add fail2ban #添加开机启动 #chkconfig –list |grep fail2ban #检查一下是否已装载到服务

修改配置文件

/etc/fail2ban/fail2ban.conf 可以定义日志记录级别,保存路径及套接字文件,这个使用默认 #vi /etc/fail2ban/jail.conf

ignoreip = 127.0.0.1 # 忽悠 IP范围 如果有二组以上用空白做为间隔 bantime = 600 # 设定 IP 被封锁的时间(秒),如果值为 -1,代表永远封锁 findtime = 600 # 设定在多少时间内达到 maxretry 的次数就封锁 maxretry = 3 # 允许尝试的次数 [ssh-iptables] #针对sshd暴力入侵防护 enabled = true # 开启 filter = sshd action = iptables[name=SSH, port=6022, protocol=tcp] #我的sshd port为6022 # sendmail-whois[name=SSH, [email protected], [email protected]] #不发送邮件 logpath = /var/log/secure #ssh 失败日志路径 maxretry = 3 #重试次数

#service fail2ban start 注:如果重起iptables 记的一定还要重起fail2ban(fail2ban-client reload),不然他就不能生效,fail2ban的过滤表是在iptables 启动后在加入的.

测试 #tail -f /var/log/secure /var/log/fail2ban.log ==> /var/log/secure <== Jan 13 17:02:02 localhost sshd[24207]: Failed password for c1g from 192.168.1.8 port 10270 ssh2 Jan 13 17:02:12 localhost last message repeated 2 times Jan 13 17:02:19 localhost sshd[24287]: Failed password for c1g from 192.168.1.8 port 10398 ssh2 Jan 13 17:02:28 localhost last message repeated 2 times Jan 13 17:02:35 localhost sshd[24322]: Failed password for c1g from 192.168.1.8 port 10447 ssh2

==> /var/log/fail2ban.log <== 2010-01-13 17:02:36,849 fail2ban.actions: WARNING [ssh-iptables] Ban 192.168.1.8

==> /var/log/fail2ban.log <== 2010-01-13 17:12:36,852 fail2ban.actions: WARNING [ssh-iptables] Unban 192.168.1.8

#fail2ban-client status ssh-iptables

Status for the jail: ssh-iptables |- filter | |- File list: /var/log/secure | |- Currently failed: 0 | `- Total failed: 4 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 1 配置日志 写一个logrotate的配置文件,并拷贝成/etc/logrotate.d/fail2ban,用来定期清理日志文件 /var/log/fail2ban.log { missingok notifempty size 30k create 0600 root root postrotate /usr/bin/fail2ban-client reload 2> /dev/null || true endscript } 参考 http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jail_Options http://allblue.mllm.org/node/186 http://www.lsanotes.cn/fail2ban

Posted in linux 维护优化, 安全, 技术.

Tagged with , .


对apache 访问日志排序练习

记录一下练习 假设多台web服务器的日志合并在一起,需按日期重新排序。

样列:

127.0.0.1 – – [01/Dec/2005:14:00:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:01:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:05:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:04:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:15:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 207.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32 227.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32 217.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2004:14:12:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Feb/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Jan/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Jan/2004:14:22:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32

开始的想法: 不知道sort还可以分段排序, 所以先替换成一定规则,用awk提到行首,再用sort排序 然后清除行首排序字符,再替换成原来的样子。 缺点: 不能对年和月排序,效率慢,代码很傻

cat http.log |sed -e ‘s#\[#:#’ -e ‘s#/#:#’ -e ‘s#/#:#’ -e ‘s# +800]#:#’|awk -F: ‘{print $2$5$6$7″|”$0}’|sort -n|cut -d’|’ -f2|sed -e ‘s/:/[/’ -e ‘s#:#/#’ -e ‘s#:#/#’ -e ‘s/: “/ +0800]” /’

最简单的方法: 按空格分割后对第四列排序 缺点: 日志中的月份为英文,跨月后排序可能不正确,但速度很快

cat http.log |sort -t” ” -k4

改进型: 对年月时间进行多列排序 缺点: 算位不太好算,速度也不快,但是解决了日期排序

export LC_ALL=POSIX cat http.log |sort -t’ ‘ -f -i -k 4.9,4.12n -k 4.5,4.7M -k 4.2,4.3n -k 4.14

#LC_ALL未声明可能会在排序月份再排日时显示错误顺序

输出结果

127.0.0.1 – – [01/Jan/2004:14:22:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2004:14:12:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Jan/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Feb/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:00:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:01:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 207.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32 217.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32 227.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:04:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:14:05:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32 127.0.0.1 – – [01/Dec/2005:15:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32

参考 http://www.gnu.org/software/coreutils/faq/#Sort-does-not-sort-in-normal-order_0021 http://www.softpanorama.org/Tools/sort.shtml http://www.phpman.info/index.php/info/sort http://www.technow.com.hk/bash-shell-use-sort http://www.chedong.com/tech/rotate_merge_log.html

Posted in shell, 技术.

Tagged with , , .


[转]使用php,js来对内容做rsa加密

作者:virushuo 发表于 2009-12-27 18:12 最后更新于 2009-12-27 21:12 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://code.google.com/p/phpjsrsa/ 这是一个用于文本加密的库,主要用于http协议下的防窃听。一般来说,如果应用https协议可以有效的避免窃听。但有几种情况必须考虑。 (1) 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求,全面转向https。 (2) 主机并没有https支持。 很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。 换言之,一个网站如果把自己的内容都变成字母和数字的组合,且不使用https协议,那么他就是数字森林中的一片树叶,丝毫不引人注意。 我们的目标应该是传输过程中不引人注意,并非绝对的不可破解的安全。 因此这个库的工作流程是: 1 php对”内容”做rsa加密->将加密结果输出到页面上。 2 用户浏览页面,html代码中的”内容”被加密成数字形态。私钥可以直接输出在页面代码中,也可由用户输入一次,保存在cookie中。使用cookie会降低密钥泄露的危险,更加有效。 3 通过javascript在用户浏览器上将这些数字解密为内容。 4 通过javascript dom来把内容写回到页面上。用户即可浏览。 利用javascript解密,可以把运算负担分散到客户端上。窃听者如要窃听每一个页面的内容,则必须要 1 获得密钥 2 用密钥解密内容 在已知密钥情况下,如客户端的每个页面运算负担为 1 ,页面数量n ,那么窃听者获得密钥之后的运算负担为 1*n。 为了运算效率,使用小质数作为rsa的p,q,理论上窃听者可以通过因数分解算出密钥,其运算负载为k,注意k 远远大于1。 如果每个站点使用不同的密钥,共计m个站点,窃听者的运算负担为 m*k+1*n,且负载集中。 而,如果采用双向可逆加密方法,在得知算法的情况下,窃听者运算负载极小。如果在通过变换算法来增加难度,又无法做到通用,给用户正常浏览造成困难。使用rsa方法,算法是标准的,用户使用成本很低,窃听成本很高。 在项目代码中,我已经实现了这一目标。但仍然有效率问题。 目前问题: 1 在没有bcmath和gnumath函数的php主机上,php加密内容的运算效率很低。和bcmath差距几十倍。好在大部分情况下,主机都是有bcmath函数的。这个问题不严重。 2 JS的bigint运算效率很低,主要是powmod的效率低,而这是rsa解密最频繁的操作。 希望有兴趣的朋友加入这个项目。效率问题解决后,还需要port在一系列常用软件上。比如dabr或twitese等。 另外,需要的质数可以在 http://www.prime-numbers.org 找。 我放了一个demo在: http://blog.devep.net/rsatest/test.php 可以看html代码,里面是没有中文内容的。 update: 使用了 http://www-cs-students.stanford.edu/~tjw/jsbn/ 的大数运算库,效率提高很多。

Posted in JavaScript/DOM/XML, PHP, 技术.

Tagged with , , .


discuz论坛找出贴子中所有外部链接

最近风声很紧,要自查下bbs中包含外链的贴子,以下为sql语句。

SELECT pid, fid, tid, author, authorid, FROM_UNIXTIME( dateline ) AS time, subject, message FROM `cdb_posts` WHERE `message` REGEXP ‘.*http://[^bbs.domain.com].*’

REGEXP为排除自已的域名。 500W贴子执行时间在0.1秒左右,速度还算可以。 在phpmyadmin下搜出结果后,打开翻页下面的options,选中”完整文字”就可以看到完整贴子,再配合后台的禁止用户和删贴功能就可以把垃圾消灭了。

ps:如果执行速度比较慢可以加上pid的限制或者先导出到一个临时表中。

Posted in Discuz/Uchome/Ucenter, 其它.

Tagged with , .


linux下用mii-tool和ethtool 查看网线是否正确连接到网卡

输入mii-tool可以查看网线是否连接到网卡 #mii-tool

eth0: negotiated 100baseTx-FD, link ok

有时驱动可能不支持会出错下列错误 #mii-tool

SIOCGMIIPHY on ‘eth0’ failed: Operation not supported no MII interfaces found

可以使用ethtool查看 #ethtool eth0

Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000033 (51) Link detected: yes

Link detected: yes为正常no为失败

Posted in Linux 命令, 技术.

Tagged with , .