net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
通过源路由,攻击者可以尝试到达内部IP地址 --包括RFC1918中的地址,所以不接受源路由信息包可以防止你的内部网络被探测。
net.inet.tcp.drop_synfin=1
安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探测。
kern.maxvnodes=8446
vnode 是对文件或目录的一种内部表达。 因此, 增加可以被操作系统利用的 vnode 数量将降低磁盘的 I/O。
一般而言, 这是由操作系统自行完成的,也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈,
而系统的 vnode 不足, 则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。
kern.maxproc: 964 #Maximum number of processes
kern.maxprocperuid: 867 #Maximum processes allowed per userid
kern.maxfiles: 1928 #系统中支持最多同时开启的文件数量,如果你在运行数据库或大的很吃描述符的进程,那么应该设置在20000以上,比如kde这样的桌面环境,它同时要用的文件非常多。一般推荐设置为32768或者65536。
kern.argmax: 262144 #maximum number of bytes (or characters) in an argument list.
kern.securelevel: -1
这是系统默认级别,没有提供任何内核的保护错误;
0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。
1:在这个级别上,有如下几个限制:
a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;
b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;
c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;
d. 不能启动X-windows,同时不能使用chflags来修改文件属性;
2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;
3:在 2 级别的级别上不允许修改IPFW防火墙的规则。
如果你已经装了防火墙,并且把规则设好了,不轻易改动,那么建议使用3级别,如果你没有装防火墙,而且还准备装防火墙的话,不建议使用。
我们这里推荐使用 2 级别,能够避免比较多对内核攻击。
kern.maxfilesperproc: 1735 #每个进程能够同时打开的最大文件数量
kern.ipc.maxsockbuf: 262144 #最大的套接字缓冲区
kern.ipc.somaxconn: 128 #最大的等待连接完成的套接字队列大小,即并发连接数
kern.ipc.shmmax: 33554432
kern.ipc.shmall: 8192
共享内存和信号灯(”System VIPC”)如果这些过小的话有些大型的软件将无法启动
kern.ipc.shm_use_phys: 0
如果我们将它设成 1,则所有 System V 共享内存 (share memory,一种程序间沟通的方式)部份都会被留在实体的内存 (physical memory) 中,
而不会被放到硬盘上的 swap 空间。我们知道物理内存的存取速度比硬盘快许多,而当物理内存空间不足时,
部份数据会被放到虚拟的内存上,从物理内存和虚拟内存之间移转的动作就叫作 swap。如果时常做 swap 的动作
则需要一直对硬盘作 I/O,速度会很慢。因此,如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间,
或者是共享内存空间很大时,我们可以将这个值打开。
kern.ipc.shm_allow_removed: 0 #共享内存是否允许移除
kern.ipc.numopensockets: 12 #已经开启的socket数目
kern.ipc.maxsockets: 1928 #这是用来设定系统最大可以开启的 socket 数目,这个值必须在系统一开机就设定好,所以如果要修改这项设定,我们必须修改 /boot/loader.conf 才行 kern.ipc.maxsockets="16424″
kern.ipc.nsfbufs: 1456
经常使用 sendfile(2) 系统调用的繁忙的服务器,
有必要通过 NSFBUFS 内核选项或者在 /boot/loader.conf (查看 loader(8)以获得更多细节) 中设置它的值来调节 sendfile(2) 缓存数量。
这个参数需要调节的普通原因是在进程中看到 sfbufa 状态。sysctl kern.ipc.nsfbufs 变量在内核配置变量中是只读的。
这个参数是由 kern.maxusers 决定的,然而它可能有必要因此而调整。
在/boot/loader.conf里加入
kern.ipc.nsfbufs=”2496″
kern.maxusers: 59
maxusers 的值决定了处理程序所容许的最大值,20+16*maxusers 就是你将得到的所容许处理程序。
如果你的系统会出现 proc table full 的讯息的话,可以就把它设大一点,例如 128。
除非您的系统会需要同时开启很多档案,否则请不要设定超过 256。
可以在 /boot/loader.conf 中加入该选项的设定,
kern.maxusers=256
kern.coredump: 1
如果设置为0,则程序异常退出时不会生成core文件,作为服务器,不建议这样。
kern.corefile: %N.core
可设置为kern.corefile=”/data/coredump/%U-%P-%N.core”
其中 %U是UID,%P是进程ID,%N是进程名,当然/data/coredump必须是一个实际存在的目录
vm.swap_idle_enabled: 0
vm.swap_idle_threshold1: 2
vm.swap_idle_threshold2: 10
在有很多用户进入、离开系统和有很多空闲进程的大的多用户系统中很有用。
可以让进程更快地进入内存,但它会吃掉更多的交换和磁盘带宽。
系统默认的页面调度算法已经很好了,最好不要更改。
vfs.ufs.dirhash_maxmem: 2097152
默认的dirhash最大内存,默认2M
增加它有助于改善单目录超过100K个文件时的反复读目录时的性能
建议修改为33554432(32M)
vfs.vmiodirenable: 1
这个变量控制目录是否被系统缓存。大多数目录是小的,在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 (典型的是512字节)。
当这个变量设置为关闭 (0) 时,缓存器仅仅缓存固定数量的目录,即使您有很大的内存。
而将其开启 (设置为1) 时,则允许缓存器用 VM
页面缓存来缓存这些目录,让所有可用内存来缓存目录。
不利的是最小的用来缓存目录的核心内存是大于 512 字节的物理页面大小(通常是 4k)。
我们建议如果您在运行任何操作大量文件的程序时保持这个选项打开的默认值。
这些服务包括 web 缓存,大容量邮件系统和新闻系统。
尽管可能会浪费一些内存,但打开这个选项通常不会降低性能。但还是应该检验一下。
vfs.hirunningspace: 1048576
这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可,
但当我们有多颗硬盘时,我们可以将它调大为 4MB 或 5MB。
注意这个设置成很高的值(超过缓存器的写极限)会导致坏的性能。
不要盲目的把它设置太高!高的数值会导致同时发生的读操作的迟延。
vfs.write_behind: 1
这个选项预设为 1,也就是打开的状态。在打开时,在系统需要写入数据在硬盘或其它储存设备上时,
它会等到收集了一个 cluster 单位的数据后再一次写入,否则会在一个暂存区空间有写入需求时就立即写到硬盘上。
这个选项打开时,对于一个大的连续的文件写入速度非常有帮助。但如果您遇到有很多行程延滞在等待写入动作时,您可能必须关闭这个功能。
net.local.stream.sendspace: 8192
本地套接字连接的数据发送空间
建议设置为65536
net.local.stream.recvspace: 8192
本地套接字连接的数据接收空间
建议设置为65536
net.inet.ip.portrange.lowfirst: 1023
net.inet.ip.portrange.lowlast: 600
net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535
net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.hilast: 65535
以上六项是用来控制TCP及UDP所使用的port范围,这个范围被分成三个部份,低范围、预设范围、及高范围。
这些是你的服务器主动发起连接时的临时端口的范围,预设的已经1万多了,一般的应用就足够了。
如果是比较忙碌的FTP server,一般也不会同时提供给1万多人访问的,
当然如果很不幸,你的服务器就要提供很多,那么可以修改first的值,比如直接用1024开始
net.inet.ip.redirect: 1
设置为0,屏蔽ip重定向功能
net.inet.ip.rtexpire: 3600
net.inet.ip.rtminexpire: 10
很多apache产生的CLOSE_WAIT状态,这种状态是等待客户端关闭,但是客户端那边并没有正常的关闭,于是留下很多这样的东东。
建议都修改为2
net.inet.ip.intr_queue_maxlen: 50
Maximum size of the IP input queue,如果下面的net.inet.ip.intr_queue_drops一直在增加,
那就说明你的队列空间不足了,那么可以考虑增加该值。
net.inet.ip.intr_queue_drops: 0
Number of packets dropped from the IP input queue,如果你sysctl它一直在增加,
那么增加net.inet.ip.intr_queue_maxlen的值。
net.inet.ip.fastforwarding: 0
如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间
但会需要大量的内核内存空间来保存路由表。
如果内存够大,打开吧,呵呵
net.inet.ip.random_id: 0
默认情况下,ip包的id号是连续的,而这些可能会被攻击者利用,比如可以知道你nat后面带了多少主机。
如果设置成1,则这个id号是随机的,嘿嘿。
net.inet.icmp.maskrepl: 0
防止广播风暴,关闭其他广播探测的响应。默认即是,无须修改。
net.inet.icmp.icmplim: 200
限制系统发送ICMP速率,改为100吧,或者保留也可,并不会给系统带来太大的压力。
net.inet.icmp.icmplim_output: 1
如果设置成0,就不会看到提示说Limiting icmp unreach response from 214 to 200 packets per second 等等了
不过禁止输出容易让我们忽视攻击的存在。这个自己看着办吧。
net.inet.icmp.drop_redirect: 0
net.inet.icmp.log_redirect: 0
设置为1,屏蔽ICMP重定向功能
net.inet.icmp.bmcastecho: 0
防止广播风暴,关闭广播ECHO响应,默认即是,无须修改。
net.inet.tcp.mssdflt: 512
net.inet.tcp.minmss: 216
数据包数据段最小值,以上两个选项最好不动!或者只修改mssdflt为1460,minmss不动。
net.inet.tcp.keepidle: 7200000
TCP的套接字的空闲时间,默认时间太长,可以改为600000(10分钟)。
net.inet.tcp.sendspace: 32768
最大的待发送TCP数据缓冲区空间,应用程序将数据放到这里就认为发送成功了,系统TCP堆栈保证数据的正常发送。
net.inet.tcp.recvspace: 65536
最大的接受TCP缓冲区空间,系统从这里将数据分发给不同的套接字,增大该空间可提高系统瞬间接受数据的能力以提高性能。
这二个选项分别控制了网络 TCP 联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K而接收暂存区为 64K。
如果需要加速 TCP 的传输,可以将这二个值调大一点,但缺点是太大的值会造成系统核心占用太多的内存。
如果我们的机器会同时服务数百或数千个网络联机,那么这二个选项最好维持默认值,否则会造成系统核心内存不足。
但如果我们使用的是 gigabite 的网络,将这二个值调大会有明显效能的提升。
传送及接收的暂存区大小可以分开调整,
例如,假设我们的系统主要做为网页服务器,我们可以将接收的暂存区调小一点,并将传送的暂存区调大,如此一来,我们就可以避免占去太多的核心内存空间。
net.inet.udp.maxdgram: 9216
最大的发送UDP数据缓冲区大小,网上的资料大多都是65536,我个人认为没多大必要,
如果要调整,可以试试24576。
net.inet.udp.recvspace: 42080
最大的接受UDP缓冲区大小,网上的资料大多都是65536,我个人认为没多大必要,
如果要调整,可以试试49152。
以上四项配置通常不会导致问题,一般说来网络流量是不对称的,因此应该根据实际情况调整,并观察其效果。
如果我们将传送或接收的暂存区设为大于 65535,除非服务器本身及客户端所使用的操作系统都支持 TCP 协议的 windows scaling extension (请参考 RFC 1323 文件)。
FreeBSD默认已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323选项)。
net.inet.tcp.log_in_vain: 0
记录下任何TCP连接,这个一般情况下不应该更改。
net.inet.tcp.blackhole: 0
建议设置为2,接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
net.inet.tcp.delayed_ack: 1
当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。
该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送。
在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,
对方计算机得不到应答会持续发起连接请求,反而会让网络更加拥堵,降低性能。
因此这个值我建议您看情况而定,如果您的网速不是问题,可以将封包数量减少一半
如果网络不是特别好,那么就设置为0,有请求就先回应,这样其实浪费的网通、电信的带宽速率而不是你的处理时间
net.inet.tcp.inflight.enable: 1
net.inet.tcp.inflight.debug: 0
net.inet.tcp.inflight.rttthresh: 10
net.inet.tcp.inflight.min: 6144
net.inet.tcp.inflight.max: 1073725440
net.inet.tcp.inflight.stab: 20
限制 TCP 带宽延迟积和 NetBSD 的 TCP/Vegas 类似。
它可以通过将 sysctl 变量 net.inet.tcp.inflight.enable 设置成 1来启用。
系统将尝试计算每一个连接的带宽延迟积,并将排队的数据量限制在恰好能保持最优吞吐量的水平上。
这一特性在您的服务器同时向使用普通调制解调器,千兆以太网,乃至更高速度的光与网络连接 (或其他带宽延迟积很大的连接) 的时候尤为重要,
特别是当您同时使用滑动窗缩放,或使用了大的发送窗口的时候。
如果启用了这个选项,您还应该把 net.inet.tcp.inflight.debug 设置为 0 (禁用调试),
对于生产环境而言, 将 net.inet.tcp.inflight.min 设置成至少 6144 会很有好处。
然而,需要注意的是,这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。
这个限制特性减少了在路由和交换包队列的堵塞数据数量,也减少了在本地主机接口队列阻塞的数据的数量。
在少数的等候队列中、交互式连接,尤其是通过慢速的调制解调器,也能用低的 往返时间操作。
但是,注意这只影响到数据发送 (上载/服务端)。对数据接收(下载)没有效果。
调整 net.inet.tcp.inflight.stab 是 不 推荐的。
这个参数的默认值是 20表示把 2 个最大包加入到带宽延迟积窗口的计算中。
额外的窗口似的算法更为稳定,并改善对于多变网络环境的相应能力,
但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 inflight 算法低许多)。
对于这些情形, 您可能会希望把这个参数减少到 15, 10, 或 5;
并可能因此而不得不减少 net.inet.tcp.inflight.min (比如说,3500) 来得到希望的效果。
减少这些参数的值, 只应作为最后不得已时的手段来使用。
net.inet.tcp.syncookies: 1
SYN cookies是一种用于通过选择加密的初始化TCP序列号,可以对回应的包做验证来降低SYN’洪水’攻击的影响的技术。
默认即是,不需修改
net.inet.tcp.msl: 30000
这个值网上很多文章都推荐的7500,
还可以改的更小一些(如2000或2500),这样可以加快不正常连接的释放过程三次握手2秒、FIN_WAIT4秒)。
net.inet.tcp.always_keepalive: 1
帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。
死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接。
net.inet.udp.checksum: 1
防止不正确的udp包的攻击,默认即是,不需修改
net.inet.udp.log_in_vain: 0
记录下任何UDP连接,这个一般情况下不应该修改。
net.inet.udp.blackhole: 0
建议设置为1,接收到一个已经关闭的端口发来的所有UDP包直接drop
net.inet.raw.maxdgram: 8192
Maximum outgoing raw IP datagram size
很多文章建议设置为65536,好像没多大必要。
net.inet.raw.recvspace: 8192
Maximum incoming raw IP datagram size
很多文章建议设置为65536,好像没多大必要。
net.link.ether.inet.max_age: 1200
调整ARP清理的时间,通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。
这项似乎大家都未做改动,我建议不动或者稍微减少,比如300(HP-UX默认的5分钟)
net.inet6.ip6.redirect: 1
设置为0,屏蔽ipv6重定向功能
net.isr.direct: 0
所有MPSAFE的网络ISR对包做立即响应,提高网卡性能,设置为1。
hw.ata.wc: 1
这个选项用来打开 IDE 硬盘快取。当打开时,如果有数据要写入硬盘时,硬盘会假装已完成写入,并将数据快取起来。
编辑 /etc/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小时)
【sysctl.conf文件配置详解】net.inet.ipf.fr_tcpidletimeout=864000
参考链接:
Understanding /etc/sysctl.conf file in Linux
推荐阅读
- Linux 查看文件内容——bat 命令
- TIDB 初级课程体验 8 (文件和日志 与监控)
- 基于armlinux的shell之文件路径截取
- 虚拟用户启用vsftp的文件共享
- 文件夹加密
- 了解下C# 文件的输入与输出
- IO流篇 -- 基于io流实现文件夹拷贝(拷贝子文件夹及子文件夹内文件)
- 文件权限管理
- 如何从SVN上拉取指定版本间的文件