工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:linux

使用tar与OpenSSL加密解密打包文件

在当前目录下有一个pma目录的文件夹:

1、使用tar对文件压缩加密:
# tar -zcvf - pma|openssl des3 -salt -k password | dd of=pma.des3
完成将得到一个pma.des3的打包文件,用你设置的密码替换password。

2、使用tar对加密文件解压:
# dd if=pma.des3 |openssl des3 -d -k password|tar zxf -
注意:命令最后有”-”,它将释放所有的文件。其中-k password可以不使用,这样执行完命令后会提示你输入密码,加上-k参数表示在程序中自动验证密码

附:OpenSSL加密算法详解:

OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库、应用程序、SSL协议库。Openssl实现了SSL协议所需要的大多数算法。
下面介绍使用Openssl进行文件的对称加密操作。

一、Openssl支持的加密算法有:

-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-ofb -des-ofb
-des3 -desx -desx-cbc
-rc2 -rc2-40-cbc -rc2-64-cbc
-rc2-cbc -rc2-cfb -rc2-ecb
-rc2-ofb -rc4 -rc4-40

二、OpenSSL加密指令语法:

SYNOPSIS
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e]
[-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]
[-P] [-bufsize number] [-nopad] [-debug]
说明:
-chipername选项:加密算法,Openssl支持的算法在上面已经列出了,你只需选择其中一种算法即可实现文件加密功能。
-in选项:输入文件,对于加密来说,输入的应该是明文文件;对于解密来说,输入的应该是加密的文件。该选项后面直接跟文件名。
-out选项:输出文件,对于加密来说,输出的应该是加密后的文件名;对于解密来说,输出的应该是明文文件名。
-pass选项:选择输入口令的方式,输入源可以是标准输入设备,命令行输入,文件、变量等。
-e选项:实现加密功能(不使用-d选项的话默认是加密选项)。
-d选项:实现解密功能。
-a和-A选项:对文件进行BASE64编解码操作。
-K选项:手动输入加密密钥(不使用该选项,Openssl会使用口令自动提取加密密钥)。
-IV选项:输入初始变量(不使用该选项,Openssl会使用口令自动提取初始变量)。
-salt选项:是否使用盐值,默认是使用的。
-p选项:打印出加密算法使用的加密密钥。

三、用法举例:

1、使用aes-128-cbc算法加密文件:
openssl enc -aes-128-cbc -in install.log -out enc.log
(注:这里install.log是你想要加密的文件,enc.log是加密后的文件,回车后系统会提示你输入密码。)
2、解密刚才加密的文件:
openssl enc -d -aes-128-cbc -in enc.log -out install.log
(注:enc.log是刚才加密的文件,install.log是解密后的文件,-d选项实现解密功能。)
3、加密文件后使用BASE64格式进行编码:
openssl enc -aes-128-cbc -in install.log -out enc.log -a
4、使用多种口令输入方式加密:
openssl enc -des-ede3-cbc -in install.log -out enc.log -pass pass:111111
(这种方法的好处是你可以把它写入到脚本中,自动完成加密功能,不使用pass选项默认系统会提示输入密码并且确认,是需要人工操作的。)

转

利用watchdog实现智能监控

watchdog 通常是一段物理电路,但这里讲的是linux 内核的实现,也就是softdog ,其原理详见IBM developerworks

watchdog非常强健,是内核的一个模块,能够在系统资源耗尽之际实现系统软重启,防止硬重启带来的巨大损失。

Watchdog 默认的动作是每隔1分钟往/dev/watchdog设备执行写操作,以证明系统运行正常,发现异常就主动发出重启信号。这种功能在高负荷的系统中很有用。虽然重启系统常常是包治百病的“明智之举“,但总让管理员们无法接受。除了重启系统,watchdog真的就没有用武之地了吗?

watchdog 强大的地方在于提供了两个接口test和repair 。

test选项提供了测试机制,一旦测试失败,watchdog就会采取行动挽救,也就是repair 。

repair 选项提供了挽救系统的办法,默认是重启系统,但可以定制,通常是一个shell 脚本。这就是本文的要点。

Watchdog配置文件示例

#ping                        = 172.31.14.1
#ping                        = 172.26.1.255
#interface                = eth0
#file                        = /var/log/messages
#change                        = 1407

# Uncomment to enable test. Setting one of these values to ’0′ disables it.
# These values will hopefully never reboot your machine during normal use
# (if your machine is really hung, the loadavg will go much higher than 25)
#max-load-1                = 24
#max-load-5                = 18
#max-load-15                = 12

# Note that this is the number of pages!
# To get the real size, check how large the pagesize is on your machine.
#min-memory                = 1

#repair-binary                = /usr/sbin/repair
#test-binary                =
#test-timeout                =

#watchdog-device        = /dev/watchdog

# Defaults compiled into the binary
#temperature-device        =
#max-temperature        = 120

# Defaults compiled into the binary
#admin                        = root
#interval                = 10
#logtick                = 1

# This greatly decreases the chance that watchdog won’t be scheduled before
# your machine is really loaded
realtime                = yes
priority                = 1

# Check if syslogd is still running by enabling the following line
#pidfile                = /var/run/syslogd.pid

如果你安装并运行了watchdog,配置文件中的几个基本选项是要打开的,有益无害。
Min-memory                = 1
watchdog-device        = /dev/watchdog

从上面可以得到,watchdog的配置文件里可以监控网络、负载、内存、进程的pid号等,这不就是管理员们日常监控的内容吗?

现在我们进入智能监控主题。所谓智能监控,就是无人值守的监控行为,发现问题,自动修复,如果不能自动修复,还可以通知管理员手动修复。

以监控网络接口eth0 为例,我们开启选项 interface = eth0,接下来开启选项repair-binary= /etc/watchdog.d/repair.sh ,这里我把修复行为指向了一个脚本,repair.sh
,内容如下

#!/usr/bin/env bash

ifconfig eth0 >/dev/null

if [$? != “0”];then

ifup eth0
fi

模拟故障,手动停止eth0,过一会儿,就会看到奇迹发生了,o(∩∩)o…哈哈!!

由于把修复动作交给了脚本,那么一切变得皆有可能!只要其他条件允许,发邮件,发短信、放音乐、看CCAV,总之,完全由你自己决定。

同理,配置文件中的其他监控选项可以举一反三。

假如我有一些定制的服务,平时都是用脚本循环进行监控,用watchdog怎么监控呢?这就要靠test 选项了,watchdog默认的检测行为是每隔一分钟往/dev/watchdog 设备里执行一次写操作,这是个闲活,test选项可以让看门狗执行其他一些检测,以发现异常。

开启选项test = /etc/watchdog.d/test.sh,以监控进程abc为例

#!/usr/bin/env bash

process_number=`pgrep abc |wc -l`

if [ $process_number  == “0” ];then
echo “process abc is not running”
exit 1
fi

按照脚本的意思,如果abc 进程数为0,那么就返回值1,检测到了异常!
相应的,watchdog会尝试修复异常。至于repair 脚本怎么写,你懂的!

你还在用while 循环吗? out 了!

附:
最简单的安装教程(CentOS)
yum install watchdog -y
modprobe softdog
chkconfig watchdog  on
/etc/init.d/watchdog start

补充内容 (2012-6-6 21:20):
如果repair 失败的话,watchdog依然会重启系统,这个需要注意!

补充内容 (2012-6-15 16:08):
可以通过在repair 脚本中加入 exit 0 来防止watchdog 重启系统,即无论修复是否成功,都返回成功,骗过watchdog 的重启机制

Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity)

硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。VPSee 前天收到一位网友的邮件提到了 SMP IRQ Affinity,引发了今天的话题:D,以下操作在 SUN FIre X2100 M2 服务器+ 64位版本 CentOS 5.5 + Linux 2.6.18-194.3.1.el5 上执行。

什么是中断

中文教材上对 “中断” 的定义太生硬了,简单的说就是,每个硬件设备(如:硬盘、网卡等)都需要和 CPU 有某种形式的通信以便 CPU 及时知道发生了什么事情,这样 CPU 可能就会放下手中的事情去处理应急事件,硬件设备主动打扰 CPU 的现象就可称为硬件中断,就像你正在工作的时候受到 QQ 干扰一样,一次 QQ 摇头就可以被称为中断。

中断是一种比较好的 CPU 和硬件沟通的方式,还有一种方式叫做轮询(polling),就是让 CPU 定时对硬件状态进行查询然后做相应处理,就好像你每隔5分钟去检查一下 QQ 看看有没有人找你一样,这种方式是不是很浪费你(CPU)的时间?所以中断是硬件主动的方式,比轮询(CPU 主动)更有效一些。

好了,这里又有了一个问题,每个硬件设备都中断,那么如何区分不同硬件呢?不同设备同时中断如何知道哪个中断是来自硬盘、哪个来自网卡呢?这个很容易,不是每个 QQ 号码都不相同吗?同样的,系统上的每个硬件设备都会被分配一个 IRQ 号,通过这个唯一的 IRQ 号就能区别张三和李四了。

在计算机里,中断是一种电信号,由硬件产生,并直接送到中断控制器(如 8259A)上,然后再由中断控制器向 CPU 发送信号,CPU 检测到该信号后,就中断当前的工作转而去处理中断。然后,处理器会通知操作系统已经产生中断,这样操作系统就会对这个中断进行适当的处理。现在来看一下中断控制器,常见的中断控制器有两种:可编程中断控制器 8259A 和高级可编程中断控制器(APIC),中断控制器应该在大学的硬件接口和计算机体系结构的相关课程中都学过。传统的 8259A 只适合单 CPU 的情况,现在都是多 CPU 多核的 SMP 体系,所以为了充分利用 SMP 体系结构、把中断传递给系统上的每个 CPU 以便更好实现并行和提高性能,Intel 引入了高级可编程中断控制器(APIC)。

光有高级可编程中断控制器的硬件支持还不够,Linux 内核还必须能利用到这些硬件特质,所以只有 kernel 2.4 以后的版本才支持把不同的硬件中断请求(IRQs)分配到特定的 CPU 上,这个绑定技术被称为 SMP IRQ Affinity. 更多介绍请参看 Linux 内核源代码自带的文档:linux-2.6.31.8/Documentation/IRQ-affinity.txt

如何使用

先看看系统上的中断是怎么分配在 CPU 上的,很显然 CPU0 上处理的中断多一些:

# cat /proc/interrupts
           CPU0       CPU1      
  0:  918926335          0    IO-APIC-edge  timer
  1:          2          0    IO-APIC-edge  i8042
  8:          0          0    IO-APIC-edge  rtc
  9:          0          0   IO-APIC-level  acpi
 12:          4          0    IO-APIC-edge  i8042
 14:    8248017          0    IO-APIC-edge  ide0
 50:        194          0   IO-APIC-level  ohci_hcd:usb2
 58:      31673          0   IO-APIC-level  sata_nv
 90:    1070374          0         PCI-MSI  eth0
233:         10          0   IO-APIC-level  ehci_hcd:usb1
NMI:       5077       2032
LOC:  918809969  918809894
ERR:          0
MIS:          0
为了不让 CPU0 很累怎么把部分中断转移到 CPU1 上呢?或者说如何把 eth0 网卡的中断转到 CPU1 上呢?先查看一下 IRQ 90 中断的 smp affinity,看看当前中断是怎么分配在不同 CPU 上的(ffffffff 意味着分配在所有可用 CPU 上):

# cat /proc/irq/90/smp_affinity
7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff
在进一步动手之前我们需要先停掉 IRQ 自动调节的服务进程,这样才能手动绑定 IRQ 到不同 CPU,否则自己手动绑定做的更改将会被自动调节进程给覆盖掉。如果想修改 IRQ 90 的中断处理,绑定到第2个 CPU(CPU1):

# /etc/init.d/irqbalance stop

# echo "2" > /proc/irq/90/smp_affinity
(上面的 echo “2″ 是怎么来的?为什么是 ”2“?请参考这篇:计算 SMP IRQ Affinity)过段时间在看 /proc/interrupts,是不是 90:eth0 在 CPU1 上的中断增加了(145)、在 CPU0 上的中断没变?不断打印 /proc/interrupts 就会发现 eth0 在 CPU0 上的中断数始终保持不变,而在 CPU1 上的中断数是持续增加的,这正是我们想要的结果:

# cat /proc/interrupts
           CPU0       CPU1      
  0:  922506515          0    IO-APIC-edge  timer
  1:          2          0    IO-APIC-edge  i8042
  8:          0          0    IO-APIC-edge  rtc
  9:          0          0   IO-APIC-level  acpi
 12:          4          0    IO-APIC-edge  i8042
 14:    8280147          0    IO-APIC-edge  ide0
 50:        194          0   IO-APIC-level  ohci_hcd:usb2
 58:      31907          0   IO-APIC-level  sata_nv
 90:    1073399        145         PCI-MSI  eth0
233:         10          0   IO-APIC-level  ehci_hcd:usb1
NMI:       5093       2043
LOC:  922389696  922389621
ERR:          0
MIS:          0
有什么用

在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能

vsftp软链接失效与mount实现虚拟目录

vsftp 本身不支持虚拟目录,软链接失效。但可以通过linux mount 命令来实现。
例如:
ftp 用户 panmanni根目录为
/var/www/pages/flashgame/
panmanni 需要访问/var/www/flashupload目录
ln -s /var/www/flashupload /var/www/pages/flashgame/flashupload这样做无效
正确使用:
mkdir -p /var/www/pages/flashgame/flashupload
mount --bind /var/www/flashupload /var/www/pages/flashgame/flashupload

在使用mount --bind olderdir newerdir命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。如下所示:
挂载前:
drwxr-xr-x 2 root root 4096 Mar 12 12:01 pub
drwx------ 3 staffs staffs 4096 Mar 15 14:08 staffs
挂载:
# mount --bind staffs/ pub/
挂载后:
drwx------ 3 staffs staffs 4096 Mar 15 14:08 pub
drwx------ 3 staffs staffs 4096 Mar 15 14:08 staffs
从上可以看出,挂载后的目录继承了被挂载目录的所有属性,除了名称

xcache 与zend

在CentOS 6.2的64位系统里,xcache 3用不了,不生效

xcache 2.0.1可以用,但不与zend op3.3不兼容,无法同是使用

ip_conntrack: table full

有两点我们要注意.
-conntrack最大数量.叫做conntrack_max
-存储这些conntrack的hash表的大小,叫做hashsize
当conntrack入口数大于conntrack_max时,在hash表中每一个conntrack list中的存储的入口将不可控.(conntrack_mark/hashsize 为每个list所能存储的入口的数量)
hash表存在于固定的的不可swap的内存中. conntrack_mark决定占用多少这些不可swap的内存.
缺省的hashsize
--------------------------------
conntrack_max=hashsize*8
i386中 hashsize=conntrack_max/8=ramsize(in bytes)/131072=ramsize(in MegaBytes)*8.
所以32位pc,512M内存可以存512*1024^2/128/1024=512*8=4096(连接池list)
但是正确的算法是:
hashsize=conntrack_max/8=ramsize(in bytes)/131072/(x/32) 
x表示使用的指针类型是(32位还是64的)
----------------------------\
读取conntrack_max值
2.4内核
cat /proc/sys/net/ipv4/ip_conntrack_max
2.6内核
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max

读取hashsize值
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_buckets
------------------------------
你可修改这两个值以适应高负载的netfilter的应用
系统默认为conntrack_max:hashsize是8:1,你可以设成1:1以提高性能.
-------------------------
设置conntrack_max
echo $CONNTRACK_MAX > /proc/sys/net/ipv4/ip_conntrack_max
设置hashsize
如果(netfilter conntrack静态编译在内核中),2.4中可以在编译时设置,2.6可以在启动中(boot时)加入ip_conntrack.hashsize=$hashsize
如果为modules,则可以使用 modprobe ip_conntrack hashsize=$hashsize
#####################################
实践过方法:
Vi  /etc/modprobe.conf
添加:
options ip_conntrack hashsize=524288
 
vi  /etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_max = 524288  (根据自己的物理内存算出来的)
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
##########################################
--------------------------
conntrack使用的内存计算
size_of_mem_used_by_conntrack (in bytes) =
        CONNTRACK_MAX * sizeof(struct ip_conntrack) +
        HASHSIZE * sizeof(struct list_head)
其中sizeof(struct ip_conntrack)大概在192-352字节之间.
sizeof(struct list_head) = 2 * size_of_a_pointer(i386中为4字节)
一个例子512m内存,使用384m来用于conntrack则
384*1024*1024/(352+8)(使用它是保守计算) =~1143901 (此为conntrack:hashszie为1:1,352为sizeof(ip_conntrack),8为sizeof(list_head).
由于hash最好设为2的乘方的数,所以为1048576(2^20).
---------------------
附相关设置及命令:
ip_conntrack timeout 原值432000秒(5天)
可改为10小时,echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
ip_conntrack buffer使用情况
grep conn /proc/slabinfo
例ip_conntrack      188069 229570    336   11    1 : tunables   54   27    8 : slabdata  20870
 
相关修改:
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range
echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "1048576" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "268435456" >/proc/sys/kernel/shmall
echo "536870912" >/proc/sys/kernel/shmmax
echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo "1024" > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo "2048" > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo "4096" > /proc/sys/net/ipv4/neigh/default/gc_thresh3
echo "52428800" > /proc/sys/net/ipv4/route/max_size
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling

Linux 下网络性能优化方法简析

通过/proc/sys/net/ipv4/优化Linux下网络性能

通过/proc/sys/net/ipv4/优化Linux下网络性能

/proc/sys/net/ipv4/优化
1)      /proc/sys/net/ipv4/ip_forward
该文件表示是否打开IP转发。
0,禁止
1,转发
 
缺省设置:0
2)      /proc/sys/net/ipv4/ip_default_ttl

 


该文件表示一个数据报的生存周期(Time To Live),即最多经过多少路由器。
 
缺省设置:64
增加该值会降低系统性能。
3)      /proc/sys/net/ipv4/ip_no_pmtu_disc
该文件表示在全局范围内关闭路径MTU探测功能。
 
缺省设置:0
4)      /proc/sys/net/ipv4/route/min_pmtu
该文件表示最小路径MTU的大小。
 
缺省设置:552
5)      /proc/sys/net/ipv4/route/mtu_expires
该文件表示PMTU信息缓存多长时间(秒)。
 
缺省设置:600(秒)
6)      /proc/sys/net/ipv4/route/min_adv_mss
该文件表示最小的MSS(Maximum Segment Size)大小,取决于第一跳的路由器MTU。
 
缺省设置:256(bytes)
6.1 IP Fragmentation
1)      /proc/sys/net/ipv4/ipfrag_low_thresh
/proc/sys/net/ipv4/ipfrag_low_thresh
两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。
 
缺省设置:196608(ipfrag_low_thresh)
     262144(ipfrag_high_thresh)
2)      /proc/sys/net/ipv4/ipfrag_time
该文件表示一个IP分段在内存中保留多少秒。
 
缺省设置:30(秒)
6.2 INET Peer Storage
1)      /proc/sys/net/ipv4/inet_peer_threshold
INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存
时间以及废物收集通过的时间间隔。条目越多,存活期越低,GC 间隔越短。
 
缺省设置:65664
2)      /proc/sys/net/ipv4/inet_peer_minttl
条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低
存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies为
单位测量。
 
缺省设置:120
3)      /proc/sys/net/ipv4/inet_peer_maxttl
条目的最大存活期。在此期限到达之后,如果缓冲池没有耗尽压力的话(例如:缓
冲池中的条目数目非常少),不使用的条目将会超时。该值以 jiffies为单位测量。
 
缺省设置:600
4)      /proc/sys/net/ipv4/inet_peer_gc_mintime
废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。该值
以 jiffies为单位测量。
 
缺省设置:10
5)      /proc/sys/net/ipv4/inet_peer_gc_maxtime
废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。该值
以 jiffies为单位测量。
 
缺省设置:120
6.3 TCP Variables
1)      /proc/sys/net/ipv4/tcp_syn_retries
该文件表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。
 
缺省设置:5
2)      /proc/sys/net/ipv4/tcp_keepalive_probes
该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。保持连接仅在
SO_KEEPALIVE套接字选项被打开时才被发送。
 
缺省设置:9(次)
3)      /proc/sys/net/ipv4/tcp_keepalive_time
该文件表示从不再传送数据到向连接上发送保持连接信号之间所需的秒数。
 
缺省设置:7200(2小时)
4)      /proc/sys/net/ipv4/tcp_keepalive_intvl
该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。
 
缺省设置:75(秒)
5)      /proc/sys/net/ipv4/tcp_retries1
  该文件表示放弃回应一个TCP连接请求前进行重传的次数。
  
  缺省设置:3
6)      /proc/sys/net/ipv4/tcp_retries2
  该文件表示放弃在已经建立通讯状态下的一个TCP数据包前进行重传的次数。
  
  缺省设置:15
7)      /proc/sys/net/ipv4/tcp_orphan_retries
在近端丢弃TCP连接之前,要进行多少次重试。默认值是 7 个,相当于 50秒–
16分钟,视 RTO 而定。如果您的系统是负载很大的web服务器,那么也许需
要降低该值,这类 sockets 可能会耗费大量的资源。另外参考
tcp_max_orphans。
8)      /proc/sys/net/ipv4/tcp_fin_timeout
对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能
会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在
2.2版本的内核中是 180 秒。您可以设置该值,但需要注意,如果您的机器为负
载很重的web服务器,您可能要冒内存被大量无效数据报填满的风险,
FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1,因为它们最多只吃 1.5K 
的内存,但是它们存在时间更长。另外参考 tcp_max_orphans。
 
缺省设置:60(秒)
9)      /proc/sys/net/ipv4/tcp_max_tw_buckets
系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,
time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯
粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果
网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。
 
缺省设置:180000
10) /proc/sys/net/ipv4/tcp_tw_recyle
打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求,请不要随
意修改这个值。
 
缺省设置:0
11) /proc/sys/net/ipv4/tcp_tw_reuse
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
 
缺省设置:0
12) /proc/sys/net/ipv4/tcp_max_orphans
系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那
么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这
个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降
低这个限制。
 
缺省设置:8192
13) /proc/sys/net/ipv4/tcp_abort_on_overflow
当守护进程太忙而不能接受新的连接,就向对方发送reset消息,默认值是false。
这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确
信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。
 
缺省设置:0
14) /proc/sys/net/ipv4/tcp_syncookies
该文件表示是否打开TCP同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES项进行编译。同步标签(syncookie)可以防止一个套接字在有过多试图连接到达时引起过载。
 
缺省设置:0
15) /proc/sys/net/ipv4/tcp_stdurg
使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的
BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。
 
缺省设置:0
16) /proc/sys/net/ipv4/tcp_max_syn_backlog
对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于
超过 128Mb 内存的系统,默认值是 1024,低于 128Mb 的则为 128。如果
服务器经常出现过载,可以尝试增加这个数字。警告!假如您将此值设为大于
1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE,以保持
TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如
果tcp_adv_win_scale 128Mb 32768-610000)则系统将忽略所有发送给自己
的ICMP ECHO请求或那些广播地址的请求。
 
缺省设置:1024
17) /proc/sys/net/ipv4/tcp_window_scaling
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力。
 
缺省设置:1
18) /proc/sys/net/ipv4/tcp_sack
该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。
 
缺省设置:1
19) /proc/sys/net/ipv4/tcp_timestamps
该文件表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。
 
缺省设置:1
20) /proc/sys/net/ipv4/tcp_fack
该文件表示是否打开FACK拥塞避免和快速重传功能。
 
缺省设置:1
21) /proc/sys/net/ipv4/tcp_dsack
该文件表示是否允许TCP发送“两个完全相同”的SACK。
 
缺省设置:1
22) /proc/sys/net/ipv4/tcp_ecn
该文件表示是否打开TCP的直接拥塞通告功能。
 
缺省设置:0
23) /proc/sys/net/ipv4/tcp_reordering
该文件表示TCP流中重排序的数据报最大数量。
 
缺省设置:3
24) /proc/sys/net/ipv4/tcp_retrans_collapse
该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。
 
缺省设置:1
25) /proc/sys/net/ipv4/tcp_wmem
该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。
 
缺省设置:4096 16384 131072
26) /proc/sys/net/ipv4/tcp_rmem
该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP 窗口大小为65535。
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,今天选择参数 SO_SNDBUF则不受该值影响。
 
缺省设置:4096 87380 174760
27) /proc/sys/net/ipv4/tcp_mem
该文件包含3个整数值,分别是:low,pressure,high
Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
High:允许所有tcp sockets用于排队缓冲数据报的页面量。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
 
缺省设置:24576 32768 49152
28) /proc/sys/net/ipv4/tcp_app_win
该文件表示保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。
 
缺省设置:31
29) /proc/sys/net/ipv4/tcp_adv_win_scale
该文件表示计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale )。
 
缺省设置:2
6.4 IP Variables
1)      /proc/sys/net/ipv4/ip_local_port_range
该文件表示TCP/UDP协议打开的本地端口号。
 
缺省设置:1024 4999
建议设置:32768 61000
2)      /proc/sys/net/ipv4/ip_nonlocal_bind
该文件表示是否允许进程邦定到非本地地址。
 
缺省设置:0
3)      /proc/sys/net/ipv4/ip_dynaddr
该参数通常用于使用拨号连接的情况,可以使系统动能够立即改变ip包的源地址为该ip地址,同时中断原有的tcp对话而用新地址重新发出一个syn请求包,开始新的tcp对话。在使用ip欺骗时,该参数可以立即改变伪装地址为新的ip地址。该文件表示是否允许动态地址,如果该值非0,表示允许;如果该值大于1,内核将通过log记录动态地址重写信息。
 
缺省设置:0
4)      /proc/sys/net/ipv4/icmp_echo_ignore_all
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
该文件表示内核是否忽略所有的ICMP ECHO请求,或忽略广播和多播请求。
0,响应请求
1,忽略请求
 
缺省设置:0
建议设置:1
5)      /proc/sys/net/ipv4/icmp_ratelimit
6)      /proc/sys/net/ipv4/icmp_ratemask
7)      /proc/sys/net/ipv4/icmp_ignore_bogus_error_reponses
某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行
为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会
记录这种警告信息。
 
缺省设置:0
8)      /proc/sys/net/ipv4/igmp_max_memberships
该文件表示多播组中的最大成员数量。
 
缺省设置:20
6.5 Other Configuration
1)      /proc/sys/net/ipv4/conf/*/accept_redirects
   如果主机所在的网段中有两个路由器,你将其中一个设置成了缺省网关,但是该网关
   在收到你的ip包时发现该ip包必须经过另外一个路由器,这时这个路由器就会给你
   发一个所谓的“重定向”icmp包,告诉将ip包转发到另外一个路由器。参数值为布尔
   值,1表示接收这类重定向icmp 信息,0表示忽略。在充当路由器的linux主机上缺
   省值为0,在一般的linux主机上缺省值为1。建议将其改为0以消除安全性隐患。
2)      /proc/sys/net/ipv4/*/accept_source_route
 是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。在
 充当网关的linux主机上缺省值为1,在一般的linux主机上缺省值为0。从安全性角
 度出发,建议关闭该功能。
3)      /proc/sys/net/ipv4/*/secure_redirects
 其实所谓的“安全重定向”就是只接受来自网关的“重定向”icmp包。该参数就是
 用来设置“安全重定向”功能的。参数值为布尔值,1表示启用,0表示禁止,缺省值
 为启用。
4)      /proc/sys/net/ipv4/*/proxy_arp
 设置是否对网络上的arp包进行中继。参数值为布尔值,1表示中继,0表示忽略,
 缺省值为0。该参数通常只对充当路由器的linux主机有用。