#内核转发数据包1开启0 关闭
net.ipv4.ip_forward = 0
#开启反向路径过滤
#在缺省状态下,路由器根据包的目的地址进行转发,所以路由器缺省是对来自任何地方的包进行转发的。假如路由器的2.2.2.2接口(也即广 域网接口)接收到一个包,该包的源地址为1.1.1.100(也即为 Intranet地址),虽然这是不可能或者说是不合理的,但是由于路由器的特性,路由器还 是会将这个不合法的包转发到Intranet。从而让***有了可乘之机,为其进行ip欺骗***打开了方便之门。
#幸好,我们可以通过Linux的内核系统参数“反向路径过滤”来防止这种情况,该参数位于/proc/sys/net/ipv4/conf/下的各个子目录中的rp_filter文件 。参数值为整数,可能的值有:
#2 - 进行全面的反向路径过滤,推荐在边缘路由器上使用。但是要注意,在复杂的网络环境中,如果使用了静态路由或rip、ospf路由协议时,不推荐使 用该值。
#1 - 是该参数的缺省值,它只对直接连接的网络进行反向路径过滤。
#0 - 不进行反向路径过滤。
net.ipv4.conf.default.rp_filter = 1
#是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。在充当网关的linux主机上缺省值为1,在一般 的linux主机上缺省值为0。从安全性角度出发,建议你关闭该功能。
net.ipv4.conf.default.accept_source_route = 0
#魔术组合键 参考:http://baike.baidu.com/view/2378964.htm
kernel.sysrq = 0
#控制core文件的文件名中是否添加pid作为扩展 core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中
kernel.core_uses_pid = 1
#表示开启SYN COOKIEs。当出现SYN等待队列溢出时,启用COOKIEs来处理,可防范少量SYN***,默认为0,表示关闭;
net.ipv4.tcp_synCOOKIEs = 1
#需要内核加载桥接模板,3个选项阻止桥接流量获得通过主机iptables规则,Netfilter是默认情况下启用了桥梁
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
#每个消息队列的最大字节限制
kernel.msgmnb = 65536
#单个消息的最大size。在某些操作系统例如BSD中,你不必设置这个。BSD自动设置它为MSGSSZ * MSGSEG。其他操作系统中,你也许需要改变这个参数的默认值,你可以设置它与MSGMNB相同
kernel.msgmax = 65536
#单个共享内存片断的最大size。
kernel.shmmax = 68719476736
#可分配的共享内存数量的系统级限制。在某些系统上,SHMALL可能表示成页数量,而不是字节数量。
kernel.shmall = 4294967296
#系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS ***﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。(事实上做NAT的时候最好可以适当地增加该值)
net.ipv4.tcp_max_tw_buckets = 6000
#使用 Selective ACK﹐它可以用来查找特定的遗失的数据报--- 因此有助于快速恢复状态。该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段)。(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用。)
net.ipv4.tcp_sack = 1
#该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323)。(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0)
net.ipv4.tcp_window_scaling = 1
#接收缓存设置
net.ipv4.tcp_rmem = 4096 87380 4194304
#接收缓存设置
net.ipv4.tcp_wmem = 4096 16384 4194304
#默认的发送窗口大小(以字节为单位)
net.core.wmem_default = 8388608
#默认的接收窗口大小(以字节为单位)
net.core.rmem_default = 8388608
#最大的TCP数据接收缓冲
net.core.rmem_max = 16777216
#最大的TCP数据发送缓冲
net.core.wmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,对重负载服务器而言,该值需要调高一点
net.core.netdev_max_backlog = 262144
# 用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。 web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。对繁忙的服务器,增加该值有助于网络性能
net.core.somaxconn = 262144
#系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS ***﹐千万不要依赖这个或是人为的降低这个限制。如果内存大更应该增加这个值。(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)
net.ipv4.tcp_max_orphans = 3276800
#对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。如果服务器经常出现过载﹐可以尝试增加这个数字。警告﹗假如您将此值设为大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood***利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种***,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种***,是用一个基本队列处理正常的完全连接应用(Connect()和Accept() ),是用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-COOKIEs/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood***(事实证明)
net.ipv4.tcp_max_syn_backlog = 262144
#Timestamps 用在其它一些东西中﹐可以防范那些伪造的 sequence 号码。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的)。Timestamp 会让它知道这是个 '旧封包'。(该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。)
net.ipv4.tcp_timestamps = 0
#对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。
net.ipv4.tcp_synack_retries = 1
#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1决定的
net.ipv4.tcp_syn_retries = 1
#low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。即低于此值没有内存压力。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )
#
#pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )
#
#high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)
#
#一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
#
net.ipv4.tcp_mem = 94500000 915000000 927000000
#对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。
net.ipv4.tcp_fin_timeout = 1
#TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。防止两边建立连接但不发送数据的***。
net.ipv4.tcp_keepalive_time = 30
#表示用于向外连接的端口范围,默认比较小,这个范围同样会间接用于NAT表规模。
net.ipv4.ip_local_port_range = 1024 65535
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 0
#允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 0