Solaris7 交流 -- 重新配置系统核心
Solaris 7产品系列包括基本的
Solaris 7操作环境和3个模块化软件扩展版本(Solaris Easy Access Server,Solaris
Enterprise Server,Solaris ISP Server)--每个扩展版本都在基本的Solaris 7操作
环境上运行。新的产品线主要具有以下特点:
1. 处理数据的能力大为增加,不仅数据量没有什么限制,计算的复杂性也有突破,
为新一级的应用软件敞开了大门。
2. 大型机的能力,而价格只有大型机的几分之一。
3. 具有对PC机的完全互操作性,可使客户连接和管理他们的Windows NT环境与
Solaris环境一样。
4. 具有PC机简易管理的新风格,大大简化了安装与管理。
不仅如此,该版本的Solaris还具有强大的软件支持,其中包括了Sun Visual WorkShop
C++ 5.0软件和Sun Performance WorkShop Fortran 5.0软件,并为C/C++和
Fortran的开发商开发企业级应用软件提供了具有竞争性的优势。Solaris 7具有全新中
文版本,中文版本不仅具有多种中文输入方式、灵活地支持中文的输出,同时方便地接
收中文邮件和进行字体转换弥补了过去Solaris在这方面的不足。Solaris 7与 Windows
无缝连接,从而使用户可以进行简单明了的操作和管理。在Solaris 7中,Sun公司着重考
虑了健壮和安全的问题,提供了一系列的现代化的安全机制,同时修补了安全漏洞和系统
BUG,使得Solaris 7具有相当可靠的安全性和健壮性,将用户的风险降到了最低的限度。
综上所述,Solaris 7是适用于企业网的操作系统。
一、相关站点
1.Solaris软件免费下载站点:
[url]http://www.sunfreeware.com/[/url]
2.solaris 咨询站
[url]http://www.ibiblio.org/pub/packages/solaris/sparc/[/url]
3.solaris中文手册:
[url]http://docs.sun.com/ab2?Ab2Lang=zh&Ab2Enc=gb2312[/url]
4.UNIX depot
[url]http://www.cise.ufl.edu/depot/[/url]
5.solaris中心
[url]http://www.solariscentral.org/[/url]
二、重新配置系统核心
举例: Oracle 8 for solaris 2.6 安装的安装需要增加Shared Memory Segments;
修改/etc/system文件,在文件后加上
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=15
set semsys:seminfo_semmns=200
set semsys:seminfo_semmni=70
set ulimit=3000000
比如innd用的文件数目比较多,需要设置:
set rlim_fd_max=4096
set rlim_fd_cur=1024
如何看系统默认值;
先看系统默认值,超级用户可以用-k参数来看核心的各个参数,如果指定-w参数,则可
以
adb - general-purpose debugger
可以看现在的值是什么?
/usr/bin/adb –kw
physmem 1f8d9
maxusers/D
maxusers:
maxusers: 504
maxusers/W 200
maxusers: 0x1f8 = 0x200
(1)IO相关的设置
最经常需要改变的是文件描述符数因为SOCKET API处理INTERNET连接使用文件描述符,
set rlim_fd_max = 8192
set rlim_fd_cur = 4096
Please, before you start, make a backup copy of your initial /etc/system.
The backup should be located on your root filesystem. Thus, if some
parameters fail, you can always supply the alternative, original system
file on the boot prompt. The following shows two typically entered
parameters:
* these are the defaults of Solaris =4096
这个参数决定了一个进程可以打开文件描述符的“硬”限制;如果想改变该限制,必须
有超级用户的权限;
对于大多数SERVER,不管使用TCP还是UDP进行通讯,最大描述符数是每个用户进程的最
重要的参数;文件描述符决定了同时可以连接的数目;
ulimit -Hn
You should consider a value of at least 2 * tcp_conn_req_max and you
should provide at least 2 * rlim_fd_cur. The predicate rlim_fd_cur SYN
SYN-ACK ACK
而TCP-SYN flood在它的实现过程中只有前两个步骤,当服务方收到请求方的SYN并
回送SYN-ACK确认消息后, 请求方由于采用源地址欺骗等手段,致使服务方得不到ACK回
应,这样,服务方会在一定时间处于等待接收请求方ACK消息的状态,一台服务器可用的
TCP连接是有限的,如果恶意攻击方快速连续的发送此类连接请求,则服务器可用TCP连
接队列很快将会阻塞,系统可用资源,网络可用带宽急剧下降,无法向用户提供正常的
网络服务。
对于solaris 2.5.1,只有安装了patch 103582-1(或以上)才能防止syn_flood.在
synflood没有流行以前,连接队列和backlog队列是相同的,solairs 2.6/7和安装了
patch以后的2.5.1系统,现在存在两条队列,一个是已连接的队列,一条是未连接完成的
队列。SYN攻击时只能填充后一条队列,而且,一旦队列满,将随机丢弃老的syn包。系
统还会监控这个队列被短时间填充的情况,一旦怀疑是syn_flood,将在系统的messages
中记录下来。
Mar 8 19:24:01 example unix: WARNING: High TCP connect timeout rate!
System (port 80) may be under a SYN flood attack!
新队列的大小也是可以调节的,繁忙的web服务器需要提高未连接队列的大小。默认的大
小是1024,我们可以提高到4096。
ndd –set /dev/tcp tcp_conn_req_max_q0 4096
当然,一般情况下,核心的队列增大,系统的内存最好也应有相应的增加。
12、连接耗尽攻击
和SYN flood攻击不同,连接耗尽攻击不太常见。因为这种攻击必须使用真实IP,攻击的
目标是已连接队列。许多系统有一个同时连接的上限,取决于核心参数和系统内存情况
。作为通常的web服务器,这个上限值很难达到,因为http的连接是典型的短时连接。但
是一个攻击者可能快速发送大量的连接请求,同时保持连接,这样正常访问者的连接就
可能被服务器拒绝。
我们可以通过优化系统核心和增加内存来缓解,但不是根本的方法。因为攻击者可能同
时调动多台机器同时攻击。当然,我们可以在发现攻击以后,在防火墙或路由器上拒绝
这些IP来源的连接。
如果不通过网络设备,仅仅通过调节系统参数来缓解攻击。一方面,可以调节web
server,如apache的timeout参数,减短连接保持时间,另一方面,我们可以将核心以连
接队列参数增大(默认是128)。
#ndd –set /dev/tcp tcp_conn_req_max_q 1024
以上的方法能阻止大多数连接耗尽的攻击企图,除非攻击者调动更多的资源,发动大规模
的DDOS,但这样会使攻击者更容易暴露。
13、IP 欺骗
IP欺骗基本原理:
TCP连接的建立 :为了利用TCP连接交换数据,主机间首先必须建立一个连接。TCP建立连
接时可以分为3个 步骤,称为三步握手法。如果主机A运行rlogin客户程序,并且希望连
接到主机B上的rlogin daemon 服务器程序上,连接过程如图二所示。
1 A ---SYN---> B
2 A B
图二
需要提醒读者的是,主机A和B的TCP模块分别使用自己的序列编号。在时刻1时,客户端
通过设置标志位SYN=1告诉服务器它需要建立连接。同时,客户端在其TCP头中的序列号
域SEQ放置了它的初始序列号(ISN),并且告诉服务器序列号标示域是有效的,应该 被
检查。在时刻2时,服务器端在接收了上面的SYN后,作出的反应是将自己的ISN和对客
户端的ACKA发向客户端并且千知下一个期待获得的数据序列号是(ISN+1)。客户端在第
一流时刻,对服务器的ISN进行确认。这时,数据传输就可以进行了。ISN与序列号的递
增 了解序数编号如何选择初始序列号和如何根据时间变化是很重要的。似乎应该有这种
情 况,当主机启动后序列编号初始化为1,但实际上并非如此。初始序列号是由
tcp_init函 数确定的。ISN每秒增加128000,如果有连接出现,每次连接将反计数器的
数值增加 64000。很显然,这使得用于表示ISN的32位计数器在没有连接的情况下每
9.32小时复位 一次。之所以这样,是因为这样有利于最大限度地减少旧有连接的信息干
扰当前连接的 机会。这里运用了2MSL等待时间的概念(不在本文讨论的范围之内。)如
果初始序列 号是随意选择的,那么不能保证现有序列号是不同于先前的。假设有这样一
种情况,在 一个路由回路中的数据包最终跳出了循环,回到了“旧有”的连接(此时其
实是不同于 前者的现有连接(,显然会发生对现有连接的干扰。 端口号 为了提供对
TCP模块的并行访问,TCP提供了叫做端口的用户接口。端口被操作系统内核 利用来标示
不同的网络进程,也就是严格区分传输层入口的标示(就是说,IP不关心他 们的存在)
。TCP端口与IP地址一起提供网络端到端的通信。事实上,在任何时刻任何Internet连接
都能由4个要素来措述:源IP地址、源地址端口号、目的IP地址和目的地址。采样目标主
机发出的TCP序列号,猜测出它的数据序列号。然后,伪装成被信任的主机, 同时建立
起与目标主机基于地址验证的应用连接。如果成功,黑客可以使用一种简单的命令放置
一个系统后门,以进行非授权操作。
目前,RFC 1498定义了更好的随机ISN生成方法,使得这种攻击很难成功。对于solaris
系统ISN生成有三种方式。
0: 可预测的ISN
1: 增强的ISN 随机生成
2: RFC 1948描述的ISN生成方式
所有版本的solaris默认生成方式值是1。2.5.1只有 0,1两种方式,2.6/7拥有0,1,2三种
ISN 生成方式。
我们可以修改/etc/default/inetinit文件来提高ISN的生成强度。
将 TCP_STRONG_ISS=1改为 TCP_STRONG_ISS=2
重起系统使他生效。对于solair 2.5.1,此方法无效。
14、增加私有端口
一般的情况下,1-1024端口被称为私有端口,只允许具有根权限的进程连接。但是有些大
于1024的端口,即使需要这样的限制,却无法定义,如NFS的服务器端口2049,当然还有
一些其他定义的高于1024的私有端口。
在solairs2.5.1/2.6/7下使用如下方式,可以自定义最小的非私有端口
ndd –set /dev/tcp tcp_smallest_nonpriv_port 2050
这样以来,0-2049都被定义为私有端口。
在solaris 2.6/7下,还能使用另一个参数单独指定私有端口。
#ndd /dev/tcp tcp_extra_priv_ports
2049
4045
用来显示已经定义的扩展私有端口
#ndd –set /dev/tcp tcp_extra_priv_ports_add 6112
来增加新的私有端口定义。
使用 ndd –set /dev/tcp tcp_extra_priv_ports_del 来删除定义。
要注意的是,不要随便定义私有端口,因为有些非根权限的进程会使用这些端口。特别
是改变最小非私有端口这个参数,经常会引起问题。应仔细分析你的需求再用扩展私有
端口定义的方式单独增加。
15.tcp_max_buf
最大缓存字节数;这个参数控制了由setsockopt(3SOCKET)函数设置发送和接收BUFFER
大小;
默认值:1048576
范围为8192到1073741824
如果在一个高速的网络环境中创建TCP连接,增加该值来与网速相适应;
等等;
16、附件:设置脚本,来源于sun公司
#!/sbin/sh
#
# Copyright (c) 1999 by Sun Microsystems, Inc.
# All rights reserved.
#
# $Id: nddconfig,v 1.2 1999/09/29 22:25:04 kaw Exp $
#
# Copy this script to /etc/init.d and name it 'nddconfig'. Create a
# hardlink to /etc/init.d/nddconfig in /etc/rc2.d named 'S70nddconfig'.
#
# Keith A. Watson
#
PATH=/usr/bin:/usr/sbin
#
# This file contain network related options settings. The settings
# included here are considered safe in terms of security. Some settings
# may not work in your environment. The comments provided for each
# explain what effect the setting has.
#
# A '0' indicates false/off.
# A '1' indicates true/on.
#
#
# arp_cleanup_interval
#
# This option determines the period of time the Address Resolution
# Protocol (ARP) cache maintains entries. ARP attacks may be effective
# with the default interval. Shortening the timeout interval should
# reduce the effectiveness of such an attack.
# The default value is 300000 milliseconds (5 minutes).
#
ARP_CLEANUP_INTERVAL=60000
#
# ip_forward_directed_broadcasts
#
# This option determines whether to forward broadcast packets directed
# to a specific net or subnet, if that net or subnet is directly
# connected to the machine. If the system is acting as a router, this
# option can be exploited to generate a great deal of broadcast network
# traffic. Turning this option off will help prevent broadcast traffic
# attacks.
# The default value is 1 (True).
#
IP_FORWARD_DIRECTED_BROADCASTS=0
#
# ip_forward_src_routed
#
# This option determines whether to forward packets that are source
# routed. These packets define the path the packet should take instead
# of allowing network routers to define the path.
# The default value is 1 (True).
#
IP_FORWARD_SRC_ROUTED=0
#
# ip_ignore_redirect
#
# This option determines whether to ignore Internet Control Message
# Protocol (ICMP) packets that define new routes. If the system is
# acting as a router, an attacker may send redirect messages to alter
# routing tables as part of sophisticated attack (man in the middle
# attack) or a simple denial of service.
# The default value is 0 (False).
#
IP_IGNORE_REDIRECT=1
#
# ip_ire_flush_interval
#
# This option determines the period of time at which a specific route
# will be kept, even if currently in use. ARP attacks may be effective
# with the default interval. Shortening the time interval may reduce
# the effectiveness of attacks.
# The default interval is 1200000 milliseconds (20 minutes).
#
IP_IRE_FLUSH_INTERVAL=60000
#
# ip_respond_to_address_mask_broadcast
#
# This options determines whether to respond to ICMP netmask requests
# which are typically sent by diskless clients when booting. An
# attacker may use the netmask information for determining network
# topology or the broadcast address for the subnet.
# The default value is 0 (False).
#
IP_RESPOND_TO_ADDRESS_MASK_BROADCAST=0
#
# ip_respond_to_echo_broadcast
#
# This option determines whether to respond to ICMP broadcast echo
# requests (ping). An attacker may try to create a denial of service
# attack on subnets by sending many broadcast echo requests to which all
# systems will respond. This also provides information on systems that
# are available on the network.
# The default value is 1 (True).
#
IP_RESPOND_TO_ECHO_BROADCAST=0
#
# ip_respond_to_timestamp
#
# This option determines whether to respond to ICMP timestamp requests
# which some systems use to discover the time on a remote system. An
# attacker may use the time information to schedule an attack at a
# period of time when the system may run a cron job (or other time-
# based event) or otherwise be busy. It may also be possible predict
# ID or sequence numbers that are based on the time of day for spoofing
# services.
# The default value is 1 (True).
#
IP_RESPOND_TO_TIMESTAMP=0
#
# ip_respond_to_timestamp_broadcast
#
# This option determines whether to respond to ICMP broadcast timestamp
# requests which are used to discover the time on all systems in the
# broadcast range. This option is dangerous for the same reasons as
# responding to a single timestamp request. Additionally, an attacker
# may try to create a denial of service attack by generating many
# broadcast timestamp requests.
# The default value is 1 (True).
#
IP_RESPOND_TO_TIMESTAMP_BROADCAST=0
#
# ip_send_redirects
#
# This option determines whether to send ICMP redirect messages which
# can introduce changes into remote system's routing table. It should
# only be used on systems that act as routers.
# The default value is 1 (True).
#
IP_SEND_REDIRECTS=0
#
# ip_strict_dst_multihoming
#
# This option determines whether to enable strict destination
# multihoming. If this is set to 1 and ip_forwarding is set to 0, then
# a packet sent to an interface from which it did not arrive will be
# dropped. This setting prevents an attacker from passing packets across
# a machine with multiple interfaces that is not acting a router.
# The default value is 0 (False).
#
IP_STRICT_DST_MULTIHOMING=1
#
# tcp_conn_req_max_q0
#
# This option determines the size of the queue containing half-open
# connections. This setting provides protection from SYN flood attacks.
# Solaris 2.6 and 7 (and 2.5.1 with patch 103582-12 and higher) include
# protection from these attacks. The queue size default is adequate for
# most systems but should be increased for busy Web servers.
# The default value is 1024.
#
TCP_CONN_REQ_MAX_Q0=4096
# Process the argument. 'stop' ignored.
case "$1" in
'start')
# set the appropriate network options
ndd -set /dev/arp arp_cleanup_interval \
$ARP_CLEANUP_INTERVAL
ndd -set /dev/ip ip_forward_directed_broadcasts \
$IP_FORWARD_DIRECTED_BROADCASTS
ndd -set /dev/ip ip_forward_src_routed \
$IP_FORWARD_SRC_ROUTED
ndd -set /dev/ip ip_ignore_redirect \
$IP_IGNORE_REDIRECT
ndd -set /dev/ip ip_ire_flush_interval \
$IP_IRE_FLUSH_INTERVAL
ndd -set /dev/ip ip_respond_to_address_mask_broadcast \
$IP_RESPOND_TO_ADDRESS_MASK_BROADCAST
ndd -set /dev/ip ip_respond_to_echo_broadcast \
$IP_RESPOND_TO_ECHO_BROADCAST
ndd -set /dev/ip ip_respond_to_timestamp \
$IP_RESPOND_TO_TIMESTAMP
ndd -set /dev/ip ip_respond_to_timestamp_broadcast \
$IP_RESPOND_TO_TIMESTAMP_BROADCAST
ndd -set /dev/ip ip_send_redirects \
$IP_SEND_REDIRECTS
ndd -set /dev/ip ip_strict_dst_multihoming \
$IP_STRICT_DST_MULTIHOMING
ndd -set /dev/tcp tcp_conn_req_max_q0 \
$TCP_CONN_REQ_MAX_Q0
;;
'stop')
;;
'show')
echo "Currently unimplemented."
;;
*)
echo "Usage: $0 { start | stop | show }"
exit 1
;;
esac
exit 0
ndd - get and set driver configuration parameters [/color] |