Sep 27 2008

linux sysctl.conf中相关重要设定的详细说明

Published by David under Unix|Linux at 4:37 pm

  net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  net.ipv4.tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  net.ipv4.ip_local_port_range = 1024 ? ?65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

Continue Reading »

标签:none

No responses yet

Sep 27 2008

zt 构建支持Master/Slave读写分离的数据库操作类

Published by David under 生活|Life at 12:31 pm

一般对于访问量比较大的网站来说,采用基本的MySQL Master/Slave 结构是很正常,而且一般都是一台Master,多台Slave的情况,但是一般在进行这个访问的时候问题比较多,因为读写操作必须分离,所以今天没事就构造了这个数据库操作类。

数据库操作类基本特点:
1. 支持一台Master,多台Slave的情况,所有SQL能够强制调用Master来处理
2. 能够自动识别是写入还是读取操作,然后自动连接到需要的Master/Slave服务器。 操作过程中能够自动识别,如果没有Slave,则所有操作都是指向Master的,如果当前连接的Slave无法工作则自动连接其他Slave。对于Slave读取数据采用随机挑选Slave服务器的方式来读取数据
3. 在同一个PHP程序中能够重用连接,不会重复去连接数据库,减少因为反复连接带来的资源消耗

缺点:
1. 对于Slave是采取随机选择Slave来进行读取数据,所以不是真正意义上的负载均衡
2. 每次初始化都是连接好所有的数据库,比较浪费连接资源和时间。 在多个PHP程序中无法保持数据库连接,每次启动都需要连接到远程数据库,浪费了很多连接处理的时间,但是这个跟PHP是脚本程序有关。
3. 无法支持多个Master的情况,同时可定制性比较差,很多东西都是固定的,必须按照固有模式来执行查询

相关:
代码中注释不是很全,部分注释而且不一定正确,所以如果自己使用,最好进行二次修改。
本数据库类参考了我之前写的《简单快速有趣的MySQL数据库操作类:SimpleDB》,可以对照着看。
(类库中的接口我大部分都经过了测试,都正常使用,如果发现不正常或者有更好的想法,请留言)

Continue Reading »

标签:none

No responses yet

Aug 18 2008

bind 下的委派

Published by David under 网络|Network at 5:48 pm

在BIND DNS服务器中创建一个DNS子域是相当简单的,步骤分为三个部分:

1.命名子域

2.将子域委派给一个或者多个域名服务器

3.提供“域名服务器黏结记录”(nameserver glue records)和子域的命名空间(namespace)内部的主机名给任意一个委派的域名服务器,以便子域外部的机器可以解析这个域名服务器。

事实上,第一和第二步已经实现了每个子域名服务器的单一记录,当你将子域名委派给在DNS子域里面有主机名的服务器时,需要第三步,但并不是必需的。

创建子域

为了创建子域,你需要以root进入到父域名的主DNS服务器,编辑父域名的zone文件,完成编辑之后重新加载zone(reload zone)。

在BIND的配置文件/etc/named.conf中zone声明了你的父域,定义了zone文件名和你想要修改的域。

记住,zone文件将会存放在/etc/named.conf中全局选项所声明的directory下(默认是/var/named)。

这里是named.conf文件zone生命的一个例子,zone文件名是testdomain.bogus.zone:

zone “testdomain.bogus” {
type master;
file “testdomain.bogus.zone”;
allow-update { none; };
};

在修改zone文件之前先做个备份,然后用你喜欢的文本编辑器打开zone文件:

# cd /var/named

# cp testdomain.bogus.zone testdomain.bogus.zone.backup

# vim testdomain.bogus.zone

下面是域名testdomain.bogus的zone文件的一个例子,在那里,我们将创建子域subdomain1.testdomain.bogus。

假设已存在的testdomain.bogus的zone文件已经包含所有下面显示的记录,到”EXISTING RECORDS STOP HERE”这行。

下面黑体的记录(”EXISTING RECORDS STOP HERE”行之后)是我们要创建DNS子域的新记录,委派给三个域名服务器,并且添加了一条NS glue记录给子域里的一个域名服务器。

$TTL 3D
@ IN SOA ns1.testdomain.bogus. root.testdomain.bogus. (
2004080203 ; zone file serial #
8H ; refresh
2H ; retry
1W ; expire
1D ) ; SOA minimum
; NS’S AUTHORITATIVE FOR PARENT DOMAIN:
testdomain.bogus. NS ns1.testdomain.bogus.
testdomain.bogus. NS ns2.testdomain.bogus.
;
; A RECORDS FOR THE PARENT DOMAIN’S AUTHORITATIVE NS’S:
ns1.testdomain.bogus. A 10.1.2.3
ns2.testdomain.bogus. A 10.1.2.4
;
; ORDINARY HOSTS IN TESTDOMAIN.BOGUS:
host01 A 10.1.2.11
host02 A 10.2.2.12
;
; EXISTING RECORDS STOP HERE
;
; HERE WE CREATE OUR DNS SUBDOMAIN BY ADDING THESE RECORDS:
; Name the subdomain: Now delegate it to these nameservers (MUST be an FQDN hostname, NOT AN IP):
subdomain1.testdomain.bogus. NS ns1.subdomain1.testdomain.bogus. ; inside the subdomain - needs NS glue record
subdomain1.testdomain.bogus. NS ns1.testdomain.bogus. ; not in subdomain - no glue required
subdomain1.testdomain.bogus. NS ns.myisp.bogus. ; not in subdomain - no glue required
;
; GLUE RECORD FOR ns1.subdomain1.testdomain.bogus -
; NEEDED SINCE IT IS INSIDE THE SUBDOMAIN
ns1.subdomain1.testdomain.bogus. A 10.4.5.6

注意:在保存文件,重新加载(reloading)之前,别忘了增加zone文件的序号(serial number)!

上面例子中,子域委派权威给其中一个父域名服务器ns1.testdoamin.bogus。并不需要父域名的NS也是子域名的NS,是DNS管理员有权限管理的任意一个就行。

你需要创建子域的zone文件,将子域添加到将成为子域的权威的服务器的/etc/named.conf配置文件。以下是主服务器上基本的子域的zone声明部分:

zone “subdomain1.testdomain.bogus” {
type master;
file “subdomain1.testdomain.bogus.zone”;
allow-update { none; };
};

子域zone文件的基本部分:

$TTL 3D
@ IN SOA ns1.subdomain1.testdomain.bogus. root.subdomain1.testdomain.bogus. (
2004080203 ; zone file serial#
8H ; refresh
2H ; retry
1W ; expire
1D ) ; SOA minimum
;
subdomain1.testdomain.bogus. NS ns1.subdomain1.testdomain.bogus.
;
; A RECORDS FOR THIS SUBDOMAIN
ns1.subdomain1.testdomain.bogus. A 10.4.5.6
host01 A 10.4.5.6

在父域名服务器reload父域的zone文件之前,建议你正确配置了子域的域名服务器,并且能正确提供子域的记录。

当你觉得子域名服务器已经正常工作,以root身份执行下面命令,reload父域的zone文件:

# rndc reload

现在,你就拥有了子域DNS。

关于BIND DNS服务器配置的文档,DNS原理,请参考下面资源:

*BIND Administrator’s Reference Manual, HTML格式(在安装了bind RPM包的红帽企业版Linux 系统上可以得到)

/usr/share/doc/bind-[version]/arm/Bv9ARM.html

*Linux Documentation Project Website中的DNS HOW-TO

http://www.tldp.org/HOWTO/DNS-HOWTO.html

simple sample:
abc.com 如何委任 tmp.abc.com
linux 下很簡單:
在 abc.com 的 db file 中加兩行(或多行,若有多個 ns 的話):
tmp IN NS ns1.tmp.abc.com.
ns1.tmp IN A 1.2.3.4

問題二:
在 ns1.tmp.abc.com 的 named.conf 中設一個 forward zone :

zone “abc.com” IN {
type forward;
forwarders { 4.3.2.1; };
};
4.3.2.1 是 abc.com 的 ns 所用 IP 。

标签:

No responses yet

Aug 15 2008

用Excle的Vlookup函数对比二张表格中的不同数据

Published by David under 应用|Application at 11:19 am

需求:二张sheet表,一张包含有完整的身份证信息及姓名,另一张仅有前一张的部分身份证。现在要从部分身份证信息的表中查找完整信息表中的姓名。
函数: VLOOKUP
说明: 在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。
当比较值位于数据表首列时,可以使用函数 VLOOKUP 代替函数 HLOOKUP。
在 VLOOKUP 中的 V 代表垂直,H代表水平。
语法: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
参数说明: Lookup_value 为需要在数据表第一列中查找的数值。Lookup_value 可以为数值、引用或文本字符串。
Table_array 为需要在其中查找数据的数据表。可以使用对区域或区域名称的引用,例如数据库或数据清单。
如果 range_lookup 为 TRUE,则 table_array 的第一列中的数值必须按升序排列:…、-2、-1、0、1、2、…、-Z、FALSE、TRUE;
否则,函数 VLOOKUP 不能返回正确的数值。如果 range_lookup 为 FALSE,table_array 不必进行排序。
Table_array 的第一列中的数值可以为文本、数字或逻辑值,文本不区分大小写。
Col_index_num 为 table_array 中待返回的匹配值的列序号。Col_index_num 为 1 时,返回 table_array 第一列中的数值;
col_index_num 为 2,返回 table_array 第二列中的数值,以此类推。如果 col_index_num 小于 1,函数 VLOOKUP 返回错误值值 #VALUE!;
如果 col_index_num 大于 table_array 的列数,函数 VLOOKUP 返回错误值 #REF!。
Range_lookup 为一逻辑值,指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE 或省略,则返回近似匹配值,
也就是说,如果找不到精确匹配值,则返回小于 lookup_value 的最大数值;如果 range_value 为 FALSE,函数 VLOOKUP 将返回精确
匹配值。如果找不到,则返回错误值 #N/A。
range_lookup参数经常采用false,这样不必排序,返回精确匹配。

=VLOOKUP(A1,’完整表’!$A$2:$C$3931,2,FALSE)
完整表中的2为姓名列,A1为部分表中的身份证列,$A$2:$C$3931为完整表中的查找范围

标签:none

No responses yet

Jul 23 2008

sysctl.conf优化方案

Published by David under Unix|Linux at 5:49 pm

转至CU
###################
所有rfc相关的选项都是默认启用的,因此网上的那些还自己写rfc支持的都可以扔掉了:)
###############################

net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
#############################
通过源路由,攻击者可以尝试到达内部IP地址 –包括RFC1918中的地址,所以
不接受源路由信息包可以防止你的内部网络被探测。
#################################
Continue Reading »

标签:,

No responses yet

Next »

Close
E-mail It