FreeBSD下构建安全的Web服务器(1)(3)

2008-02-23 08:21:02来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

7、系统内核安全

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

# ee /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 级别,能够避免比较多对内核攻击。

8、系统安全优化

一般优化系统主要是重新编译内核,去掉一些不要的驱动等等,您能够参考我在我Blog上写的关于编译内核的文章。我们这里对网络和内核一些选项进行优化和安全配置。编辑 /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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 评价网站服务器软件的几个方面

下一篇: Apache服务器二级域名的完美实现