内核参数优化和PHP 安全设置

内核参数优化vi /etc/sysctl.confnet.ipv4.tcp_max_syn_backlog = 65536net.core.netdev_max_backlog = 32768net.core.somaxconn = 32768net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_timestamps = 0net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_mem = 94500000 915000000 927000000net.ipv4.tcp_max_orphans = 3276800net.ipv4.ip_local_port_range = 1024 65535sysctl -p各内核参数含义  net.ipv4.tcp_max_syn_backlog  记录的那些尚未收到客户端确认信息的连接请求的最大值。对于超过 128M 内存的系统而言,缺省值是 1024,低于 128M 小内存的系统则是 128。  SYN Flood 攻击利用 TCP 协议散布握手的缺陷,伪造虚假源 IP 地址发送大量 TCP-SYN 半打开连接到目标系统,最终导致目标系统 Socket 队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代 Unix 系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()和 Accept() ),是用另一个队列单独存放半打开连接。  这种双队列处理方式和其他一些系统内核措施(例如 Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的 SYN Flood 攻击(事实证明<1000p/s)加大 SYN 队列长度可以容纳更多等待连接的网络连接数,一般遭受 SYN Flood 攻击的网站,都存在大量 SYN_RECV 状态,所以调大tcp_max_syn_backlog 值能增加抵抗 syn 攻击的能力。  net.core.netdev_max_backlog  每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。  net.core.somaxconn  调整系统同时发起并发 TCP 连接数,可能需要提高连接储备值,以应对大量突发入局连接请求的情况。 如果同时接收到大量连接请求,使用较大的值会提高受支持的暂挂连接的数量,从而可减少连接失败的数量。大的侦听队列对防止 DDoS 攻击也会有所帮助。挂起请求的最大数量默认是 128。  net.core.wmem_default  该参数指定了发送套接字缓冲区大小的缺省值(以字节为单位)  net.core.rmem_default  该参数指定了接收套接字缓冲区大小的缺省值(以字节为单位)  net.core.rmem_max  该参数指定了接收套接字缓冲区大小的最大值(以字节为单位)  net.core.wmem_max  该参数指定了发送套接字缓冲区大小的最大值(以字节为单位)** net.ipv4.tcp_timestamps** Timestamps 可以防范那些伪造的 sequence 号码。一条 1G 的宽带线路或许会重遇到带 out-of-line数值的旧 sequence 号码(假如它是由于上次产生的)。时间戳能够让内核接受这种“ ” 异常 的数据包。这里需要将其关掉,以提高性能。  net.ipv4.tcp_synack_retries  对于远端的连接请求 SYN,内核会发送 SYN+ACK 数据报,以确认收到上一个 SYN 连接请求包。这是所谓的三次握手(threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的SYN+ACK 数目。不应该大于 255,默认值是 5,对应于 180 秒左右时间。(可以根据 tcp_syn_retries 来决定这个值)  net.ipv4.tcp_syn_retries  对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于 255,默认值是 5,对应于 180 秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为 2.这个值仅仅是针对对外的连接,对进来的连接,是由 tcp_retries1 决定的)  net.ipv4.tcp_tw_recycle  表示开启 TCP 连接中 TIME-WAIT Sockets 的快速回收,默认为 0,表示关闭。  net.ipv4.tcp_tw_reuse  表示开启重用,允许将 TIME-WAIT Sockets 重新用于新的 TCP 连接,默认为 0,表示关闭。这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助。  net.ipv4.tcp_mem  tcp_mem 有 3 个 INTEGER 变量:low, pressure, high  low:当 TCP 使用了低于该值的内存页面数时,TCP 没有内存压力,TCP 不会考虑释放内存。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配。这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072300/4096)  pressure:当 TCP 使用了超过该值的内存页面数量时,TCP 试图稳定其内存使用,进入 pressure模式,当内存消耗低于 low 值时则退出 pressure 状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值(204800300/4096)  high:允许所有 TCP Sockets 用于排队缓冲数据报的页面量。如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守(512000300/4096)的原因了。在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。  一般情况下这些值是在系统启动时根据系统内存数量计算得到的。  net.ipv4.tcp_max_orphans  系统所能处理不属于任何进程的 TCP sockets 最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即 reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS攻击﹐千万不要依赖这个或是人为的降低这个限制  net.ipv4.ip_local_port_range  将系统对本地端口范围限制设置为 1024~65000 之间Php 安全设置1) 打开 php 的安全模式php 的安全模式是个非常重要的内嵌的安全机制,能够控制一些 php 中的函数,比如 system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认的 php.ini 是没有打开安全模式的,我们把它打开:safe_mode = on2) 用户组安全当 safe_mode 打开时,safe_mode_gid 被关闭,那么 php 脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。建议设置为:safe_mode_gid = off如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。3) 安全模式下执行程序主目录如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:safe_mode_exec_dir = /usr/bin一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要执行的程序拷贝过去,比如:safe_mode_exec_dir = /tmp/cmd但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:safe_mode_exec_dir = /usr/www4) 安全模式下包含文件如果要在安全模式下包含某些公共文件,那么就修改一下选项:safe_mode_include_dir = /usr/www/include/其实一般 php 脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。5) 控制 php 脚本能访问的目录使用 open_basedir 选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问不应该访问的文件,一定程度上限制了 phpshell 的危害,我们一般可以设置为只能访问网站目录:open_basedir = /usr/www6) 关闭危险函数如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括 system()等在那的能够执行命令的 php 函数,或者能够查看 php 信息的phpinfo()等函数,那么我们就可以禁止它们:disable_functions = system,passthru,exec,shell_exec,popen,phpinfo如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作disable_functions=chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的 phpshell 了。7) 关闭 PHP 版本信息在 http 头中的泄漏我们为了防止黑客获取服务器中 php 版本的信息,可以关闭该信息斜路在 http 头中:expose_php = Off比如黑客在 telnet www.chinaz.com 80 的时候,那么将无法看到 PHP 的信息。8) 关闭注册全局变量在 PHP 中提交的变量,包括使用 POST 或者 GET 提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:register_globals = Off当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取 GET 提交的变量 var,那么就要用$_GET['var']来进行获取,这个 php 程序员要注意。9) 打开 magic_quotes_gpc 来防止 SQL 注入SQL 注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini 中有一个设置:magic_quotes_gpc = Off这个默认是关闭的,如果它打开后将自动把用户提交对 sql 的查询进行转换,比如把 ' 转为 '等,这对防止 sql 注射有重大作用。所以我们推荐设置为:magic_quotes_gpc = On10) 错误信息控制一般 php 在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含 php 脚本当前的路径信息或者查询的 SQL 语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:display_errors = Off如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:error_reporting = E_WARNING & E_ERROR当然,我还是建议关闭错误提示。11) 错误日志建议在关闭 display_errors 后能够把错误信息记录下来,便于查找服务器运行的原因:log_errors = On同时也要设置错误日志存放的目录,建议根 apache 的日志存在一起:error_log = /usr/local/apache2/logs/php_error.log*注意:给文件必须允许 apache 用户的和组具有写的权限。

互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。
更多PHP相关技术请搜索千锋PHP,做真实的自己,用良心做教育。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容