1.什麼是xinetd
extended internet daemon
xinetd是新一代的網絡守護程序服務程式,又叫超級Internet伺服器,常用來管理多種輕量級Internet服務。
xinetd提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。
2. xinetd的特色
1) 強大的存取控制功能
— 内置對惡意使用者和善意使用者的差别待遇設定。
— 使用libwrap支援,其效能更甚于tcpd。
— 可以限制連接配接的等級,基于主機的連接配接數和基于服務的連接配接數。
— 設定特定的連接配接時間。
— 将某個服務設定到特定的主機以提供服務。
2) 有效防止DoS攻擊
— 可以限制連接配接的等級。
— 可以限制一個主機的最大連接配接數,進而防止某個主機獨占某個服務。
— 可以限制日志檔案的大小,防止磁盤空間被填滿。
3) 強大的日志功能
— 可以為每一個服務就syslog設定日志等級。
— 如果不使用syslog,也可以為每個服務建立日志檔案。
— 可以記錄請求的起止時間以決定對方的通路時間。
— 可以記錄試圖非法通路的請求。
4) 轉向功能
可以将用戶端的請求轉發到另一台主機去處理。
5) 支援IPv6
xinetd自xinetd 2.1.8.8pre*起的版本就支援IPv6,可以通過在./configure腳本中使用with-inet6 capability選項來完成。
注意,要使這個生效,核心和網絡必須支援IPv6。IPv4仍然被支援。
6) 與用戶端的互動功能
無論用戶端請求是否成功,xinetd都會有提示告知連接配接狀态。
3. Xinetd的缺點
目前最大的缺點是對RPC支援的不穩定,但是可以啟動protmap,使它與xinetd共存來解決這個問題。
4 使用xinetd啟動守護程序
原則上任何系統服務都可以使用xinetd,然而最适合的應該是那些常用的網絡服務,同時,這個服務的請求數目和頻繁程度不會太高。
像DNS和Apache就不适合采用這種方式,而像FTP、Telnet、SSH等就适合使用xinetd模式。
系統預設使用xinetd的服務可以分為如下幾類:
① 标準Internet服務:telnet、ftp。
② 資訊服務:finger、netstat、systat。
③ 郵件服務:imap、imaps、pop2、pop3、pops。
④ RPC服務:rquotad、rstatd、rusersd、sprayd、walld。
⑤ BSD服務:comsat、exec、login、ntalk、shell、talk。
⑥ 内部服務:chargen、daytime、echo、servers、services、time。
⑦ 安全服務:irc。
⑧ 其他服務:name、tftp、uucp。
具體可以使用xinetd的服務在/etc/services檔案中指出。
這個檔案的節選内容:
# /etc/services:
# $Id: services,v 1.40 2004/09/23 05:45:18 notting Exp $
# service-name port/protocol [aliases ...] [# comment]
tcpmux 1/tcp # TCP port service multiplexer
tcpmux 1/udp # TCP port service multiplexer
rje 5/tcp # Remote Job Entry
rje 5/udp # Remote Job Entry
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
………
Internet 網絡服務檔案中,記錄網絡服務名和它們對應使用的端口号及協定。檔案中的每一行對應一種服務,它由4個字段組成,中間用Tab鍵或空格鍵分隔,分别表示 “服務名稱”、“使用端口”、“協定名稱”及“别名”。在一般情況下,不要修改該檔案的内容,因為這些設定都是Internet标準的設定。一旦修改,可能會造成系統沖突,使使用者無法正常通路資源。Linux系統的端口号的範圍為0~65 535,不同範圍的端口号有不同的意義。
— 0:不使用。
— 1~1 023:系統保留,隻能由root使用者使用。
— 1 024~4 999:由用戶端程式自由配置設定。
— 5 000~65 535:由伺服器程式自由配置設定。
5. 解讀/etc/xinetd.conf和/etc/xinetd.d/*(啟動關閉)
安裝xinetd包(原因是我想重新開機xinetd的時候發現xinetd是未注冊的服務):
提示找不多xinetd服務,結果如下:
[root@linuxzgf ~]# service xinetd restart
xinetd: 未被識别的服務
[root@linuxzgf ~]# service xinetd reload
[root@linuxzgf ~]#
xinetd: unrecognized service
怎麼安裝呢?so easy。。。。。 在linux安裝鏡像裡有這個包,挂載上安裝鏡像,進入Server目錄,找到包:
[root@localhost Server]# find -name 'xinet*'
./xinetd-2.3.14-10.el5.i386.rpm
[root@localhost Server]# rpm -ivh xinetd*
warning: xinetd-2.3.14-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:xinetd ########################################### [100%
[root@localhost xinetd.d]# service xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
[root@localhost xinetd.d]#
現在就安裝并重新開機完成了xinetd服務。
或者使用如下指令重新開機:
# /etc/init.d/xinetd restart
1) /etc/xinetd.conf
xinetd 的配置檔案是/etc/xinetd.conf,但是它隻包括幾個預設值及/etc/xinetd.d目錄中的配置檔案。如果要啟用或禁用某項 xinetd服務,編輯位于/etc/xinetd.d目錄中的配置檔案。例如,disable屬性被設為yes,表示該項服務已禁用;disable屬性被設為no,表示該項服務已啟用。/etc/xinetd.conf有許多選項,下面是RHEL 4.0的/etc/xinetd.conf
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
— instances = 60:表示最大連接配接程序數為60個。
— log_type = SYSLOG authpriv:表示使用syslog進行服務登記。
— log_on_success= HOST PID:表示設定成功後記錄客戶機的IP位址的程序ID。
— log_on_failure = HOST:表示設定失敗後記錄客戶機的IP位址。
— cps = 25 30:表示每秒25個入站連接配接,如果超過限制,則等待30秒。主要用于對付拒絕服務攻擊。
— includedir /etc/xinetd.d:表示告訴xinetd要包含的檔案或目錄是/etc/xinetd.d。
2) /etc/xinetd.d/*
下面以/etc/xinetd.d/中的一個檔案(rsync)為例。
service rsync
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
log_on_failure += USERID
下面說明每一行選項的含義:
— disable = yes:表示禁用這個服務。
— socket_type = stream:表示服務的資料包類型為stream。
— wait = no:表示不需等待,即服務将以多線程的方式運作。
— user = root:表示執行此服務程序的使用者是root。
— server = /usr/bin/rsync:啟動腳本的位置。
— log_on_failure += USERID:表示設定失敗時,UID添加到系統登記表。
6、 配置xinetd
1) 格式
/etc/xinetd.conf中的每一項具有下列形式:
service service-name
……
其中service是必需的關鍵字,且屬性表必須用大括号括起來。每一項都定義了由service-name定義的服務。
service-name是任意的,但通常是标準網絡服務名,也可增加其他非标準的服務,隻要它們能通過網絡請求激活,包括localhost自身發出的網絡請求。有很多可以使用的屬性,稍後将描述必需的屬性和屬性的使用規則。
操作符可以是=、+=或-=。所有屬性可以使用=,其作用是配置設定一個或多個值,某些屬性可以使用+=或-=,其作用分别是将其值增加到某個現存的值表中,或将其值從現存值表中删除。
2) 配置檔案
相關的配置檔案如下:
/etc/xinetd.conf
/etc/xinetd.d/* //該目錄下的所有檔案
/etc/hosts.allow
/etc/hosts.deny
3) disabled與enabled
前者的參數是禁用的服務清單,後者的參數是啟用的服務清單。他們的共同點是格式相同(屬性名、服務名清單與服務中間用空格分開,例如disabled = in.tftpd in.rexecd),此外,它們都是作用于全局的。如果在disabled清單中被指定,那麼無論包含在清單中的服務是否有配置檔案和如何設定,都将被禁用;如果enabled清單被指定,那麼隻有清單中的服務才可啟動,如果enabled沒有被指定,那麼disabled指定的服務之外的所有服務都可以啟動。
4) 注意問題
① 在重新配置的時候,下列的屬性不能被改變:socket_type、wait、protocol、type;
② 如果only_from和no_access屬性沒有被指定(無論在服務項中直接指定還是通過預設項指定),那麼對該服務的通路IP将沒有限制;
③ 位址校驗是針對IP位址而不是針對域名位址。
6 xinetd防止拒絕服務攻擊(Denial of Services)的原因
xinetd能有效地防止拒絕服務攻擊(Denial of Services)的原因如下。
1) 限制同時運作的程序數
通過設定instances選項設定同時運作的并發程序數:
instances=20
當伺服器被請求連接配接的程序數達到20個時,xinetd将停止接受多出部分的連接配接請求。直到請求連接配接數低于設定值為止。
2) 限制一個IP位址的最大連接配接數
通過限制一個主機的最大連接配接數,進而防止某個主機獨占某個服務。
per_source=5
這裡每個IP位址的連接配接數是5個。
3) 限制日志檔案大小,防止磁盤空間被填滿
許多攻擊者知道大多數服務需要寫入日志。入侵者可以構造大量的錯誤資訊并發送出來,伺服器記錄這些錯誤,可能就造成日志檔案非常龐大,甚至會塞滿硬碟。同時會讓管理者面對大量的日志,而不能發現入侵者真正的入侵途徑。是以,限制日志檔案大小是防範拒絕服務攻擊的一個方法。
log_type FILE.1 /var/log/myservice.log 8388608 15728640
這裡設定的日志檔案FILE.1臨界值為8MB,到達此值時,syslog檔案會出現告警,到達15MB,系統會停止所有使用這個日志系統的服務。
4) 限制負載
xinetd還可以使用限制負載的方法防範拒絕服務攻擊。用一個浮點數作為負載系數,當負載達到這個數目的時候,該服務将暫停處理後續的連接配接。
max_load = 2.8
上面的設定表示當一項系統負載達到2.8時,所有服務将暫時中止,直到系統負載下降到設定值以下。
說明 要使用這個選項,編譯時應加入“–with-loadavg”,xinetd将處理max-load配置選項,進而在系統負載過重時關閉某些服務程序,來實作防範某些拒絕服務攻擊。
5) 限制所有伺服器數目(連接配接速率)
xinetd可以使用cps選項設定連接配接速率,下面的例子:
cps = 25 60
上面的設定表示伺服器最多啟動25個連接配接,如果達到這個數目将停止啟動新服務60秒。在此期間不接受任何請求。
6) 限制對硬體資源的利用
通過rlimit_as和rlimit_cpu兩個選項可以有效地限制一種服務對記憶體、中央處理器的資源占用:
rlimit_as = 8M
rlimit_cpu=20
上面的設定表示對伺服器硬體資源占用的限制,最多可用記憶體為8MB,CPU每秒處理20個程序。
xinetd的一個重要功能是它能夠控制從屬服務可以利用的資源量,通過它的以上設定可以達到這個目的,有助于防止某個xinetd服務占用大量資源,進而導緻“拒絕服務”情況的出現。
------------------------------------------------------------
http://wordpress.facesoho.com/server/what-is-xinetd.html