UNIX IP Stack 调整指南

本文的目的是为了调整UNIX IP堆栈以更有效的防止现今多种类型的攻击,详细
描述了一些UNIX服务系统中网络服务如HTTP或者routing的推荐设置,其中系统
包括了如下不同的UNIX:

A. IBM AIX 4.3.X
B. Sun Solaris 7
C. Compaq Tru64 UNIX 5.X
D. HP HP-UX 11.0 (research ongoing)
E. Linux kernel 2.2 (tested both SuSE Linux 7.0 和 RedHat 7.0)
F. FreeBSD
G. IRIX 6.5.10

下面叙述的一些调整参数和句法在重新启动后将不会自动激活,所以如果你需要
在每次启动的时候长期保持这些参数,你就需要增加这些实时命令到如下的启动
文件中:

AIX - /etc/rc.net
Solaris - /etc/init.d/inetinit
Tru64 UNIX - 使用sysconfigdb 或者 dxkerneltuner 命令
HP-UX - /etc/rc.config.d/nddconf
Linux kernel 2.2 - /etc/sysctl.conf
FreeBSD - /etc/rc.conf
IRIX - 使用systune命令

====================================================================

以下是一些IP堆栈调整建议:

1,调节TCP发送和接受空间(TCP send and receive spaces)

TCP发送和接受的空间直接影响TCP 窗口大小参数(TCP window size parameter),
一定程度上的窗口大小增加有助于更有效的传输,尤其是一些需要大数量传输的
服务如FTP和HTTP,默认的一些设置不是每个系统都是最优化的,一般我们需要
增加这个窗口大小为32768字节。除非你设置的时候很清楚的理解RFC1323(
http://www.ietf.org/rfc/rfc1323.txt?number=1323)和RFC2018(http://www.
ietf.org/rfc/rfc2018.txt?number=2018),否则你不要把这个值增加到高于64K字节。

A. AIX
/usr/sbin/no -o tcp_sendspace=32768
/usr/sbin/no -o tcp_recvspace=32768

B. Solaris
/usr/sbin/ndd -set /dev/tcp tcp_xmit_hiwat 32768
/usr/sbin/ndd -set /dev/tcp tcp_recv_hiwat 32768

C. Tru64 UNIX
没有推荐的调整.

D. HP-UX
默认情况下TCP发送和接受空间已经设置为32768.

E. Linux kernel 2.2
Linux自动分配TCP发送和接受空间并默认共同支持RFC1323 (large window support,
net.ipv4.tcp_window_scaling) 和 RFC2018 (SACK support, net.ipv4.tcp_sack).

F. FreeBSD
sysctl -w net.inet.tcp.sendspace=32768
sysctl -w net.inet.tcp.recvspace=32768

G. IRIX
默认情况下TCP发送和接受空间设置为64K字节.

2,调整套接口序列防止SYN攻击

各种网络应用软件一般必须开放一个或者几个端口供外界使用,所以其必定可以
会被恶意攻击者向这几个口发起拒绝服务攻击,其中一个很流行的攻击就是SYN
FLOOD,在攻击发生时,客户端的来源IP地址是经过伪造的(spoofed),现行的IP
路由机制仅检查目的IP地址并进行转发,该IP包到达目的主机后返回路径无法通
过路由达到的,于是目的主机无法通过TCP三次握手建立连接。在此期间因为TCP
套接口缓存队列被迅速填满,而拒绝新的连接请求。为了防止这些攻击,部分UNIX
变种采用分离入站的套接口连接请求队列,一队列针对半打开套接口(SYN 接收,
SYN|ACK 发送), 另一队列针对全打开套借口等待一个accept()调用,增加这两队
列可以很好的缓和这些SYN FLOOD攻击并使对服务器的影响减到最小程度:

A. AIX
/usr/sbin/no -o clean_partial_conns=1
这个设置会指示内核随机的从q0队列中去掉半打开套接口来为新的套接口增加
所需空间。

B. Solaris
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 1024
使q 队列拥有接口等待来自应用程序的accept()调用.
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q0 2048
使q0 队列能维护半打开套接口.

C. Tru64 UNIX
/sbin/sysconfig -r socket sominconn=65535
这个sominconn的值决定了系统能同时处理多少个相同的进入的SYN信息包.
/sbin/sysconfig -r socket somaxconn=65535
这个somaxconn值设置了系统能保留多少个待处理TCP连接.

D. HP-UX
/usr/sbin/ndd -set tcp_syn_rcvd_max 1024
/usr/sbin/ndd -set tcp_conn_request_max 200

E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=1280
有效的增加q0的套接口队列大小.
/sbin/sysctl -w net.ipv4.tcp_syn_cookies=1
启用TCP SYN cookies支持,能有效的减轻SYN FLOOD的攻击,但是这个参数会对一些
大的窗口引起一些性能问题(参看RFC1323 and RFC2018.

F. FreeBSD
sysctl -w kern.ipc.somaxconn=1024

G. IRIX
listen()队列被硬性设置为32.但是系统实际采用待处理连接数为((3 * backlog) / 2) + 1,
其中的backlog数值最大值为49.

3,调整Redirects参数

恶意用户可以使用IP重定向来修改远程主机中的路由表,在设计良好的网络中,
末端的重定向设置是不需要的,发送和接受重定向信息包都要关闭。

A. AIX
/usr/sbin/no -o ipignoreredirects=1
/usr/sbin/no -o ipsendredirects=0

B. Solaris
/usr/sbin/ndd -set /dev/ip ip_ignore_redirect 1
/usr/sbin/ndd -set /dev/ip ip_send_redirects 0

C. Tru64 UNIX
没有推荐的调整设置.

D. HP-UX
/usr/sbin/ndd -set /dev/ip ip_send_redirects 0

E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.conf.all.send_redirects=0
/sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0

F. FreeBSD
sysctl -w net.inet.icmp.drop_redirect=1
sysctl -w net.inet.icmp.log_redirect=1
sysctl -w net.inet.ip.redirect=0
sysctl -w net.inet6.ip6.redirect=0

G. IRIX
/usr/sbin/systune icmp_dropredirects to 1

4,调整ARP清理设置

通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低
攻击。在Solaris中,有2个参数可以管理间隔的清理IP路由缓冲,针对未请求的
ARP响应可以通过arp_cleanup_interval调整,AIX可以通过artp_killc来设置。

A. AIX
/usr/sbin/no -o arpt_killc=20
B. Solaris
/usr/sbin/ndd -set /dev/arp arp_cleanup_interval 60000
C. Tru64 UNIX
没有参考的调整设置.
D. HP-UX
默认设置为5分钟.
E. Linux kernel 2.2
没有参考的调整设置.
F. FreeBSD
sysctl -w net.link.ether.inet.max_age=1200
G. IRIX
没有参考的调整设置.

5,调整源路由的设置

通过源路由,攻击者可以尝试到达内部IP地址 --包括RFC1918中的地址,所以
不接受源路由信息包可以防止你的内部网络被探测。

A. AIX
/usr/sbin/no -o ipsrcroutesend=0
关闭源路由信息包发送.

/usr/sbin/no -o ipsrcrouteforward=0
如果你这个系统要做路由工作如防火墙,这个参数就很重要,关闭这个特征就
可以很好的防止转发源路由信息包.

B. Solaris
/usr/sbin/ndd -set /dev/ip ip_src_route_forward 0
如果你这个系统要做路由工作如防火墙,这个参数就很重要,关闭这个特征就
可以很好的防止转发源路由信息包.

C. Tru64 UNIX
没有推荐的调整.

D. HP-UX
ndd -set /dev/ip ip_forward_src_routed 0
关闭这个特征就可以很好的防止转发源路由信息包.

E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
丢弃所有源地址信息包.
/sbin/sysctl -w net.ipv4.conf.all.forwarding=0
/sbin/sysctl -w net.ipv4.conf.all.mc_forwarding=0
不转发源路由帧.

F. FreeBSD
sysctl -w net.inet.ip.sourceroute=0
sysctl -w net.inet.ip.accept_sourceroute=0

G. IRIX
/usr/sbin/systune ipforward to 2

6. 调整TIME_WAIT setting 设置

在一些比较繁忙的WEB服务器上,许多套接口可能就处于TIME_WAIT状态,这是
由于一些不正规编码的客户端应用程序没有很正确的处理套接口所引起的,这
就可能引起如DDOS的攻击。

A. AIX
没有推荐设置.

B. Solaris
/usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 60000

这个参数影响了TCP套接口保持TIME_WAIT状态的时间数,默认情况下对于一个
繁忙的WEB服务器太高了,所以需要设置到低于每60秒,这个参数名字适用与
Solaris7或者更高的版本,在Solaris 7之前的版本,其名字不正确
的表识为tcp_close_wait_interval.

C. Tru64 UNIX
没有推荐的调整设置.

D. HP-UX
ndd -set /dev/tcp tcp_time_wait_interval 60000
套接口将保持TIME_WAIT状态不超过60秒.

E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.vs.timeout_timewait=60
套接口将保持TIME_WAIT状态不超过60秒.

F. FreeBSD
没有推荐的调整设置.

G. IRIX
/usr/sbin/systune tcp_2msl to 60

7,调整广播ECHO响应

Smurf攻击就是一个伪造的地址通过发送ICMP 8 0 (ECHO REQUEST) 信息到一个广
播地址,一些IP堆栈默认情况下会响应这些信息,所以必须关闭这个特征。如果
这个主机作为防火墙使用(router),关闭这个特征就不能处理处理广播。

A. AIX
/usr/sbin/no -o directed_broadcast=0
不响应直接广播.

B. Solaris
/usr/sbin/ndd -set /dev/ip ip_respond_to_echo_broadcast 0
不响应直接广播.
/usr/sbin/ndd -set /dev/ip ip_forward_directed_broadcasts 0
不转发直接广播.

C. Tru64 UNIX
没有推荐调整设置.

D. HP-UX
ndd -set /dev/ip ip_respond_to_echo_broadcast 0
不响应直接广播.
ndd -set /dev/ip ip_forward_directed_broadcasts 0
不转发直接广播.

E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
不响应直接广播.

F. FreeBSD
sysctl -w net.inet.icmp.bmcastecho=0

G. IRIX
/usr/sbin/systune allow_brdaddr_srcaddr to 0

8,针对其他广播探测的调整

其他还有2个广播探测可以让恶意用户利用,一个就是地址掩码查询可以用来探测
网络段大小和范围。时间戳广播可以映射和鉴定主机类型。

A. AIX
/usr/sbin/no -o icmpaddressmask=0
防止地址掩玛查询.

B. Solaris
/usr/sbin/ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
防止地址掩玛查询.

/usr/sbin/ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
关闭对时间戳广播询问的响应.

C. Tru64 UNIX
没有推荐的调整.

D. HP-UX
ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
防止泄露主机配置的网络掩码.

ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
关闭对时间戳广播询问的响应.

E. Linux kernel 2.2
没有推荐的调整.

F. FreeBSD
sysctl -w net.inet.icmp.maskrepl=0

G. IRIX
使用ipfilterd 来阻塞不需要的ICMP类型.

9,调整参数以支持RFC1948

下面几个调整会利用RFC1948(http://www.ietf.org/rfc/rfc1948.txt?number=1948)
TCP/IP序列号产生技术来保证给一个TCP 套接口的序列号码非常难猜测:

B. Solaris
Set TCP_STRONG_ISS=2 in /etc/default/inetinit.
这需要重新启动才能使能.

G. IRIX
/usr/sbin/systune tcpiss_md5 to 1
(出处:viphot)

(0)

相关推荐

  • unix 编程进程控制详细介绍

     unix 编程进程控制: fork函数 fork创建子进程,子进程是父进程的副本,会得到父进程数据空间.堆.栈的副本. 然后文件的共享这块也比较复杂,父进程和子进程各自都有文件描述符表,但是文件表示公用的(而一般两个进程,文件表是每个进程独有的),也就是说文件的偏移量是一致.一个文件在父进程中打开,在子进程中也会被打开一遍,因此如果在子进程中不使用这个文件,先要close这个文件. vfork函数 和fork函数有如下区别: 1:vfork子进程先执行,并且子进程调用exec函数 2:vfor

  • 深入探讨:unix多进程编程之wait()与waitpid()函数

    Wait函数和waipid函数当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个一步事件,所以这种信号也是内核系那个父进程发的异步通知.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数.对于这种信号的系统默认动作是忽略它.现在要知道调用wait或waitpid的进程可能会发生什么情况: 如果其所有子进程都在运行,则阻塞.如果一个子进程已经终止,正在得带的父进程获取到终止状态,则取得该子进程的终止状态立即返回.如果他没有任何子进程,则立即出错

  • python正常时间和unix时间戳相互转换的方法

    本文实例讲述了python正常时间和unix时间戳相互转换的方法.分享给大家供大家参考.具体分析如下: 这段代码可以用来转换常规时间格式为unix时间戳,也可以将unix时间戳转换回来, 例如:1332888820 格式转换成 2012-03-28 06:53:40的形式 # -*- coding: utf-8 -*- import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(

  • Linux/Unix环境下的Make和Makefile详解

    Linux/Unix环境下的Make和Makefile详解 无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简

  • UNIX下的PHP环境配置,+apache

    UNIX下的PHP环境配置所需软件php-3.0.14-win32.zip php-3.0.14-win32.zip mysql-shareware-3.22.32-win.zip 所有软件均安装在/export/home/guoj/下,也可在其他目录.安装mysqlgzip -dc mysql-3.22.30.tar.gz | tar xvf-cd mysql-3.22.30./configure -prefix= /export/home/guoj/mysqlmakemake install

  • FROM_UNIXTIME 格式化MYSQL时间戳函数

    函数:FROM_UNIXTIME作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示.语法:FROM_UNIXTIME(unix_timestamp,format) 返回表示 Unix 时间标记的一个字符串,根据format字符串格式化.format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符. 根据format字符串格式化date值.下列修饰符可以被用在format字符串中: %M 月名字(January--December)%W 星期

  • Linux/Unix环境下的make命令详解

    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难.而make工具则可自动完成编译工作,并且可以

  • 深入Unix时间戳与C# DateTime时间类型互换的详解

    Unix时间戳最小单位是秒,开始时间为格林威治标准时间1970-01-01 00:00:00ConvertIntDateTime方法的基本思路是通过获取本地时区表示Unixk开始时间,加上Unix时间值(即过去的秒数). ConvertDateTimeInt方法的基本思路是通过刻度数差,再把刻度数转换为秒数,当然要说明的是,我这里返回的是double类型,意义上并非是真正的Unix时间戳格式.要获取真正Unix时间戳的,只获取整数部分就可以了. 复制代码 代码如下: dangranusing S

  • PHP中UNIX时间戳和日期间的转换与计算实例

    UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式.以32位整数表示格林威治标准时间,例如,使用证书11230499325表示当前时间的时间戳.UNIX时间戳是从1970年1月1日零点(UTC/GMT的午夜)开始起到当前时间所经过的秒数.1970年1月1日零点作为所有日期计算的基础,这个日期通常成为UNIX纪元. 因为UNIX时间戳是一个32位的数字格式,所以特别适用于计算机处理,例如计算两

  • UNIX 系统常用管理命令

    一. 引言UNIX系统作为一种强大的多用户分时操作系统,在越来越多的场合受到了应用,同时,对UNIX的系统管理的要求也随之越来越多,但目前的书籍对UNIX系统管理命令介绍的并不是很多.本文主要是针对UNIX系统管理员,以SUN SOLARIS 2.6 系统为例,列举了一些UNIX常用的管理命令的使用及其使用中遇到的问题和解决方法,供大家参考. 二. 常用系统管理命令介绍1. share 和 mount 命令 这是系统管理员常用的两个命令,share命令用于把本机的目录共享出来,以便其它UNIX系

  • Unix下C程序内存泄漏检测工具Valgrind的安装与使用详解

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 官网http://www.valgrind.org 下载与安装#wget http://www.valgrind.org/downloads/valgrind-3.8.1.tar.bz2#tar x

随机推荐