要对机房某台机器进行临时性的 内、外网流量统计分开。这种事最好不要放到应用层统计,因为效率很成问题。第一时间想到处于网络二、三层的工具,效率不会被过多影响。 如ntop之类使用libpcap库的工具。
其实iptables也是有包统计。因为每个包都经过它。而且不用安装任何工具。
加入两条规则:
jessinio@jessinio-laptop:~$ sudo iptables -t filter -A INPUT -p all -s 174.121.79.132 -j ACCEPT
jessinio@jessinio-laptop:~$ sudo iptables -t filter -A OUTPUT -p all -d 174.121.79.132 -j ACCEPT
情况:
jessinio@jessinio-laptop:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- web124.webfaction.com anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere web124.webfaction.com
結果:
jessinio@jessinio-laptop:~$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 11M packets, 5033M bytes)
pkts bytes target prot opt in out source destination
10 2088 ACCEPT all -- * * 174.121.79.132 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 14M packets, 14G bytes)
pkts bytes target prot opt in out source destination
48 25152 ACCEPT all -- * * 0.0.0.0/0 174.121.79.132
Friday, November 26, 2010
Thursday, November 18, 2010
seteuid
# ps axjf|grep -v grep|grep ftp
1 13871 13871 13871 ? -1 Ss 0 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
13871 14146 14146 14146 ? -1 Ss 99 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
14146 14148 14146 14146 ? -1 S 509 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
id是99进程可以产生id为509的进程, 原来fork后, 子进程还是可以调用seteuid切到其它uid的, 这之前还不知道。 如下测试代码:
#!/usr/bin/python
#coding:utf-8
import os
import time
# 同一进程可以从0转成其它的
os.seteuid(99)
os.seteuid(0)
os.seteuid(99)
pid = os.fork()
# child
if pid == 0:
# 子进程还是可以使用seteuid回到0的
os.seteuid(0)
time.sleep(10)
else:
print pid
time.sleep(10)
运行结果:
[jessinio@niowork tmp]$ ps axuf|grep root.py
nobody 28559 0.0 0.0 74192 2912 pts/11 T 13:56 0:00 | \_ python root.py
root 28560 0.0 0.0 74188 1756 pts/11 T 13:56 0:00 | | \_ python root.py
1 13871 13871 13871 ? -1 Ss 0 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
13871 14146 14146 14146 ? -1 Ss 99 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
14146 14148 14146 14146 ? -1 S 509 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
id是99进程可以产生id为509的进程, 原来fork后, 子进程还是可以调用seteuid切到其它uid的, 这之前还不知道。 如下测试代码:
#!/usr/bin/python
#coding:utf-8
import os
import time
# 同一进程可以从0转成其它的
os.seteuid(99)
os.seteuid(0)
os.seteuid(99)
pid = os.fork()
# child
if pid == 0:
# 子进程还是可以使用seteuid回到0的
os.seteuid(0)
time.sleep(10)
else:
print pid
time.sleep(10)
运行结果:
[jessinio@niowork tmp]$ ps axuf|grep root.py
nobody 28559 0.0 0.0 74192 2912 pts/11 T 13:56 0:00 | \_ python root.py
root 28560 0.0 0.0 74188 1756 pts/11 T 13:56 0:00 | | \_ python root.py
Thursday, November 4, 2010
使用strace找出问题根本点
今天想备份一个svn仓库。但是碰到“鬼”了。如下:
$ sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync sync file:///data/repos/xxoo
svnsync: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.
看上去是svn的pre-revprop-change hook出了问题。但是无论我怎么折腾pre-revprop-change hook代码都不给力。
又怀疑是环境变量, 连sudo的-E都使用上了还是一个屁用。
无奈下只能使用strace看看:
$ sudo -u daemon HOME=/tmp strace -f /usr/local/subversion/bin/svnsync sync file:///data/repos/xxoo 2>&1 |less
一定要使用-f, 因为svnsync产生了子进程, 这样可以连子进程都可以被trace。
看到一句相当可疑的trace条目:
[pid 6548] chdir(".") = -1 EACCES (Permission denied)
呃。。。。。细节。原来work directory是~, 切换成daemon运行的svnsync没有权限。。。。。
这样就没有问题了:
$ cd / && sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync sync file:///data/repos/xxoo
真是细节。
$ sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync sync file:///data/repos/xxoo
svnsync: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.
看上去是svn的pre-revprop-change hook出了问题。但是无论我怎么折腾pre-revprop-change hook代码都不给力。
又怀疑是环境变量, 连sudo的-E都使用上了还是一个屁用。
无奈下只能使用strace看看:
$ sudo -u daemon HOME=/tmp strace -f /usr/local/subversion/bin/svnsync sync file:///data/repos/xxoo 2>&1 |less
一定要使用-f, 因为svnsync产生了子进程, 这样可以连子进程都可以被trace。
看到一句相当可疑的trace条目:
[pid 6548] chdir(".") = -1 EACCES (Permission denied)
呃。。。。。细节。原来work directory是~, 切换成daemon运行的svnsync没有权限。。。。。
这样就没有问题了:
$ cd / && sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync sync file:///data/repos/xxoo
真是细节。
Subscribe to:
Posts (Atom)