FreeBsd网络性能优化方案WEB sysctl.conf ,以及老大逐句解析

下面这部分是网上贴出来的:   

    #最大的待发送TCP数据缓冲区空间

  net.inet.tcp.sendspace=65536

  #最大的接受TCP缓冲区空间

  net.inet.tcp.recvspace=65536

  #最大的接受UDP缓冲区大小

  net.inet.udp.sendspace=65535

  #最大的发送UDP数据缓冲区大小

  net.inet.udp.maxdgram=65535

  #本地套接字连接的数据发送空间

  net.local.stream.sendspace=65535

  #加快网络性能的协议

  net.inet.tcp.rfc1323=1

  net.inet.tcp.rfc1644=1

  net.inet.tcp.rfc3042=1

  net.inet.tcp.rfc3390=1

  #最大的套接字缓冲区

  kern.ipc.maxsockbuf=2097152

  #系统中允许的最多文件数量

  kern.maxfiles=65536

  #每个进程能够同时打开的最大文件数量

  kern.maxfilesperproc=32768

  #当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送,在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会降低性能。

  net.inet.tcp.delayed_ack=0

  #屏蔽ICMP重定向功能

  net.inet.icmp.drop_redirect=1

  net.inet.icmp.log_redirect=1

  net.inet.ip.redirect=0

  net.inet6.ip6.redirect=0

  #防止ICMP广播风暴

  net.inet.icmp.bmcastecho=0

  net.inet.icmp.maskrepl=0

  #限制系统发送ICMP速率

  net.inet.icmp.icmplim=100

  #安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用

  net.inet.icmp.icmplim_output=0

  net.inet.tcp.drop_synfin=1

  #设置为1会帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接

  net.inet.tcp.always_keepalive=1

  #若看到net.inet.ip.intr_queue_drops这个在增加,就要调大net.inet.ip.intr_queue_maxlen,为0最好

  net.inet.ip.intr_queue_maxlen=1000

  #防止DOS攻击,默认为30000

  net.inet.tcp.msl=7500

  #接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

  net.inet.tcp.blackhole=2

  #接收到一个已经关闭的端口发来的所有UDP包直接drop

  net.inet.udp.blackhole=1

  #为网络数据连接时提供缓冲

  net.inet.tcp.inflight.enable=1

  #如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表

  net.inet.ip.fastforwarding=0

  #kernel编译打开options POLLING功能,高负载情况下使用低负载不推荐SMP不能和polling一起用

  #kern.polling.enable=1

  #并发连接数,默认为128,推荐在1024-4096之间,数字越大占用内存也越大

  kern.ipc.somaxconn=32768

  #禁止用户查看其他用户的进程

  security.bsd.see_other_uids=0

  #设置kernel安全级别

  kern.securelevel=0

  #记录下任何TCP连接

  net.inet.tcp.log_in_vain=1

  #记录下任何UDP连接

  net.inet.udp.log_in_vain=1

  #防止不正确的udp包的攻击

  net.inet.udp.checksum=1

  #防止DOS攻击

  net.inet.tcp.syncookies=1

  #仅为线程提供物理内存支持,需要256兆以上内存

  kern.ipc.shm_use_phys=1

  # 线程可使用的最大共享内存

  kern.ipc.shmmax=67108864

  # 最大线程数量

  kern.ipc.shmall=32768

  # 程序崩溃时不记录

  kern.coredump=0

  # lo本地数据流接收和发送空间

  net.local.stream.recvspace=65536

  net.local.dgram.maxdgram=16384

  net.local.dgram.recvspace=65536

  # 数据包数据段大小,ADSL为1452.

  net.inet.tcp.mssdflt=1460

  # 为网络数据连接时提供缓冲

  net.inet.tcp.inflight_enable=1

  # 数据包数据段最小值,ADSL为1452

  net.inet.tcp.minmss=1460

  # 本地数据最大数量

  net.inet.raw.maxdgram=65536

  # 本地数据流接收空间

  net.inet.raw.recvspace=65536

  #ipfw防火墙动态规则数量,默认为4096,增大该值可以防止某些病毒发送大量TCP连接,导致不能建立正常连接

  net.inet.ip.fw.dyn_max=65535

  #设置ipf防火墙TCP连接空闲保留时间,默认8640000(120小时)

  net.inet.ipf.fr_tcpidletimeout=864000

二.下面是经过测试的不会有太多问题的

freebsd 下sysctl.conf详解说明

这个是一网友发的一份配置。FREEBSD老大亲自解释了。我从中学到不少。移动来大家参考

把这份sysctl.conf贴在这里,让大家帮我分析分析。也避免别的人按这个优化出现同样的问题。

--------------------------------------

# $FreeBSD: src/etc/sysctl.conf,v 1.8 2003/03/13 18:43:50 mux Exp $

#

# This file is read when going to multi-user and its contents piped thru

# ``sysctl'' to adjust kernel values. ``man 5 sysctl.conf'' for details.

#

# Uncomment this to prevent users from seeing information about processes that

# are being run under another UID.

security.bsd.see_other_uids=0

net.inet.tcp.sendspace=65536

net.inet.tcp.recvspace=65536

#net.inet.udp.sendspace=65536

net.inet.udp.maxdgram=65536

net.local.stream.sendspace=65536

net.inet.tcp.rfc1323=1

#net.inet.tcp.rfc1644=1

net.inet.tcp.rfc3042=1

net.inet.tcp.rfc3390=1

kern.ipc.maxsockbuf=2097152

kern.maxfiles=65536

kern.maxfilesperproc=32768

net.inet.tcp.delayed_ack=0

net.inet.icmp.drop_redirect=1

net.inet.icmp.log_redirect=1

net.inet.ip.redirect=0

net.inet.icmp.bmcastecho=0

net.inet.icmp.maskrepl=0

net.inet.icmp.icmplim=100

net.inet.icmp.icmplim_output=0

#net.inet.tcp.drop_synfin=1

net.inet.tcp.always_keepalive=1

net.inet.ip.intr_queue_maxlen=1000 (这儿太大了。建议不用或小点值)

net.inet.tcp.msl=7500 (太大了。建议2500-2000左右)

net.inet.tcp.blackhole=2

net.inet.tcp.inflight.enable=1

net.inet.ip.fastforwarding=0

kern.ipc.somaxconn=32768

kern.securelevel=0

#net.inet.tcp.log_in=1

#net.inet.udp.log_in=1

net.inet.udp.checksum=1

net.inet.tcp.syncookies=1

kern.ipc.shm_use_phys=1

kern.ipc.shmmax=67108864

kern.ipc.shmall=32768

kern.coredump=0

net.local.stream.recvspace=65536

net.local.dgram.maxdgram=16384

net.local.dgram.recvspace=65536

#net.inet.tcp.mssdflt=1460

#net.inet.tcp.minmss=1640

net.inet.raw.maxdgram=65535

net.inet.raw.recvspace=65535

net.inet.ip.fw.dyn_max=65535

net.inet.ipf.fr_tcpidletimeout=864000

以上是原文。我把有错误的给#号了。不然大家抄回去死得惨

下面是老大亲自加的注解哦,大家好好参详

加的东西实在太多了……

sylion 写到:

security.bsd.see_other_uids=0

这个通常没有必要,除非系统需要让不信任的人登录。

sylion 写到:

net.inet.tcp.sendspace=65536

net.inet.tcp.recvspace=65536

#net.inet.udp.sendspace=65536

net.inet.udp.maxdgram=65536

这些配置通常不会导致问题,但是这么配置会导致开销增大,一般说来网络流量是不对称的,因此应该根据实际情况调整,并观察其效果。

sylion 写到:

net.local.stream.sendspace=65536

这个我的经验是意义不大。

sylion 写到:

net.inet.tcp.rfc1323=1

#net.inet.tcp.rfc1644=1

net.inet.tcp.rfc3042=1

net.inet.tcp.rfc3390=1

所有rfc相关的选项都是默认启用的。

sylion 写到:

kern.ipc.maxsockbuf=2097152

2MB这个值对许多应用都不合适。

sylion 写到:

kern.maxfiles=65536

这个值的调整有意义,不过如果默认的32768不够用的话,请确认一下程序里面是否有fd泄露。

sylion 写到:

kern.maxfilesperproc=32768

除非用异步I/O或大量线程,打开这么多的文件恐怕是不太正常的。

sylion 写到:

net.inet.tcp.delayed_ack=0

通常这样改无非让网络更拥堵一些而已。

sylion 写到:

net.inet.icmp.drop_redirect=1

net.inet.icmp.log_redirect=1

这个没什么问题。

sylion 写到:

net.inet.ip.redirect=0

非路由器关掉无妨。

sylion 写到:

net.inet.icmp.bmcastecho=0

net.inet.icmp.maskrepl=0

没必要,默认值如此。

sylion 写到:

net.inet.icmp.icmplim=100

net.inet.icmp.icmplim_output=0

个人认为默认的200不会导致太大压力。禁止输出容易让我们忽视攻击的存在。

sylion 写到:

#net.inet.tcp.drop_synfin=1

除了能阻止某些OS探测之外,它还违反了TCP标准。

sylion 写到:

net.inet.tcp.always_keepalive=1

访问量大的时候通常我们不会希望这样设置。或者至少应该把keepalive的时间缩短。

sylion 写到:

net.inet.ip.intr_queue_maxlen=1000

老天!如果这个queue达到了1000的话恐怕机器先扛不住了……

sylion 写到:

net.inet.tcp.msl=7500

这个值我通常会改的更小一些(2000或2500),这样可以加快不正常连接的释放过程(三次握手2秒、FIN_WAIT4秒)。

sylion 写到:

net.inet.tcp.blackhole=2

这个没什么问题。

sylion 写到:

net.inet.tcp.inflight.enable=1

没必要,默认值如此。

sylion 写到:

net.inet.ip.fastforwarding=0

没必要,默认值如此。

sylion 写到:

kern.ipc.somaxconn=32768

这个根据需要设就可以了。

sylion 写到:

kern.securelevel=0

这个最好配到 /etc/rc.conf 里面(我后面就是这样子配置到/etc/rc.conf里的)。

sylion 写到:

#net.inet.tcp.log_in=1

#net.inet.udp.log_in=1

?? 这两个参数是干嘛的?

sylion 写到:

net.inet.udp.checksum=1

没必要,默认值如此。

sylion 写到:

net.inet.tcp.syncookies=1

没必要,默认值如此。

sylion 写到:

kern.ipc.shm_use_phys=1

不理解为什么要这样改。我个人认为没有必要。

sylion 写到:

kern.ipc.shmmax=67108864

kern.ipc.shmall=32768

这个除非程序有特殊需要,一般情况下并不需要调整。

sylion 写到:

kern.coredump=0

除非永远不打算知道signal 11/6是什么原因。我一般的做法是改kern.corefile指定core的位置,防止把磁盘填满。当然生产系统上这样做问题不大,必要的时候可以打开。

sylion 写到:

net.local.stream.recvspace=65536

net.local.dgram.maxdgram=16384

net.local.dgram.recvspace=65536

我个人认为这些没有必要调整。

sylion 写到:

net.inet.tcp.mssdflt=1460

1460似乎是给ADSL配置的?

sylion 写到:

net.inet.tcp.minmss=1640

如果要赌一个能导致问题的话,我赌这个。

sylion 写到:

net.inet.raw.maxdgram=65535

net.inet.raw.recvspace=65535

个人认为没必要。

sylion 写到:

net.inet.ip.fw.dyn_max=65535

net.inet.ipf.fr_tcpidletimeout=864000

这些只有使用防火墙,并且明白设置到底是什么意思的时候才有意义。此外我认为第二个配置是错的。

3.下面是我最后配置的

#--------------------------------------

# $FreeBSD: src/etc/sysctl.conf,v 1.8.36.1 2010/02/10 00:26:20 kensmith Exp $
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl'' to adjust kernel values.  ``man 5 sysctl.conf'' for details.
#

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
net.inet.tcp.recvspace=65536 

net.inet.udp.maxdgram=65536

net.local.stream.sendspace=65536

kern.ipc.maxsockbuf=2097152

kern.maxfiles=65536

kern.maxfilesperproc=32768

net.inet.tcp.delayed_ack=0

net.inet.icmp.drop_redirect=1

net.inet.icmp.log_redirect=1

net.inet.ip.redirect=0

net.inet.icmp.bmcastecho=0

net.inet.icmp.maskrepl=0

net.inet.icmp.icmplim=100

net.inet.icmp.icmplim_output=0 

net.inet.tcp.always_keepalive=1

net.inet.ip.intr_queue_maxlen=100

net.inet.tcp.msl=2000  

net.inet.tcp.blackhole=2

kern.ipc.somaxconn=32768

kern.ipc.shm_use_phys=1

kern.ipc.shmmax=67108864

kern.ipc.shmall=32768

kern.coredump=0

net.local.stream.recvspace=65536

net.local.dgram.maxdgram=16384

net.local.dgram.recvspace=65536

net.inet.raw.maxdgram=65535

net.inet.raw.recvspace=65535

net.inet.ip.fw.dyn_max=65535

net.inet.ipf.fr_tcpidletimeout=864000

 

如果修改了/etc/sysctl.conf,要怎样才可以在不重启机器的情况下加载新的内容?
答:# /etc/rc.d/sysctl reload
所以我们这里修改完/etc/sysctl.conf,执行:# /etc/rc.d/sysctl reload便重新加载了

系统提示如下图:

另外修改/etc/rc.conf

加入

kern_securelevel_enable="YES"

kern_securelevel="3" #(注:因为我之前装了ipfw并设置了ipfw规则,所以采用3级别)

 

解释如下:

FreeBSD有个比较强的功能,就是能够定义系统内核的安全等级,主要是为了防止内核后门专门定制的,能通过不同的等级限制对内核的访问和对防火墙等的修改。我们首先要开启系统的安全等级,然后设定安全等级,我们打开 /etc/rc.conf:

# vi /etc/rc.conf

加入下面的内容:

kern_securelevel_enable="YES"

kern_securelevel="-1"

第一句是打开安全等级,第二句是定义等级。它一共五个等级,下面说说不同之处。

* kern_securelevel -1:这是系统默认级别,没有提供任何内核的保护错误;

* kern_securelevel  0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。

* kern_securelevel  1:在这个级别上,有如下几个限制:

a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;

b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;

c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;

d. 不能启动X-windows,同时不能使用chflags来修改文件属性;

* kern_securelevel  2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;

* kern_securelevel  3:在 2 级别的级别上不允许修改IPFW防火墙的规则。

如果你已经装了防火墙,并且把规则设好了,不轻易改动,那么建议使用3级别,如果你没有装防火墙,而且还准备装防火墙的话,不建议使用。我们这里推荐使用 2 级别,能够避免比较多对内核攻击。

 

OK,大功告成了!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值