xinetd 说明
?
在linux中一些不長期使用的服務(wù)(不重要的服務(wù)?)沒有被作為單獨的守護進程在開機時啟用,linux把這些服務(wù)監(jiān)聽端口全部由一個獨立的進程xinetd集中監(jiān)聽,當(dāng)收到相應(yīng)的客戶端請求之后,xinetd進程就臨時啟動相應(yīng)服務(wù)并把相應(yīng)端口移交給相應(yīng)服務(wù),客戶端斷開之后,相應(yīng)的服務(wù)進程結(jié)束,xinetd繼續(xù)監(jiān)聽。要開telnet服務(wù)器,只需配置xinetd即可。
xinetd是一個daemon程序,所有結(jié)尾帶d的程序都是daemon程序,也就是守護程序
守護程序分為2種處理模式:
第一個是stand alone狀態(tài)的,表示該程序始終監(jiān)聽,一直處于運行狀態(tài),例如httpd
第二個是super daemon,它始終處于sleep狀態(tài),直到有人喚醒它,xinetd就是一個super daemon,但它的使命是將一個請求轉(zhuǎn)給其他服務(wù),也就是服務(wù)的管理者
?
1.什么是xinetd
extended internet daemon
xinetd是新一代的網(wǎng)絡(luò)守護進程服務(wù)程序,又叫超級Internet服務(wù)器,常用來管理多種輕量級Internet服務(wù)。
xinetd提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。
2. xinetd的特色
1) 強大的存取控制功能
— 內(nèi)置對惡意用戶和善意用戶的差別待遇設(shè)定。
— 使用libwrap支持,其效能更甚于tcpd。
— 可以限制連接的等級,基于主機的連接數(shù)和基于服務(wù)的連接數(shù)。
— 設(shè)置特定的連接時間。
— 將某個服務(wù)設(shè)置到特定的主機以提供服務(wù)。
2) 有效防止DoS攻擊
— 可以限制連接的等級。
— 可以限制一個主機的最大連接數(shù),從而防止某個主機獨占某個服務(wù)。
— 可以限制日志文件的大小,防止磁盤空間被填滿。
3) 強大的日志功能
— 可以為每一個服務(wù)就syslog設(shè)定日志等級。
— 如果不使用syslog,也可以為每個服務(wù)建立日志文件。
— 可以記錄請求的起止時間以決定對方的訪問時間。
— 可以記錄試圖非法訪問的請求。
4) 轉(zhuǎn)向功能
可以將客戶端的請求轉(zhuǎn)發(fā)到另一臺主機去處理。
5) 支持IPv6
xinetd自xinetd 2.1.8.8pre*起的版本就支持IPv6,可以通過在./configure腳本中使用with-inet6 capability選項來完成。
注意,要使這個生效,核心和網(wǎng)絡(luò)必須支持IPv6。IPv4仍然被支持。
6) 與客戶端的交互功能
無論客戶端請求是否成功,xinetd都會有提示告知連接狀態(tài)。
3. Xinetd的缺點
當(dāng)前最大的缺點是對RPC支持的不穩(wěn)定,但是可以啟動protmap,使它與xinetd共存來解決這個問題。
4 使用xinetd啟動守護進程
原則上任何系統(tǒng)服務(wù)都可以使用xinetd,然而最適合的應(yīng)該是那些常用的網(wǎng)絡(luò)服務(wù),同時,這個服務(wù)的請求數(shù)目和頻繁程度不會太高。
像DNS和Apache就不適合采用這種方式
而像FTP、Telnet、SSH等就適合使用xinetd模式,
系統(tǒng)默認(rèn)使用xinetd的服務(wù)可以分為如下幾類。
① 標(biāo)準(zhǔn)Internet服務(wù):telnet、ftp。
② 信息服務(wù):finger、netstat、systat。
③ 郵件服務(wù):imap、imaps、pop2、pop3、pops。
④ RPC服務(wù):rquotad、rstatd、rusersd、sprayd、walld。
⑤ BSD服務(wù):comsat、exec、login、ntalk、shell、talk。
⑥ 內(nèi)部服務(wù):chargen、daytime、echo、servers、services、time。
⑦ 安全服務(wù):irc。
⑧ 其他服務(wù):name、tftp、uucp。
具體可以使用xinetd的服務(wù)在/etc/services文件中指出。
這個文件的節(jié)選內(nèi)容:
# /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網(wǎng)絡(luò)服務(wù)文件中,記錄網(wǎng)絡(luò)服務(wù)名和它們對應(yīng)使用的端口號及協(xié)議。文件中的每一行對應(yīng)一種服務(wù),它由4個字段組成,中間用Tab鍵或空格鍵分隔,分別表示“服務(wù)名稱”、“使用端口”、“協(xié)議名稱”及“別名”。在一般情況下,不要修改該文件的內(nèi)容,因為這些設(shè)置都是Internet標(biāo)準(zhǔn)的設(shè)置。一旦修改,可能會造成系統(tǒng)沖突,使用戶無法正常訪問資源。Linux系統(tǒng)的端口號的范圍為0~65 535,不同范圍的端口號有不同的意義。
— 0:不使用。
— 1~1 023:系統(tǒng)保留,只能由root用戶使用。
— 1 024~4 999:由客戶端程序自由分配。
— 5 000~65 535:由服務(wù)器程序自由分配。
5. 解讀/etc/xinetd.conf和/etc/xinetd.d/*
1) /etc/xinetd.conf
xinetd的配置文件是/etc/xinetd.conf,但是它只包括幾個默認(rèn)值及/etc/xinetd.d目錄中的配置文件。如果要啟用或禁用某項xinetd服務(wù),編輯位于/etc/xinetd.d目錄中的配置文件。例如,disable屬性被設(shè)為yes,表示該項服務(wù)已禁用;disable屬性被設(shè)為no,表示該項服務(wù)已啟用。/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:表示最大連接進程數(shù)為60個。
— log_type = SYSLOG authpriv:表示使用syslog進行服務(wù)登記。
— log_on_success= HOST PID:表示設(shè)置成功后記錄客戶機的IP地址的進程ID。
— log_on_failure = HOST:表示設(shè)置失敗后記錄客戶機的IP地址。
— cps = 25 30:表示每秒25個入站連接,如果超過限制,則等待30秒。主要用于對付拒絕服務(wù)攻擊。
— 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:表示禁用這個服務(wù)。
— socket_type = stream:表示服務(wù)的數(shù)據(jù)包類型為stream。
— wait = no:表示不需等待,即服務(wù)將以多線程的方式運行。
— user = root:表示執(zhí)行此服務(wù)進程的用戶是root。
— server = /usr/bin/rsync:啟動腳本的位置。
— log_on_failure += USERID:表示設(shè)置失敗時,UID添加到系統(tǒng)登記表。
5 配置xinetd
1) 格式
/etc/xinetd.conf中的每一項具有下列形式:
service service-name
{
……
}
其中service是必需的關(guān)鍵字,且屬性表必須用大括號括起來。每一項都定義了由service-name定義的服務(wù)。
service-name是任意的,但通常是標(biāo)準(zhǔn)網(wǎng)絡(luò)服務(wù)名,也可增加其他非標(biāo)準(zhǔn)的服務(wù),只要它們能通過網(wǎng)絡(luò)請求激活,包括localhost自身發(fā)出的網(wǎng)絡(luò)請求。有很多可以使用的屬性,稍后將描述必需的屬性和屬性的使用規(guī)則。
操作符可以是=、+=或-=。所有屬性可以使用=,其作用是分配一個或多個值,某些屬性可以使用+=或-=,其作用分別是將其值增加到某個現(xiàn)存的值表中,或?qū)⑵渲祻默F(xiàn)存值表中刪除。
2) 配置文件
相關(guān)的配置文件如下:
/etc/xinetd.conf
/etc/xinetd.d/*?????????????????????????????????????? //該目錄下的所有文件
/etc/hosts.allow
/etc/hosts.deny
3) disabled與enabled
前者的參數(shù)是禁用的服務(wù)列表,后者的參數(shù)是啟用的服務(wù)列表。他們的共同點是格式相同(屬性名、服務(wù)名列表與服務(wù)中間用空格分開,例如disabled = in.tftpd in.rexecd),此外,它們都是作用于全局的。如果在disabled列表中被指定,那么無論包含在列表中的服務(wù)是否有配置文件和如何設(shè)置,都將被禁用;如果enabled列表被指定,那么只有列表中的服務(wù)才可啟動,如果enabled沒有被指定,那么disabled指定的服務(wù)之外的所有服務(wù)都可以啟動。
4) 注意問題
① 在重新配置的時候,下列的屬性不能被改變:socket_type、wait、protocol、type;
② 如果only_from和no_access屬性沒有被指定(無論在服務(wù)項中直接指定還是通過默認(rèn)項指定),那么對該服務(wù)的訪問IP將沒有限制;
③ 地址校驗是針對IP地址而不是針對域名地址。
6 xinetd防止拒絕服務(wù)攻擊(Denial of Services)的原因
xinetd能有效地防止拒絕服務(wù)攻擊(Denial of Services)的原因如下。
1) 限制同時運行的進程數(shù)
通過設(shè)置instances選項設(shè)定同時運行的并發(fā)進程數(shù):
instances=20
當(dāng)服務(wù)器被請求連接的進程數(shù)達(dá)到20個時,xinetd將停止接受多出部分的連接請求。直到請求連接數(shù)低于設(shè)定值為止。
2) 限制一個IP地址的最大連接數(shù)
通過限制一個主機的最大連接數(shù),從而防止某個主機獨占某個服務(wù)。
per_source=5
這里每個IP地址的連接數(shù)是5個。
3) 限制日志文件大小,防止磁盤空間被填滿
許多攻擊者知道大多數(shù)服務(wù)需要寫入日志。入侵者可以構(gòu)造大量的錯誤信息并發(fā)送出來,服務(wù)器記錄這些錯誤,可能就造成日志文件非常龐大,甚至?xí)麧M硬盤。同時會讓管理員面對大量的日志,而不能發(fā)現(xiàn)入侵者真正的入侵途徑。因此,限制日志文件大小是防范拒絕服務(wù)攻擊的一個方法。
log_type FILE.1 /var/log/myservice.log 8388608 15728640
這里設(shè)置的日志文件FILE.1臨界值為8MB,到達(dá)此值時,syslog文件會出現(xiàn)告警,到達(dá)15MB,系統(tǒng)會停止所有使用這個日志系統(tǒng)的服務(wù)。
4) 限制負(fù)載
xinetd還可以使用限制負(fù)載的方法防范拒絕服務(wù)攻擊。用一個浮點數(shù)作為負(fù)載系數(shù),當(dāng)負(fù)載達(dá)到這個數(shù)目的時候,該服務(wù)將暫停處理后續(xù)的連接。
max_load = 2.8
上面的設(shè)定表示當(dāng)一項系統(tǒng)負(fù)載達(dá)到2.8時,所有服務(wù)將暫時中止,直到系統(tǒng)負(fù)載下降到設(shè)定值以下。
說明 要使用這個選項,編譯時應(yīng)加入“–with-loadavg”,xinetd將處理max-load配置選項,從而在系統(tǒng)負(fù)載過重時關(guān)閉某些服務(wù)進程,來實現(xiàn)防范某些拒絕服務(wù)攻擊。
5) 限制所有服務(wù)器數(shù)目(連接速率)
xinetd可以使用cps選項設(shè)定連接速率,下面的例子:
cps = 25 60
上面的設(shè)定表示服務(wù)器最多啟動25個連接,如果達(dá)到這個數(shù)目將停止啟動新服務(wù)60秒。在此期間不接受任何請求。
6) 限制對硬件資源的利用
通過rlimit_as和rlimit_cpu兩個選項可以有效地限制一種服務(wù)對內(nèi)存、中央處理器的資源占用:
rlimit_as = 8M
rlimit_cpu=20
上面的設(shè)定表示對服務(wù)器硬件資源占用的限制,最多可用內(nèi)存為8MB,CPU每秒處理20個進程。
xinetd的一個重要功能是它能夠控制從屬服務(wù)可以利用的資源量,通過它的以上設(shè)置可以達(dá)到這個目的,有助于防止某個xinetd服務(wù)占用大量資源,從而導(dǎo)致“拒絕服務(wù)”情況的出現(xiàn)。
總結(jié)
- 上一篇: 《Unix网络编程卷1-套接字联网API
- 下一篇: 花生焖猪脚怎样做好吃