linux
备忘脚本
date取得分钟数
$(()) 运算
date取得分钟数
$(()) 运算
#execute every 5 minutes
a=`date +%M`
b=$(( $a % 5 ))
if [ $b = 0 ] ; then
echo "execute it"
else
echo "Not execute"
fi
a=`date +%M`
b=$(( $a % 5 ))
if [ $b = 0 ] ; then
echo "execute it"
else
echo "Not execute"
fi
官方介绍:
MogileFS分布式文件存储系统,是由Six Apart所开发的,下面我们就来列出他的一些特性进行简要介绍。
应用层——不需要特殊的核心组件
无单点失败——mogileFS分布式文件存储系统安装的三个组件(存储节点、跟踪器、跟踪用的数据库),均可运行在多个 机器上,因此没有单点失败。(你也可以将跟踪器和存储节点运行在同一台机器上,这样你就没有必要用4台机器)推荐至少两台机器。
自动的文件复制——基于不同的文件“分类”,文件可以被自动的复制到多个有足够存储空间的存储节点上,这样可以满足这个“类别”的最少复制要求。比如你有一个图片网站,你可以设置原始的JPEG图片需要复制 至少三份,但实际只有1or2份拷贝,如果丢失了数据,那么mogileFS分布式文件存储系统可以重新建立遗失的拷贝数。用这种办法,MogileFS(不做RAID)可以节约磁盘,否则你将存储同样的拷贝多份,完全没有必要。
“比RAID好多了”——在一个非存储区域网络的RAID(non-SAN RAID)的建立中,磁盘是冗余的,但主机不是,如果你整个机器坏了,那么文件也将不能访问。 mogileFS分布式文件存储系统在不同的机器之间进行文件复制,因此文件始终是可用的。
MogileFS分布式文件存储系统,是由Six Apart所开发的,下面我们就来列出他的一些特性进行简要介绍。
应用层——不需要特殊的核心组件
无单点失败——mogileFS分布式文件存储系统安装的三个组件(存储节点、跟踪器、跟踪用的数据库),均可运行在多个 机器上,因此没有单点失败。(你也可以将跟踪器和存储节点运行在同一台机器上,这样你就没有必要用4台机器)推荐至少两台机器。
自动的文件复制——基于不同的文件“分类”,文件可以被自动的复制到多个有足够存储空间的存储节点上,这样可以满足这个“类别”的最少复制要求。比如你有一个图片网站,你可以设置原始的JPEG图片需要复制 至少三份,但实际只有1or2份拷贝,如果丢失了数据,那么mogileFS分布式文件存储系统可以重新建立遗失的拷贝数。用这种办法,MogileFS(不做RAID)可以节约磁盘,否则你将存储同样的拷贝多份,完全没有必要。
“比RAID好多了”——在一个非存储区域网络的RAID(non-SAN RAID)的建立中,磁盘是冗余的,但主机不是,如果你整个机器坏了,那么文件也将不能访问。 mogileFS分布式文件存储系统在不同的机器之间进行文件复制,因此文件始终是可用的。
简单笔记一下,运行出错:
下载安装即可:
文件下载:Gisle Aas > Unicode-String > Unicode::String
root@aslibra:~# ./axml2xml.pl
Can't locate Unicode/String.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./axml2xml.pl line 24.
BEGIN failed--compilation aborted at ./axml2xml.pl line 24.
Can't locate Unicode/String.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./axml2xml.pl line 24.
BEGIN failed--compilation aborted at ./axml2xml.pl line 24.
下载安装即可:
root@aslibra:/Data/tgz# wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Unicode-String-2.09.tar.gz
root@aslibra:/Data/tgz# tar xfz Unicode-String-2.09.tar.gz
root@aslibra:/Data/tgz# cd Unicode-String-2.09
root@aslibra:/Data/tgz/Unicode-String-2.09# perl Makefile.PL
root@aslibra:/Data/tgz/Unicode-String-2.09# make
cp String.pm blib/lib/Unicode/String.pm
cp lib/Unicode/CharName.pm blib/lib/Unicode/CharName.pm
......
Manifying blib/man3/Unicode::String.3pm
Manifying blib/man3/Unicode::CharName.3pm
root@aslibra:/Data/tgz/Unicode-String-2.09# make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.10.0/auto/Unicode/String/String.bs
Installing /usr/local/lib/perl/5.10.0/auto/Unicode/String/String.so
Installing /usr/local/lib/perl/5.10.0/Unicode/String.pm
Installing /usr/local/lib/perl/5.10.0/Unicode/CharName.pm
Installing /usr/local/man/man3/Unicode::CharName.3pm
Installing /usr/local/man/man3/Unicode::String.3pm
Writing /usr/local/lib/perl/5.10.0/auto/Unicode/String/.packlist
Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod
root@aslibra:/Data/tgz# tar xfz Unicode-String-2.09.tar.gz
root@aslibra:/Data/tgz# cd Unicode-String-2.09
root@aslibra:/Data/tgz/Unicode-String-2.09# perl Makefile.PL
root@aslibra:/Data/tgz/Unicode-String-2.09# make
cp String.pm blib/lib/Unicode/String.pm
cp lib/Unicode/CharName.pm blib/lib/Unicode/CharName.pm
......
Manifying blib/man3/Unicode::String.3pm
Manifying blib/man3/Unicode::CharName.3pm
root@aslibra:/Data/tgz/Unicode-String-2.09# make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.10.0/auto/Unicode/String/String.bs
Installing /usr/local/lib/perl/5.10.0/auto/Unicode/String/String.so
Installing /usr/local/lib/perl/5.10.0/Unicode/String.pm
Installing /usr/local/lib/perl/5.10.0/Unicode/CharName.pm
Installing /usr/local/man/man3/Unicode::CharName.3pm
Installing /usr/local/man/man3/Unicode::String.3pm
Writing /usr/local/lib/perl/5.10.0/auto/Unicode/String/.packlist
Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod
文件下载:Gisle Aas > Unicode-String > Unicode::String
Dnsmasq是一个很实用的小工具,解决局域网的需求看来非常合适,特别是网关和防火墙上。
它可以提供如下几个实用的功能:
1 提供dns服务
2 优先使用本地自定义dns
3 提供dhcp服务
一般情况下,我们可以用bind解决dns的问题,dhcpd解决dhcp的问题,另外,还可以用ypbind解决自定义hostname解析的ip(当然还有用户的功能),它都解决了!很实用吧?这真的很吸引人,况且它一直在更新维护,最新版本是6月份的。
安装过程很简单:
运行起来就可以解决第一个问题:
默认情况下,作为dns服务,第一个问题解决了。
我们尝试解决第二个问题,可以说是dns劫持?没有那么严重,用好了其实很实用。
有如下几个问题比较棘手:
1 局域网有很多机器希望使用一份一样的hosts定义一批名称对应的ip,你需要经常维护这份列表
2 你希望局域网的人访问某个域名时,拦截下来到指定的ip,做缓存节省带宽或者其它用途都可以
3 禁止某个域名的正常解析
这个更改涉及两个文件:
1 /etc/hosts
2 /etc/dnsmasq.conf
我们先在hosts文件里加入两行:
编辑dnsmasq.conf,找到如下代码:
重启dnsmasq即可,下面我们在局域网另外一个机器用dig命令测试一下:
它可以提供如下几个实用的功能:
1 提供dns服务
2 优先使用本地自定义dns
3 提供dhcp服务
一般情况下,我们可以用bind解决dns的问题,dhcpd解决dhcp的问题,另外,还可以用ypbind解决自定义hostname解析的ip(当然还有用户的功能),它都解决了!很实用吧?这真的很吸引人,况且它一直在更新维护,最新版本是6月份的。
安装过程很简单:
wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.55.tar.gz
tar xfz dnsmasq-2.55.tar.gz
cd dnsmasq-2.55
make
make install
cp dnsmasq.conf.example /etc/dnsmasq.conf
tar xfz dnsmasq-2.55.tar.gz
cd dnsmasq-2.55
make
make install
cp dnsmasq.conf.example /etc/dnsmasq.conf
运行起来就可以解决第一个问题:
[root@aslibra dnsmasq-2.55]# dnsmasq
[root@aslibra dnsmasq-2.55]# netstat -nlp|grep dnsmasq
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 25584/dnsmasq
tcp 0 0 :::53 :::* LISTEN 25584/dnsmasq
udp 0 0 0.0.0.0:53 0.0.0.0:* 25584/dnsmasq
udp 0 0 :::53 :::* 25584/dnsmasq
[root@aslibra dnsmasq-2.55]# netstat -nlp|grep dnsmasq
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 25584/dnsmasq
tcp 0 0 :::53 :::* LISTEN 25584/dnsmasq
udp 0 0 0.0.0.0:53 0.0.0.0:* 25584/dnsmasq
udp 0 0 :::53 :::* 25584/dnsmasq
默认情况下,作为dns服务,第一个问题解决了。
我们尝试解决第二个问题,可以说是dns劫持?没有那么严重,用好了其实很实用。
有如下几个问题比较棘手:
1 局域网有很多机器希望使用一份一样的hosts定义一批名称对应的ip,你需要经常维护这份列表
2 你希望局域网的人访问某个域名时,拦截下来到指定的ip,做缓存节省带宽或者其它用途都可以
3 禁止某个域名的正常解析
这个更改涉及两个文件:
1 /etc/hosts
2 /etc/dnsmasq.conf
我们先在hosts文件里加入两行:
192.168.1.3 server1
192.168.1.2 www.aslibra.com
192.168.1.2 www.aslibra.com
编辑dnsmasq.conf,找到如下代码:
# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
local=/localnet/
# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
#address=/doubleclick.net/127.0.0.1
address=/baidu.com/127.0.0.1
# from /etc/hosts or DHCP only.
local=/localnet/
# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
#address=/doubleclick.net/127.0.0.1
address=/baidu.com/127.0.0.1
重启dnsmasq即可,下面我们在局域网另外一个机器用dig命令测试一下:
什么是DHCP服务?
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。
安装和配置DHCP
以ubuntu为例,其余linux版本类似。
1 安装dhcp服务软件
2 修改服务配置
ubuntu下可以指定只监听哪个网卡:
vi /etc/default/dhcp3-server
3 编辑主配置文件:
4 启动服务
检查DHCP客户端都有哪些
你可以检查 /var/lib/dhcp3/dhcpd.leases 文件,知道当前的客户端,可这样不方便。
我用PHP写了一个脚本,方便查看客户端列表,大家可以参考:
源代码 source code - 演示地址 demo
参考阅读
1 http://baike.baidu.com/view/7992.htm
2 dhcpd.conf MAN配置手册
3 英文参考 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch14s10.html
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。
安装和配置DHCP
以ubuntu为例,其余linux版本类似。
1 安装dhcp服务软件
apt-get install dhcp3-server
2 修改服务配置
ubuntu下可以指定只监听哪个网卡:
vi /etc/default/dhcp3-server
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
3 编辑主配置文件:
root@aslibra:~# cat /etc/dhcp3/dhcpd.conf
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.253;
option domain-name-servers 192.168.1.1, 8.8.8.8;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 3600;
max-lease-time 36000;
}
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.253;
option domain-name-servers 192.168.1.1, 8.8.8.8;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 3600;
max-lease-time 36000;
}
4 启动服务
/etc/init.d/dhcp3-server start
检查DHCP客户端都有哪些
你可以检查 /var/lib/dhcp3/dhcpd.leases 文件,知道当前的客户端,可这样不方便。
我用PHP写了一个脚本,方便查看客户端列表,大家可以参考:
源代码 source code - 演示地址 demo
参考阅读
1 http://baike.baidu.com/view/7992.htm
2 dhcpd.conf MAN配置手册
3 英文参考 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch14s10.html
在网关上如果要封杀 QQ、MSN 或者 P2P 等软件的通讯,单纯用 iptables 逐一封服务端IP或者封通讯端口都不是很好的办法,最简单的方法是使用L7-filter。
L7-filter (Application Layer Packet Classifier for Linux), 是 Linux netfilter 的外挂模块, 它能使 Linux 的 iptables 支持 Layer 7 (Application 应用层) 过滤功能, 限制封杀 P2P、即时通讯软件。
Centos 4.4
Kernel 2.6.9-42.0.3.EL
Iptables 1.2.11
1.下载所需软件包:
kernel 2.6.19.7
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2
iptables 1.3.7
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.7.tar.bz2
L7-filter
http://sourceforge.net/projects/l7-filter/files/
netfilter-layer7-v2.12.tar.gz
l7-protocols-2007-06-22.tar.gz
L7-filter (Application Layer Packet Classifier for Linux), 是 Linux netfilter 的外挂模块, 它能使 Linux 的 iptables 支持 Layer 7 (Application 应用层) 过滤功能, 限制封杀 P2P、即时通讯软件。
Centos 4.4
Kernel 2.6.9-42.0.3.EL
Iptables 1.2.11
1.下载所需软件包:
kernel 2.6.19.7
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2
iptables 1.3.7
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.7.tar.bz2
L7-filter
http://sourceforge.net/projects/l7-filter/files/
netfilter-layer7-v2.12.tar.gz
l7-protocols-2007-06-22.tar.gz
假设两点:
1 不能让访问真正访问到真实服务器
2 记录访问发送的内容
我的笨方法:
1 在网关上控制数据的访问
2 建立一个网关,把所有转发数据都发送到本地webserver,记录日志
3 修改被监控的机器网关
Step 1,iptables脚本:
Step 2,建立nginx记录日志(配置简化):
Step 3,修改被检测机器的网关为刚才的服务器
这个结果是,被检测的机器发送的所有外网请求都会记录在日志里,日志里包含了域名、post的数据、cookie信息等,比如:
比如可以知道机器做了啥:
1 访问阿权的书房的
2 不明白什么访问的
3 访问谷歌的
4 360提交了什么东西
5 微软提交了什么东西
6 有道词典的数据,有cookie信息
知道访问的域名了,就可以在真正的网关禁止访问某个ip($x)即可。
完成~~
PS: 我们的大大的防火墙是否也类似这样呢。。
参考阅读:
1 透明代理配置
2 使用nginx截取https数据
3 NginxHttpLogModule
4 iptables 端口转发
1 不能让访问真正访问到真实服务器
2 记录访问发送的内容
我的笨方法:
1 在网关上控制数据的访问
2 建立一个网关,把所有转发数据都发送到本地webserver,记录日志
3 修改被监控的机器网关
Step 1,iptables脚本:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -P FORWARD ACCEPT
iptables -A INPUT -t filter -s 192.168.1.1/24 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp -d ! 192.168.1.1/24 -j REDIRECT --to-ports 80
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -P FORWARD ACCEPT
iptables -A INPUT -t filter -s 192.168.1.1/24 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp -d ! 192.168.1.1/24 -j REDIRECT --to-ports 80
Step 2,建立nginx记录日志(配置简化):
log_format main '$remote_addr - $http_host [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "||$http_cookie||" "||$request_body||"';
server {
listen 80;
server_name localhost;
access_log /Data/logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "||$http_cookie||" "||$request_body||"';
server {
listen 80;
server_name localhost;
access_log /Data/logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
Step 3,修改被检测机器的网关为刚才的服务器
这个结果是,被检测的机器发送的所有外网请求都会记录在日志里,日志里包含了域名、post的数据、cookie信息等,比如:
引用
192.168.1.27 - www.aslibra.com [13/May/2010:19:50:09 +0800] "GET / HTTP/1.1" 404 169 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET
CLR 3.5.30729)"||-||" "||-||"
192.168.1.27 - 221.176.31.1 [13/May/2010:19:50:09 +0800] "POST /ht/sd.aspx?t=i&i=1 HTTP/1.1" 404 169 "-" "IIC2.0/PC 3.6.2020" "||ssi
c=||" "||-||"
192.168.1.27 - www.google.com.hk [13/May/2010:19:50:10 +0800] "GET / HTTP/1.1" 200 151 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windo
ws NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "||-||" "||-||"
192.168.1.27 - qurl.f.360.cn [13/May/2010:19:50:10 +0800] "POST /check_outchain.php HTTP/1.1" 404 169 "-" "Post_Multipart" "||-||" "
||-||"
192.168.1.27 - www.sqm.microsoft.com [13/May/2010:19:51:18 +0800] "POST /sqm/messenger/sqmserver.dll HTTP/1.1" 404 169 "-" "MSDW" "|
|-||" "||-||"
192.168.1.27 - dict.youdao.com [13/May/2010:19:51:23 +0800] "GET /fsearch?client=deskdict&keyfrom=deskdict.network_test&q=Yodao%20di
ct%20Retest&pos=7&doctype=xml&xmlVersion=3.2&dogVersion=1.0&id=3d933c2ef00b99c1&vendor=360z&in=___________________3.1.17.6336&appVer
=3.1.17.6336&le=eng&wstate=yes&proc=iexplore.exe HTTP/1.1" 404 169 "-" "Yodao Desktop Dict (Windows 5.1.2600)" "||OUTFOX_SEARCH_USER
_ID=-2146282@1.2.3.4; DESKDICT_VENDOR=360z; JSESSIONID=bfds6TxoFfFvb_uv1srIs||" "||-||"
CLR 3.5.30729)"||-||" "||-||"
192.168.1.27 - 221.176.31.1 [13/May/2010:19:50:09 +0800] "POST /ht/sd.aspx?t=i&i=1 HTTP/1.1" 404 169 "-" "IIC2.0/PC 3.6.2020" "||ssi
c=||" "||-||"
192.168.1.27 - www.google.com.hk [13/May/2010:19:50:10 +0800] "GET / HTTP/1.1" 200 151 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windo
ws NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "||-||" "||-||"
192.168.1.27 - qurl.f.360.cn [13/May/2010:19:50:10 +0800] "POST /check_outchain.php HTTP/1.1" 404 169 "-" "Post_Multipart" "||-||" "
||-||"
192.168.1.27 - www.sqm.microsoft.com [13/May/2010:19:51:18 +0800] "POST /sqm/messenger/sqmserver.dll HTTP/1.1" 404 169 "-" "MSDW" "|
|-||" "||-||"
192.168.1.27 - dict.youdao.com [13/May/2010:19:51:23 +0800] "GET /fsearch?client=deskdict&keyfrom=deskdict.network_test&q=Yodao%20di
ct%20Retest&pos=7&doctype=xml&xmlVersion=3.2&dogVersion=1.0&id=3d933c2ef00b99c1&vendor=360z&in=___________________3.1.17.6336&appVer
=3.1.17.6336&le=eng&wstate=yes&proc=iexplore.exe HTTP/1.1" 404 169 "-" "Yodao Desktop Dict (Windows 5.1.2600)" "||OUTFOX_SEARCH_USER
_ID=-2146282@1.2.3.4; DESKDICT_VENDOR=360z; JSESSIONID=bfds6TxoFfFvb_uv1srIs||" "||-||"
比如可以知道机器做了啥:
1 访问阿权的书房的
2 不明白什么访问的
3 访问谷歌的
4 360提交了什么东西
5 微软提交了什么东西
6 有道词典的数据,有cookie信息
知道访问的域名了,就可以在真正的网关禁止访问某个ip($x)即可。
iptables -t nat -A PREROUTING -p tcp -m tcp -d $x -j REJECT
或者
iptables -t nat -A PREROUTING -p tcp -m tcp -d $x -j REDIRECT --to-ports 80
或者
iptables -t nat -A PREROUTING -p tcp -m tcp -d $x -j REDIRECT --to-ports 80
完成~~
PS: 我们的大大的防火墙是否也类似这样呢。。
参考阅读:
1 透明代理配置
2 使用nginx截取https数据
3 NginxHttpLogModule
4 iptables 端口转发





