分类: LINUX
2006-08-10 16:36:53
CVS 版本 1.11.1.3 可能已经缺省安装在您的 RedHat Linux 7 上了。要检查是否已安装了 CVS,请输入命令 rpm -qa|grep 'cvs'
。如果返回的是 cvs-1.11.1-3
,就意味着已经安装了 CVS。
如果这条命令没返回任何内容,您就需要安装 CVS。CVS rpm 通常位于 RedHat Linux 7 分发版的安装 CD #2 上的 RedHat/RPMS
目录中。将该 CD 安装到 /mnt/cdrom
后,使用 rpm
命令安装 CVS:rpm -i /mnt/cdrom/RedHat/RPMS/cvs-1.11.1p1-3.i386rpm
cvs
的用户,让这个用户使用 cvs
作为他的主组。
cvsdev1
和 cvsdev2
。
cvs
的开发者可以使用他们的私有组作为他们的主组。例如,cvsdev1
的主组是 cvsdev1
,但要确保他们还属于 cvs
组。 cvs
的身份登录。
/home/cvs
/)下创建一个名为 repository
的目录。
/home/cvs/repository
的访问级别和访问模式:chmod 770 /home/cvs/repository
/home/cvs/repository
的 setgid 位:chmod g+s /home/cvs/repository
说明:在一个目录中创建文件时,该文件缺省情况下属于其所有者的主组。设置了目录的 setgid
位后,新文件将与该目录属于相同的组,而不属于其所有者的主组。例如,如果用户 cvsdev1
在目录 /home/cvs/repository
中创建了一些文件,则这些文件将属于 cvs
组而不是它的主组 cvsdev1
。
这一步至关重要,因为它使 CVS 用户能够检出其他用户创建的文件。如果这一步没完成,那么当您检出另一个用户创建的文件时,操作将失败,并发出下面这条消息:
Failed to create lock directory for /home/cvs/repository/...
: Permission denied.
Failed to obtain dir lock in repository /home/cvs/repository/...
cvs -d /home/cvs/repository init
cvs
。 /etc/xinetd.d
中创建一个名为 cvspserver
的文件,文件内容如下: # default: off # description: An cvs server. service cvspserver { disable = no socket_type = stream protocol = tcp user = root wait = no server = /usr/bin/cvs server_args = -f --allow-root=/home/cvs/repository pserver log_on_success +=USERID log_on_failure += USERID }
/etc/services
并核实存在下面这两行代码。如果不存在,则添加它们: cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operations
xinetd
服务: service xinetd restart
/etc/profile
。您应该能在该文件中看到下面这些行: USER='id -un' LOGNAME=$USER MAIL="/var/spool/mail/$USER"
CVSROOT=":pserver:$USER@localhost:/home/cvs/repository"
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CVSROOT
cvsdev1
的身份登录。
echo $CVSROOT
它应该返回与用户名有关的象下面这样的结果:
:pserver:cvsdev1@localhost:/home/cvs/repository
cvs login
您将被提示提供密码。输入您的 Linux 密码。
project1
的目录: mkdir project1
project1
中创建一个名为 Test.java
的文件,文件内容如下: public class Test{ public String sayHello(String name){ return "Hello"+name; } }
Test.java
导入到 CVS 资源库中的模块 project1
: cd /home/cvsdev1/project1 cvs import -m "import Test.java" project1 wsadgroup release1_0
CVS 导入操作完成后,您应该会看到一条这样的消息:
N project1/Test.java No conflicts created by this import
cd mv project1 project1.sav
project1
: cd cvs checkout project1
您应该会看到在 /home/cvsdev1
下创建了一个名为 project1
的新目录,该目录下有一个文件 Test.java
和一个目录 CVS
。
cvsdev2
的身份登录。
cvsdev2
登录 CVS: cvs login
cvsdev2
从 CVS 检出 project1
: cvs checkout project1
您应该会看到这样一条来自 CVS 的消息:
cvs server:Updating project1 U project1/Test.java
Test.java
(位于目录 project1
中)添加一个新方法: public String sayBye(String name){ return "Bye, " + name; }
Test.java
检入到资源库中: cvs commit -m "checkin Test.java" Test.java
您应该会看到这样一条来自 CVS 的消息:
Checking in Test.java; /home/cvs/repository/project1/Test.java, v <-- Test.java new revision: 1.2; previous revision: 1.1 done
用户 cvsdev1
用下面这些命令捕获 cvsdev2
所做的更改:
cd /home/cvsdev1/project1 cvs update Test.java
您应该会看到这样一条来自 CVS 的消息:
U Test.java
您可以用编辑器打开 Test.java
来查看 cvsdev2
所做的更新。
- Connection type
- 您想用来连接到 CVS 服务器的协议。缺省值是 pserver,它代表密码服务器协议。这是我们刚才在 RedHat Linux 7 中设置的连接类型。
- User name
- 您用来登录到 CVS 服务器中的用户名。例如我们刚才在 RedHat Linux 7 中定义的 cvs 组中的 cvsdev1 或 cvsdev2。
- Host name
- 您想连接到的服务器的机器名。它将是 RedHat Linux 机器的主机名或 IP 地址。
- Repository path
- 服务器上的资源库位置的全限定路径。对于我们的安装和配置,它将是:
/home/cvs/repository
。- CVS location
- Application Developer 用来连接到资源库的完整位置。当您填好前面几个字段时,它将被动态构建。
- Validate on finish
- 它在返回到 IDE 前测试资源库连接。请一直启用它作为第一次连接性测试。
一旦用户标识和密码通过验证,您就会返回到 Repositories 视图,并且该视图上多了一个 Application Developer 连接到的新资源库条目。
Test.java
,这与我们在“用本地用户测试安装”这一节的中看到的一致。
Test.java
并选择 Show in Resource History。在 Resource History 视图中,您可以看到 cvsdev1
何时对 Test.java
进行了第一次修订,在代码发生更改后,cvsdev2
何时把 Test.java
检入到了资源库中。
5. 最后,右键单击 project1
并选择 Add to Workspace。您们就可以开始对 Application Developer 中的 project1
进行操作了!
本文已经描述了如何在 RedHat Linux 中配置 CVS。我希望这篇文章会对您有所帮助,并欢迎所有的反馈。
dmidecode | grep 'Serial Number' | awk '{print $3}' | tail -1
-------------------------------------------------------------------------
$ dmesg 命令不是很简介方便吗? | |
robinswan 评论于:2006-03-28 22:47:33 (219.136.73.★) |
原本 Linux NAT 用得好好的, 沒想到幾天前卻出現了無法上網的情況, 而系統記錄也出現了這樣的訊息:
ip_conntrack: table full, dropping packet.
後來才知道, Linux NAT 的 ip_conntrack 模組會記錄 tcp 通訊協定的 established connection 記錄, 而且預設 timeout 時間長達五天 (432,000 秒), 因此只要 LAN 中有人使用 P2P 軟體 (如: eDonkey、BT...) 就容易發生這種問題.
解決方法 (1): 加大 ip_conntrack_max 值
查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max寫入理想的數值 (每一個 ip_conntrack buffer 會佔用 292 Bytes)
指令: echo "數值" > /proc/sys/net/ipv4/ip_conntrack_max
例如: echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
這個效果是暫時的, 如果要每次開機都使用新的數值, 需將上述指令寫入 /etc/rc.d/rc.local
或是在 /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 數值
或使用指令: sysctl -w net.ipv4.ip_conntrack_max=數值
解決方法 (2): 降低 ip_conntrack timeout 時間
重設 ip_conntrack_tcp_timeout_established (原值: 432000, 單位: 秒)
指令: echo "數值" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
例如: echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established開機自動設置的作法同方法(1).
其他相關指令:
查看目前 ip_conntrack buffer 使用狀況
指令: grep conn /proc/slabinfo結果實例: ip_conntrack 3024 4090 384 409 409 1 (各值說明如下)
ip_conntrack the cache name 3024 the number of currently active objects 4090 the total number of available objects 384 the size of each object in bytes 409 the number of pages with at least one active object 409 the total number of allocated pages 1 the number of pages per slab are given man slabinfo 可查詢詳細說明.
查出目前 ip_conntrack 記錄最多的前五名 IP
指令: cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5結果實例:
2816 192.168.1.100 14 163.30.85.129 6 220.132.142.175 6 127.0.0.1 4 218.187.5.223 由此可知, 192.168.1.100 佔用了絕大多數的 buffer, 推斷這個 IP 的 User 可能使用了 P2P 軟體.
|
|
一直想写一片关于VPN配置方面的文章,由于时间等等很多问题,一直没有落实,现在终于和大家见面了,由于本人知识有限也并非专业从事这方面工作的,难免有错误,望指正,共同提高。 自从认识VPN以来,一直在找寻一个容易配置、功能强大、支持多系统的VPN程序,由于一直没有找到合适的软件,Linux下的FreeSWAN、OpenBSD FreeBSD下的IPSec、Windows下的PPTP都试了试,始终不能满足自己的要求,直到OpenVPN的出现。 关于各种VPN软件或者硬件的优缺点,在这里我就不再叙述了,因为这个掺杂着很多人为的因素在里边(萝卜好吃还是青菜好吃?),一个软件:稳定、符合自己的要求、自己用的习惯就是一个好软件。 对于OpenVPN,在CU的VPN版面也有过很多的讨论,其中也不乏精华的文章,但是都是使用Static key验证的,从字面上就可以看出来Static key使用的就是预先生成的key对数据进行加密和解密,也就是常说的对称试加密,加密和解密双方必须预先知道加密的Key。本文讨论的是基于TLS加密方式,使用CA验证VPN Client的身份,OpenVPN使用TLS加密是通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Public key,另一个是Private key)对数据进行加密的,对于TLS传输的工作原理,大家可以去Google一下,资料一大堆。对于OpenVPN使用TLS mode,首先Server和Client要有相同CA签发的证书,双方通过交换证书验证双方的合法性以决定是否建立VPN连接,然后使用对方CA把自己目前使用的数据加密方法(类似于密钥)加密后发送给对方,由于使用对方CA加密的,所以只有对方CA对应的Private key才能解密该字串,保证了此密钥的安全性,并且此密钥定期改变,对于窃听者来说,可能还没有破解出密钥,通信双方已经更换密钥了。 我个人对OpenVPN的感觉(或者说是我使用OpenVPN的理由),NAT穿透力特强,支持HTTP代理,对动态地址支持很好,可配置性强,配置安全,开源便于二次开发...其他没有想好:)。 关于OpenVPN的相关内容可以在上找到。 下面开始正式讨论OpenVPN的安装和配置方法,本文是在Fedora Core 2环境下配置的,由于机器在网络中不是在网关的位置,所以使用NAT方式来访问内网,否则还涉及到配置网络设备的路由。假设我的VPN Server有2块网卡,eth0对外,IP:61.1.1.2 eth1对内,IP:192.168.1.2,内网地址:192.168.0.0/16 本文除配置文件中行首的"#"是注释外,其他行首的"#"都是提示符,如果在非配置文件一行中第二次出现"#"说明后面的是注释,书写命令时可以省略。 获取并安装Openvpn: 首先检查系统是否安装lzo实时压缩工具 $rpm -qa | grep lzo 如果没有安装可以在找到并安装,安装方法详见压缩包中的INSTALL文件,当然也可以用rpm包安装,记住一定要安装lzo-devel开头的那个包,因为OpenVPN需要使用lzo的头文件。 $wget $tar -zxvf openvpn-2.0_rc16.tar.gz $cd openvpn-2.0_rc16 $./configure $make $su #make install 按照INSTALL文件中的说明,做如下操作: #mknod /dev/net/tun c 10 200 #创建一个tun设备 #echo "alias char-major-10-200 tun" >;>; /etc/modprobe.conf #echo 1 >; /proc/sys/net/ipv4/ip_forward #打开系统的转发功能 接下来就生成服务器客户端需要使用的keys了,为了方便,我们使用OpenVPN包自带的脚本生成。 #mkdir /etc/openvpn #cp -r easy-rsa /etc/openvpn #切换到OpenVPN源代码目录执行 修改vars 文件 -------------CUT Here------------- # easy-rsa parameter settings # NOTE: If you installed from an RPM, # don't edit this file in place in # /usr/share/openvpn/easy-rsa -- # instead, you should copy the whole # easy-rsa directory to another location # (such as /etc/openvpn) so that your # edits will not be wiped out by a future # OpenVPN package upgrade. # This variable should point to # the top level of the easy-rsa # tree. export D=`pwd` # This variable should point to # the openssl.cnf file included # with easy-rsa. export KEY_CONFIG=$D/openssl.cnf # Edit this variable to point to # your soon-to-be-created key # directory. # # WARNING: clean-all will do # a rm -rf on this directory # so make sure you define # it correctly! export KEY_DIR=$D/keys # Issue rm -rf warning echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR # Increase this to 2048 if you # are paranoid. This will slow # down TLS negotiation performance # as well as the one-time DH parms # generation process. export KEY_SIZE=1024 # These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. # 定义你所在的国家,2个字符 export KEY_COUNTRY=CN # 你所在的省份 export KEY_PROVINCE=Liaoning # 你所在的城市 export KEY_CITY=Shenyang # 你所在的组织 export KEY_ORG="ELM OpenVPN ORG" # 你的单位 export KEY_OU="OpenVPN Service" # 你的邮件地址 export KEY_EMAIL="elm@elm.freetcp.com" -------------CUT Here----------------- 修改后保存,下面我们开始什成keys,以下为shell命令 "#" 为提示符 #. vars #使修改的变量生效 NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys #./clean-all #初始化keys目录,创建所需要的文件和目录 #./build-ca #什成Root CA证书,用于签发Server和Client证书,请保护好keys/ca.key文件。 Generating a 1024 bit RSA private key ........................++++++ .............++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CN]: #如果无需修改,直接回车 State or Province Name (full name) [Liaoning]: Locality Name (eg, city) [Shenyang]: Organization Name (eg, company) [ELM OpenVPN ORG]: Organizational Unit Name (eg, section) [OpenVPN Service]: Common Name (eg, your name or your server's hostname) []:OpenVPN Root CA Email Address [elm@elm.freetcp.com]: # ls keys ca.crt ca.key index.txt serial 我们可以看到ca.crt ca.key文件已经什成了。 下面我们为服务器生成 Diffie-Hellman 文件 # ./build-dh #TLS server 需要使用的一个文件 Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ..+..............................................................+....................................................................+....+........+.........+....................................................+.+..................................................................................................................................................................+.......................................+.................................+.............+.................................................................................+.......................................................+.............................++*++*++* 创建并签发VPN Server使用的CA # ./build-key-server server # server 为创建后的文件名,分别为server.crt server.key Generating a 1024 bit RSA private key ......................++++++ ...............++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CN]: State or Province Name (full name) [Liaoning]: Locality Name (eg, city) [Shenyang]: Organization Name (eg, company) [ELM OpenVPN ORG]: Organizational Unit Name (eg, section) [OpenVPN Service]: Common Name (eg, your name or your server's hostname) []:Server No.1 Email Address [elm@elm.freetcp.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName RINTABLE:'CN' stateOrProvinceName RINTABLE:'Liaoning' localityName RINTABLE:'Shenyang' organizationName RINTABLE:'ELM OpenVPN ORG' organizationalUnitNameRINTABLE:'OpenVPN Service' commonName RINTABLE:'Server No.1' emailAddress :IA5STRING:'elm@elm.freetcp.com' Certificate is to be certified until Feb 26 14:43:44 2015 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated 接下来为VPN Client颁发CA证书,如果以后要为其他Client颁发证书,直接使用build-key命令签发新证书。 # ./build-key elm Generating a 1024 bit RSA private key ........++++++ ....................++++++ writing new private key to 'elm.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CN]: State or Province Name (full name) [Liaoning]: Locality Name (eg, city) [Shenyang]: Organization Name (eg, company) [ELM OpenVPN ORG]: Organizational Unit Name (eg, section) [OpenVPN Service]: Common Name (eg, your name or your server's hostname) []:ELM #注意Common Name最好不要相同,如果相同[server要加duplicate-cn选项],那么Email地址也不能相同 Email Address [elm@elm.freetcp.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName RINTABLE:'CN' stateOrProvinceName RINTABLE:'Liaoning' localityName RINTABLE:'Shenyang' organizationName RINTABLE:'ELM OpenVPN ORG' organizationalUnitName:PRINTABLE:'OpenVPN Service' commonName :PRINTABLE:'ELM' emailAddress :IA5STRING:'elm@elm.freetcp.com' Certificate is to be certified until Feb 26 14:45:36 2015 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated 为防止恶意攻击(如DOS、UDP port flooding),我们生成一个"HMAC firewall" #openvpn --genkey --secret keys/ta.key 生成证书吊销链文件,防止日后有人丢失证书,被非法用户接入VPN #./make-crl vpncrl.pem Using configuration from /etc/openvpn/easy-rsa/openssl.cnf 到现在为止,一切准备就绪,下面开始写配置文件,为了缩小篇幅,把原有注释都去掉了。 Server使用的配置文件server.conf ----------------CUT Here------------- #申明本机使用的IP地址,也可以不说明 ;local a.b.c.d #申明使用的端口,默认1194 port 1194 #申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议 ;proto tcp proto udp #申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。 #tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备 dev tap ;dev tun #OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法 ca ca.crt #Server使用的证书文件 cert server.crt #Server使用的证书对应的key,注意文件的权限,防止被盗 key server.key # This file should be kept secret #CRL文件的申明,被吊销的证书链,这些证书将无法登录 crl-verify vpncrl.pem #上面提到的生成的Diffie-Hellman文件 dh dh1024.pem #这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由 #这条命令等效于: # mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入 # tls-server #使用TLS加密传输,本端为Server,Client端为tls-client # # if dev tun: #如果使用tun设备,等效于以下配置 # ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址 # ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址 # route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2 # if client-to-client: #如果使用client-to-client这个选项 # push "route 10.8.0.0 255.255.255.0" #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1 # else # push "route 10.8.0.1" #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1 # # if dev tap: #如果使用tap设备,则等效于以下命令 # ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址 # ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码 # push "route-gateway 10.8.0.1" #把环境变量route-gateway传递给客户机 # server 10.8.0.0 255.255.255.0 #等效于以上命令 #用于记录某个Client获得的IP地址,类似于dhcpd.lease文件, #防止openvpn重新启动后“忘记”Client曾经使用过的IP地址 ifconfig-pool-persist ipp.txt #Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用 ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 #通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用 ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" #VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除 ;route 10.9.0.0 255.255.255.252 #Run script or shell command cmd to validate client #virtual addresses or routes. 具体查看manual ;learn-address ./script #其他的一些需要PUSH给Client的选项 # #使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走 ;push "redirect-gateway" #DHCP的一些选项,具体查看Manual ;push "dhcp-option DNS 10.8.0.1" ;push "dhcp-option WINS 10.8.0.1" #如果可以让VPN Client之间相互访问直接通过openvpn程序转发, #不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率 client-to-client #如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA #和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN ;duplicate-cn #NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效, #导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制, #下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通, #认为连接丢失,并重新启动VPN,重新连接 #(对于mode server模式下的openvpn不会重新连接)。 keepalive 10 120 #上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature, #没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1 tls-auth ta.key 0 # This file is secret #对数据进行压缩,注意Server和Client一致 comp-lzo #定义最大连接数 ;max-clients 100 #定义运行openvpn的用户 user nobody group nobody #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys persist-key #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的, #否则网络连接会先linkdown然后linkup persist-tun #定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作 status openvpn-status.log #记录日志,每次重新启动openvpn后删除原有的log信息 log /var/log/openvpn.log #和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后 ;log-append openvpn.log #相当于debug level,具体查看manual verb 3 --------------Cut Here----------------- 把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下: #cd /etc/openvpn #cp easy-rsa/keys/ca.crt . #cp easy-rsa/keys/server.crt . #cp easy-rsa/keys/server.key . #cp easy-rsa/keys/dh1024.pem . #cp easy-rsa/keys/ta.key . #cp easy-rsa/keys/vpncrl.pem . 创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn 然后运行: #chkconfig --add openvpn #chkconfig openvpn on 立即启动openenvpn #/etc/init.d/openvpn start 接下来配置客户端的配置文件client.conf: Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key -------------Cut Here--------------------- # 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的” client #指定接口的类型,严格和Server端一致 dev tap ;dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel # if you have more than one. On XP SP2, # you may need to disable the firewall # for the TAP adapter. ;dev-node MyTap # 使用的协议,与Server严格一致 ;proto tcp proto udp #设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字 remote 61.1.1.2 1194 ;remote my-server-2 1194 # 随机选择一个Server连接,否则按照顺序从上到下依次连接 ;remote-random # 始终重新解析Server的IP地址(如果remote后面跟的是域名), # 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址 # 这样无需人为重新启动,即可重新接入VPN resolv-retry infinite # 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要 nobind # 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作 user nobody group nobody #在Client端增加路由,使得所有访问内网的流量都经过VPN出去 #当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是 # push "route 192.168.0.0 255.255.255.0" route 192.168.0.0 255.255.0.0 # 和Server配置上的功能一样 如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备 persist-key persist-tun # 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面 # 如果代理需要验证,使用http-proxy server port [authfile] [auth-method] # 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] # 对于无线设备使用VPN的配置,看看就明白了 # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. ;mute-replay-warnings # Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件 ca ca.crt # easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。 cert elm.crt key elm.key # Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项 # 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server # 因为他们的CA里没有这个扩展 ns-cert-type server # 和Server配置里一致,ta.key也一致,注意最后参数使用的是1 tls-auth ta.key 1 # 压缩选项,和Server严格一致 comp-lzo # Set log file verbosity. verb 4 --------------Cut Here--------------------- Linux下Client的OpenVPN的安装方法一样,只是配置文件和keys上的不同,只要把client.conf ca.crt elm.crt elm.key ta.key复制到/etc/openvpn目录即可启动VPN。 Win下OpenVPN的安装,WIN下有图形界面的OpenVPN-GUI程序,下载地址 下载安装,默认下一步就OK了,安装完事后在托盘上出现一个新的图标,把client.ovpn ca.crt elm.crt elm.key ta.key文件拷贝到C:Program Filesopenvpnconfig目录下,然后点右键connect就OK了。 对于LinuxServer使用NAT的一些说明: 首先要把系统的Forward打开,可以通过如下命令实现 echo 1 >; /proc/sys/net/ipv4/ip_forward 或者使用 sysctl -w net.ipv4.ip_forward=1 或者修改/etc/sysctl.conf文件,增加 net.ipv4.ip_forward = 1 设定SNAT的规则,使用iptables命令 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source 192.168.1.2 OK,OpenVPN Client可以访问内网了。 由于是第一次写这么详细的文档,有很多地方写的不详细,有很多东西可能我认为是很容易理解的,但是可能没有从一个初学者的角度去考虑问题,还希望大家多提意见,以便改进,由于本人不是专业从事VPN的研究,本文难免有错误之处,还往指正。 国外很多软件都有Howto,但是OpenVPN没有Howto,希望大家能在本文+其他static key的文章上,形成一个不是很全面的HOWTO。 |
创建/usr/local/share/awstats目录用于统计数据输出
# mkdir -p /usr/local/share/awstats/http
修改/usr/local/apache/conf/httpd.conf配置文件
把
CustomLog logs/access_log combined
改成
CustomLog /var/log/httpd/mylog.log combined
我的配置文件部分内容如下
LogFile=" /var/log/httpd/mylog.log"
SiteDomain=""
HostAliases="test.com 192.168.0.3"
DirData="/usr/local/share/awstats/http"
其他需要注意的事项
AWStats缺省不过滤swf文件,会把.swf算成PageView,所以如果站点上swf文件主要是广告的话最好还是要过滤掉。
2.日志统计
统计主机日志
# cd /usr/local/awstats/wwwroot/cgi-bin/
# perl awstats.pl -config= -update -lang=cn
你可以生成一个静态页面来浏览信息
# perl awstats.pl -config= -output -staticlinks -lang=cn> awstats..html
定时统计主机日志
#update awstats
30 7 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config= -update -lang=cn
测试
http://192.168.0.3/awstats/awstats.pl?config=
3.虚拟主机日志统计
AWStats自带了一个批处理工具:tools/awstats_updateall.pl,可以批量地遍历一个目录下所有地配置文件并运行统计。因此剩下的工作就主要是日志的同步问题了。
针对多个站点,很多配置选项是重复的,如果每个配置文件都修改维护起来会很麻烦,AWStats从5.4版本开始提供了配置文件包含的功能,所以我们可以配置一个通用配置,比如:common.conf
然后其他站点的配置设置为:可以通过后面的选项覆盖和缺省不一致的配置。
awstats.bbs.chedong.conf
Include "chedong.common.conf"
LogFile "/path/to/bbs_log"
SiteName "bbs.chedong.com"
awstats.
Include "chedong.common.conf"
LogFile "/path/to/www_log"
SiteName ""
HostAliases="chedong.com"
统计指标说明
* 参观者:按来访者不重复的IP统计,一个IP代表一个参观者;
* 参观次数:一个参观者可能1天之内参观多次(比如:上午一次,下午一次),所以按一定时间内(比如:1个小时),不重复的IP数统计,参观者的访问次数;
* 网页数:不包括图片,CSS, JavaScript文件等的纯页面访问总数,但如果一个页面使用了多个帧,每个帧都算一个页面请求;
* 文件数:来自浏览器客户端的文件请求总数,包括图片,CSS,JavaScript等,用户请求一个页面是,如果页面中包含图片等,所以对服务器会发出多次文件请求,文件数一般远远大于文件数;
* 字节:传给客户端的数据总流量;
* 来自REFERER中的数据:日志中的参考(REFERER)字段,记录了访问相应网页之前地址,因此如果用户是通过搜索引擎的搜索结果点击进入网站的,日志中就会有用户在相应搜索引擎的查询地址,这个地址中就可以通过解析将用户查询使用的关键词提取出来:
比如:
2003-03-26 15:43:58 123.123.123.123 - GET /index.html 200 192 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http:///search?q=chedong
AWStats在搜索引擎的关键短语和关键词统计方面的功能还是比较完整的:可以对全世界3百多种机器爬虫进行识别,并且可以识别大部分主流国际化搜索引擎和很多地区的本地语言搜索引擎。
4.plugin
安装GeoIP
需要
GeoIP C Library
Geo::IP Perl Module (faster, but requires C library)
Geo::IP::PurePerl Module (slower, but does not require C library)
C Library和Perl Module是一组,必须先编译安装C的,再编译安装perl,或者直接装PurePerl Module,我就是这种方式
安装GeoIP C Library
# wget
# tar zxvf GeoIP-1.3.8.tar.gz
# cd GeoIP-1.3.8
# ./configure; make; make install
安装 Geo::IP Perl Module
# wget
# tar zxvf Geo-IP-1.25.tar.gz
# cd Geo-IP-1.25
# perl Makefile.PL
# make
# make test (在AS4下通不过,放弃,改装PurePerl Module)
# make install
以上两步也可以这样安装
# perl -MCPAN -e shell
cpan> install Geo::IP
安装Geo::IP::PurePerl Module
# wget
# tar zxvf Geo-IP-PurePerl-1.14.tar.gz
# cd Geo-IP-PurePerl-1.14
# perl Makefile.PL
# make
# make test
# make install
也可以这样安装
# perl -MCPAN -e shell
cpan> install Geo::IP::PurePerl
修改/usr/local/etc/awstats/awstats..conf,取消下面这行的注释,启用此插件
LoadPlugin="geoip GEOIP_STANDARD"
更新GeoIP库
# cd /usr/local/share/GeoIP/
# wget
# gunzip GeoIP.dat.gz
定时更新GeoIP库
0 0 * * * root /usr/local/bin/geoipupdate -v
安装XWhois
# perl -MCPAN -e shell
cpan> install Net::XWhois
修改/usr/local/etc/awstats/awstats..conf,取消下面这行的注释,启用此插件
LoadPlugin="hostinfo"
安装decodeutfkeys
# perl -MCPAN -e shell
cpan> install URI::Escape
修改/usr/local/etc/awstats/awstats..conf,取消下面这行的注释,启用此插件
LoadPlugin="decodeutfkeys"
更新日志
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config= -update -lang=cn
5.分析其它日志
5.1.ftp日志
5.1.1.proftp
设置proftp
更改proftpd.conf文件,添加如下两行
LogFormat awstats "%t %h %u %m %f %s %b"
# 注意:在%号之间必须用tab键作为分隔符,不能用空格键
ExtendedLog /var/log/xferlog read,write awstats
# WARNING: ExtendedLog directive might need to be placed inside a virtual host context if you use them
然后关闭老的日志格式
TransferLog none
# WARNING: TransferLog directive might need to be placed inside a virtual host context if you use them.
想让你的设置生效,先停止proftp服务,删除旧的日志文件/var/log/xferlog,然后启动proftp服务。登陆ftp,下载一个文件,你的新日志文件会有新的一行,类似如下这个样子:
[01/Jan/2001:21:49:57 +0200] ftp.server.com user RETR /home/fileiget.txt 226 1499
设置AWStats
复制配置文件awstats.model.conf到/usr/local/etc/awstats目录下,并把文件名改成awstats.ftp.conf,修改这个新的配置文件
# mkdir -p /usr/local/share/awstats/ftp
# cp /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf /usr/local/etc/awstats/awstats.ftp.conf
# vi /usr/local/etc/awstats/awstats.ftp.interpack.cn.conf
LogFile="/var/log/xferlog"
LogType=F
LogFormat="%time1 %host %logname %method %url %code %bytesd"
LogSeparator="t"
SiteDomain="ftp.test.com"
HostAliases="ftp.test.com 192.168.0.3"
DirData="/usr/local/share/awstats/ftp"
NotPageList=""
LevelForBrowsersDetection=0
LevelForOSDetection=0
LevelForRefererAnalyze=0
LevelForRobotsDetection=0
LevelForWormsDetection=0
LevelForSearchEnginesDetection=0
ShowLinksOnUrl=0
ShowMenu=1
ShowSummary=UVHB
ShowMonthStats=UVHB
ShowDaysOfMonthStats=HB
ShowDaysOfWeekStats=HB
ShowHoursStats=HB
ShowDomainsStats=HB
ShowHostsStats=HBL
ShowAuthenticatedUsers=HBL
ShowRobotsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowBrowsersStats=0
ShowOSStats=0
ShowOriginStats=0
ShowKeyphrasesStats=0
ShowKeywordsStats=0
ShowMiscStats=0
ShowHTTPErrorsStats=0
ShowSMTPErrorsStats=0
统计主机日志
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp.test.com -update -lang=cn
你可以生成一个静态页面来浏览信息
# perl awstats.pl -config=ftp.test.com -output -staticlinks -lang=cn> awstats.ftp.test.com.html
定时统计主机日志
#update awstats
30 7 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp.test.com -update -lang=cn
测试