Archive

Archive for the ‘Linux’ Category

如何对付那些发了疯的蜘蛛们

June 6th, 2010 honnix No comments

最近两天,二奶机经常过热关机,毕竟是老机器了,经不起过高的温度。什么原因呢?top一下发现apache占用CPU高达30%。这就诡异了,我的网站啥时候也没有这么高的访问量啊。查了下access_log,居然有无数的IP来访。whois加上Google,原来是一堆的蜘蛛,大部分来自腾讯和搜狗。简直是疯狗,同时放出几十个蜘蛛来爬,这哪受得了!

我的路由器没有防火墙功能,所以只好在二奶机上弄了。还好上次编内核的时候把iptables编进去了,否则我估计这种天气,内核都编不下去就要关机了。折腾了一番,终于搞定。Gentoo对iptables的支持还不错,emerge了之后/etc/init.d里面就有了启动脚本,简单地看了一下也就会用了。现在我的iptables里面是这种状况,列出来给需要的人参考一下(基本上我把IP在中国的都给踢出去了,谁知道它们在找什么):

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
all  –  anywhere             anywhere
DROP       all  –  124.115.4.0/24       anywhere
DROP       all  –  124.115.0.0/24       anywhere
DROP       all  –  122.194.170.0/24     anywhere
DROP       all  –  114.80.93.56         anywhere
DROP       all  –  122.81.25.8          anywhere
DROP       all  –  123.125.66.0/24      anywhere
DROP       all  –  218.5.3.149          anywhere
DROP       all  –  220.181.94.222       anywhere
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
最后简单说一下iptables的用法,网上到处都是,不多啰嗦了。
iptables -A INPUT -s <ip> -j DROP

很久没更新了,说说翻墙的事儿吧

June 1st, 2010 honnix 6 comments

买了个ssh,淘宝上到处都是,就不说具体哪家了。价格还可以,一个月3块,先来了一个月尝尝。
速度还行,就是有一点比较讨厌,没法保持连接,一段时间idle之后就被断开了,尝试设了一些参数,还是不行,还是写个脚本来干。

?Download wall.expect
#!/usr/bin/expect -f
 
set timeout 30
spawn ssh wall
match_max 100000
expect -re ".*password:.*"
send -- "xxxxxx\r"
send -- "\r\r\r\r"
expect timeout
 
for {} 1 {} {
    send "ls\r"
    expect timeout
}
 
exit 0

其实很简单,就是登录之后每隔30秒就ls一下。估计这样就行了。

Categories: Linux Tags: , , ,

USB邮件提醒器

April 16th, 2010 honnix 2 comments

买了个山寨版的这个玩意儿,软件不爽,随即hack之。libusb+pyusb,搞定。不过Mac下面还不行,kernel的module直接claim设备,不知道怎么unclaim。

然后封装了一个简单的库:

?Download lamp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/python
 
from Queue import Queue
from threading import Thread
 
import usb.core
import usb.util
 
class Singleton(type):
    def __init__(cls, name, bases, dict):
        super(Singleton, cls).__init__(name, bases, dict)
        cls.instance = None
 
    def __call__(cls, *args, **kw):
        if cls.instance is None:
            cls.instance = super(Singleton, cls).__call__(*args, **kw)
 
        return cls.instance
 
class Lamp(object):
    GREEN = 0x01
    RED = 0x02
    BLUE = 0x03
    PURPLE = 0x04
    X = 0x05
    Y = 0x06
    WHITE = 0x07
    __QUIT = -1
 
    __metaclass__ = Singleton
 
    def __init__(self):
        self.t = None
        self.q = None
 
        self.dev = usb.core.find(idVendor = 0x1294, idProduct = 0x1320)
 
        import os
 
        if os.uname()[0] == 'Linux':
            self.dev.detach_kernel_driver(0)
 
        self.dev.set_configuration()
 
    def __worker(self):
        item = self.q.get()
        while item != Lamp.__QUIT:
            if item &gt;= Lamp.GREEN and item &lt;= Lamp.WHITE:
                print item
                data = (item, 0x04, 0x04, 0x04, 0x04)
                self.dev.write(2, data, 0)
 
            self.q.task_done()
            item = self.q.get()
 
    def plug(self):
        if self.q is None:
            self.q = Queue()
            self.t = Thread(target=self.__worker)
            self.t.start()
 
    def unplug(self):
        if self.q is not None:
            self.q.put(Lamp.__QUIT)
            self.t.join()
            self.q = None
            self.t = None
 
    def on(self, color):
        self.q.put(color)
 
    def off(self):
        self.q.put(0x00)
 
if __name__ == '__main__':
    lamp1 = Lamp()
    lamp2 = Lamp()
    lamp3 = Lamp()
 
    lamp1.plug()
    lamp2.plug()
    lamp3.plug()
 
    lamp1.on(Lamp.GREEN)
    lamp1.on(Lamp.RED)
    lamp1.on(Lamp.WHITE)
    lamp1.on(100)
 
    lamp1.unplug()
    lamp2.unplug()
    lamp3.unplug()

忘记还有其它什么颜色了,暂时用X、Y代替吧。

ChromeOS印象

November 22nd, 2009 honnix No comments

启动快,的确是快,虚拟机里面也就是4、5秒的样子。

很多地方可以下到,我就不多说了。VirtualBox里面配的时候要选择这个网卡:Intel Pro/1000 MT Desktop (82540EM)。如果还是登不上去,就用这个用户和密码:chronos/password。具体看这里

基本上就是一个浏览器,跟Google说的一样,所有的东西都在网上,当然,也可以看到硬盘上安装的东西:Ctrl+Alt+t,就可以开一个虚拟终端了。

配置Tor使用Bridge

October 11th, 2009 honnix 2 comments

我比较白痴,首先澄清一个概念,使用Bridge和作为Bridge是两个概念。

  • 使用Bridge是指作为client,使用已有的Bridge连接到网络。
  • 作为Bridge是指把自己变成一个Bridge server。

貌似不能既使用Bridge又作为Bridge。:(

使用Bridge很简单,发送邮件给bridges@torproject.org,邮件title为get bridges,就可以收到一个回复,大概是这样的:

[This is an automated message; please do not reply.]

Here are your bridge relays:

bridge 85.176.137.125:443
bridge 125.121.20.246:9002
bridge 79.182.101.170:8080

Bridge relays (or “bridges” for short) are Tor relays that aren’t listed
in the main directory. Since there is no complete public list of them,
even if your ISP is filtering connections to all the known Tor relays,
they probably won’t be able to block all the bridges.

To use the above lines, go to Vidalia’s Network settings page, and click
“My ISP blocks connections to the Tor network”. Then add each bridge
address one at a time.

Configuring more than one bridge address will make your Tor connection
more stable, in case some of the bridges become unreachable.

Another way to find public bridge addresses is to visit
https://bridges.torproject.org/. The answers you get from that page
will change every few days, so check back periodically if you need more
bridge addresses.

把里面那几行bridge列表加到/etc/tor/torrc文件的最后,再加上一行UseBridges 1。重启tor,如果同时使用privoxy的话把它也重启一下好了。现在的FireFox根本就不需要这个东西了,可以直接使用socket代理。

作为Bridge的话,在/etc/tor/torrc里加上这么几行:

SocksPort 0
ORPort 443
BridgeRelay 1
Exitpolicy reject *:*

自己对照着看看,不要直接加上去。

为什么不作为一个normal relay呢?因为从我们这里出去的话不是在浪费其它人时间么!所以Bridge就行,不要直接出去。

Categories: GFW, Linux, Technology Tags: ,

试了下Ubuntu 9.04

May 16th, 2009 honnix No comments

网上的评价非常之高,合着我不试一下都对不起大伙儿了。

不用Ubuntu好多年了,最初的原因是不对路,Ubuntu全速向桌面进军,而我还是比较喜欢那种“不是很好用”的Linux,但是要开发方便,所以投靠了Gentoo。

近些年来,一直关注Ubuntu,每次发新版本都要定一张光盘,放在公司给同事试用。这次的9.04据说非常好,所以装了一个到虚拟机上玩儿了一把。

感觉不错。傻瓜安装,点几下就成,不需要不停地重启;系统启动确实比较快;compiz集成得很好,系统资源占用不大,唯一的遗憾是compiz-settings-manager不能用,依赖Python2.4或者2.5,即使把依赖的Python装上也不行,反正就是连装都不能装,无奈,只能手动gconf了。

多语言支持还不错,scim安装起来也算方便,但是,我要说但是,英文环境下的中文输入法处理得还不够好。我还需要im-switch一下在$HOME下面生成.xinput.d和相应的软链接,否则很多环境变量就没有设置,输入法也就没法使用。这个门槛儿有点高,好歹做个GUI,让用户选一下自己想用什么输入法,或者干脆就不让选,默认就是SCIM。虽然这样霸道了点,但是用户马上就可以使用。貌似装好SCIM之后还需要重启X,其实也就是logout,这个要求有点不太合理,连Windows都不敢这样干。

还有个小问题,应该是虚拟机的问题,logout和重启的时候虚拟机会crash。

无论如何,Ubuntu做得不错,一般的家庭使用,如果还没有受到Windows的毒害,应该足够了。别跟我废话什么Office,你在家里用Office干什么,都说了人家是叫Office。

Categories: Linux, Technology Tags: , , , ,

今天那叫一个郁闷,让X11给整得头大

May 16th, 2009 honnix No comments

Gentoo,emerge -vuND world,结果X起不来了,现象就是鼠标、键盘完全没有反应,pypanel也出不来。

查log,发现vboxvideo内核模块找不到,于是加到autoload里面(真奇怪,这个模块是新版本的VirtualBox加的吧,原来我没加这个东西到autoload里面,也没有出错),结果还是不行,现象一样。

再查log,发现hal初始化错误:(EE) config/hal: couldn’t initialise context: (null) ((null))。于是核对xorg-server的编译选项,发现果然加入了hal。难道是hal的版本有问题?卸了重装,hal和xorg-server,还是不行。郁闷了~

再仔细一想,hald没有启动,emerge没有把这个东西自动放到default的runlevel里面。启动hald,startx,终于工作了!

还有一点要说的是,X启动之后不能只加载VBoxClient了,需要执行VBoxClient-all这个脚本,至于为什么,自己看看脚本就明白了。这个不兼容有点不爽。

顺便说一句,pypanel挺好用,但是不支持自动resise,也就调整分辨率之后它不会自动resize,有点不爽。尝试了一下hack,但是没有成功,给作者发了封信,看能不能收到回复。

VirtualBox也跟我作对

April 26th, 2009 honnix No comments

虚拟机用光盘怎么都启动不了,最后没办法,直接把光盘做成ISO。

dd if=/dev/dvd of=/tmp/xx.iso

Categories: Linux, Technology Tags: , ,

为了修SLES,费了老劲了

April 26th, 2009 honnix No comments

貌似是update的源不对,所以在update的时候想停下来,结果YaST死活不给面子,自己哼哧哼哧装个不停,于是就Ctrl-z之,然后kill掉,结果,哼哼,YaST彻底不工作了。还好只更新了三个包,手里没有安装盘,于是找啊找的,终于在官网上找到了,强制降级下来,终于搞定了。

算了,以后再也不折腾YaST了。真是不爽!

Categories: Linux, Technology Tags: , ,

对于虚拟机copy还是move的思路

April 11th, 2009 honnix No comments

问题是这样的:

创了一个虚拟机,里面跑SuSE Linux,整个虚拟机拿给别人用的时候,会碰到copy还是move这样的疑问,目前看来,最大的区别在于网卡的MAC地址。如果是copy,MAC地址会重新生成,udev也会重新创建一个网络设备名,原来是eth0的话,现在就是eth1,这个还不是最关键的问题,关键在于SuSE Linux的网络配置文件名是和MAC地址绑定的,所以MAC地址变了,这个配置文件名也要相应地改变;如果是move,MAC地址保持不变,一切都没有问题,但是如果同一个虚拟机在一个主机上move两次,嘿嘿,MAC可就要冲突了。

简单来说,有两个解决方案:

  1. 每次都选择move,根本就不支持一个虚拟机在一个主机上move两次,也就是说,从我这里release出去的不同版本不能同时启动。
  2. 每次都选择copy,提供一个脚本修改网络配置文件名。

对于第二个解决方案,脚本的内容大致是这样:

1
2
3
4
5
6
7
#!/bin/sh
 
suffix=`ifconfig | grep 'HWaddr' | awk '{print tolower($5)}' | sed 's/:/\\:/g'`
 
mv /etc/sysconfig/network/ifcfg-eth-id-* /etc/sysconfig/network/ifcfg-eth-id-$suffix
 
/etc/init.d/network restart
Categories: Linux Tags: , ,