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
下面敘述的一些調整參數和句法在重新啟動後將不會自動激活,所以如果你需要
在每次啟動的時候長期保持這些參數,你就需要增加這些實時命令到如下的啟動
文件中:
Solaris - /etc/init.d/inetinit
Tru64 UNIX - 使用sysconfigdb 或者 dxkerneltuner 命令
IRIX - 使用systune命令
====================================================================
以下是一些IP堆棧調整建議:
1,調節TCP發送和接受空間(TCP send and receive spaces)
TCP發送和接受的空間直接影響TCP 窗口大小參數(TCP window size parameter),
一定程度上的窗口大小增加有助於更有效的傳輸,尤其是一些需要大數量傳輸的
服務如FTP和HTTP,默認的一些設置不是每個系統都是最優化的,一般我們需要
增加這個窗口大小為32768字節。除非你設置的時候很清楚的理解RFC1323(
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.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
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
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
丟棄所有源地址信息包.
不轉發源路由幀.
F. FreeBSD
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
TCP/IP序列號產生技術來保證給一個TCP 套接口的序列號碼非常難猜測:
B. Solaris
Set TCP_STRONG_ISS=2 in /etc/default/inetinit.
這需要重新啟動才能使能.
G. IRIX
/usr/sbin/systune tcpiss_md5 to 1