教你配置安全的ProFTPD服务器(中)
二、 基本加固ProFTPD服務(wù)器步驟
?? 1.升級版本
? ? 注:如果當(dāng)前版本已經(jīng)是最新版本,可以跳過第一步。
????升級陳舊的ProFTPD版本,因?yàn)樵缙诘腜roFTPD版本存在的安全漏洞。對于一個新配置的ProFTPD服務(wù)器來說使用最新穩(wěn)定版本是最明智的選擇,可以在其官方網(wǎng)站下載其源代碼進(jìn)行編譯。ProFTPD最新版本是1.3.4a,官方網(wǎng)址:http://www.ProFTPD.org?。
?? 2.理解ProFTPD服務(wù)器運(yùn)行方式
????守護(hù)進(jìn)程(Daemon)定義:是在計(jì)算機(jī)啟動時就被運(yùn)行的,并在系統(tǒng)中持續(xù)運(yùn)行的進(jìn)程, 它等待著隨時為客戶提供自身負(fù)責(zé)的服務(wù)。守護(hù)進(jìn)程的工作就是打開一個端口,并且等待(Listen)進(jìn)入的連接。 如果客戶提請了一個連接,守護(hù)進(jìn)程就創(chuàng)建(fork)子進(jìn)程來響應(yīng)此連接, 而父進(jìn)程繼續(xù)監(jiān)聽更多的服務(wù)請求。正因?yàn)槿绱?#xff0c;每個守護(hù)進(jìn)程都可以處理多個客戶服務(wù)請求。ProFTPD能以Stand-alone、xinetd兩種模式運(yùn)行。首先我們要理解這兩個模式的含義。
??? (1)Stand-alone(運(yùn)行獨(dú)立)守護(hù)進(jìn)程
??? Stand-alone(獨(dú)立運(yùn)行)守護(hù)進(jìn)程由init腳本負(fù)責(zé)管理,所有獨(dú)立運(yùn)行的守護(hù)進(jìn)程的腳本在/etc/rc.d/init.d/目錄下。系統(tǒng)服務(wù)都是獨(dú)立運(yùn)行的守護(hù)進(jìn)程包括:syslogd和cron等。運(yùn)行獨(dú)立的守護(hù)進(jìn)程工作方式稱作:stand-alone。它Unix傳統(tǒng)的C/S模式的訪問模式。服務(wù)器監(jiān)聽(Listen)在一個特點(diǎn)的端口上等待客戶端的聯(lián)機(jī)。如果客戶端產(chǎn)生一個連接請求,守護(hù)進(jìn)程就創(chuàng)建(Fork)一個子服務(wù)器響應(yīng)這個連接,而主服務(wù)器繼續(xù)監(jiān)聽。以保持多個子服務(wù)器池等待下一個客戶端請求。stand-alone模式工作原理見圖5。
| 圖5 stand-alone工作模式 |
??? 工作在stand-alone模式下的網(wǎng)絡(luò)服務(wù)有route、gated。另外是大家最熟悉是Web服務(wù)器:Apache和郵件服務(wù)器Sendmail、域名服務(wù)器Bind。因?yàn)檫@些負(fù)載很大服務(wù)器上,預(yù)先創(chuàng)子服務(wù)器,可以通過客戶的服務(wù)速度。在Linux系統(tǒng)中通過stand-alone工作模式啟動的服務(wù)由/etc/rc.d/下面對應(yīng)的運(yùn)行級別當(dāng)中的符號鏈接啟動。
(2)xinetd模式
??? 從守護(hù)進(jìn)程的概念可以看出,對于系統(tǒng)所要通過的每一種服務(wù),都必須運(yùn)行一個監(jiān)聽某個端口連接所發(fā)生的守護(hù)進(jìn)程,這通常意味著資源浪費(fèi)。為了解決這個問題,Linux引進(jìn)了“網(wǎng)絡(luò)守護(hù)進(jìn)程服務(wù)程序”的概念。Redhat Linux 9.0使用的網(wǎng)絡(luò)守護(hù)進(jìn)程是xinted(eXtended InterNET daemon)。和stand-alone模式相比xinted模式也稱 Internet Super-Server(超級服務(wù)器)。xinetd能夠同時監(jiān)聽多個指定的端口,在接受用戶請求時,他能夠根據(jù)用戶請求的端口不同,啟動不同的網(wǎng)絡(luò)服務(wù)進(jìn)程來處理這些用戶請求。可以把xinetd看做一個管理啟動服務(wù)的管理服務(wù)器,它決定把一個客戶請求交給那個程序處理,然后啟動相應(yīng)的守護(hù)進(jìn)程。xinetd模式工作原理見圖6。
| 圖6 xinetd工作模式 |
??? 和stand-alone工作模式相比,系統(tǒng)不想要每一個網(wǎng)絡(luò)服務(wù)進(jìn)程都監(jiān)聽其服務(wù)端口。運(yùn)行單個xinetd就可以同時監(jiān)聽所有服務(wù)端口,這樣就降低了系統(tǒng)開銷,保護(hù)系統(tǒng)資源。但是對于訪問量大、經(jīng)常出現(xiàn)并發(fā)訪問時,xinetd想要頻繁啟動對應(yīng)的網(wǎng)絡(luò)服務(wù)進(jìn)程,反而會導(dǎo)致系統(tǒng)性能下降。察看系統(tǒng)為Linux服務(wù)提供那種模式方法在Linux命令行可以使用pstree命令可以看到兩種不同方式啟動的網(wǎng)絡(luò)服務(wù)。一般來說系統(tǒng)一些負(fù)載高的服務(wù):sendmail、Apache服務(wù)是單獨(dú)啟動的。而其他服務(wù)類型都可以使用xinetd超級服務(wù)器管理。守護(hù)進(jìn)程的分類:系統(tǒng)守護(hù)進(jìn)程:如atd、crond、lpd、syslogd、login等。網(wǎng)絡(luò)守護(hù)進(jìn)程:如sshd、httpd、sendmail、xinetd等。
??? 查看目前運(yùn)行的守護(hù)進(jìn)程樹可以使用命令:“pstree”。pstree指令用ASCII字符顯示樹狀結(jié)構(gòu),清楚地表達(dá)程序間的相互關(guān)系。如果不指定程序識別碼或用戶名稱,則會把系統(tǒng)啟動時的第一個程序視為基層,并顯示之后的所有程序。若指定用戶名稱,便會以隸屬該用戶的第一個程序當(dāng)作基層,然后顯示該用戶的所有程序。主要命令選型:
-a 顯示每個程序的完整指令,包含路徑,參數(shù)或是常駐服務(wù)的標(biāo)示。?
-c 不使用精簡標(biāo)示法。?
-G 使用VT100終端機(jī)的列繪圖字符。?
-h 列出樹狀圖時,特別標(biāo)明現(xiàn)在執(zhí)行的程序。?
-H<程序識別碼> 此參數(shù)的效果和指定"-h"參數(shù)類似,但特別標(biāo)明指定的程序。?
-l 采用長列格式顯示樹狀圖。?
-n 用程序識別碼排序。預(yù)設(shè)是以程序名稱來排序。?
-p 顯示程序識別碼。?
-u 顯示用戶名稱。?
-U 使用UTF-8列繪圖字符。?
pstree 輸出界面見圖7()內(nèi)是進(jìn)程號。
| 圖7 pstree 輸出界面 |
??? xinetd提供類似于inetd+tcp_wrapper的功能,但是更加強(qiáng)大和安全。xinetd(eXtended InterNET services daemon)提供類似于inetd+tcp_wrapper的功能,但是更加強(qiáng)大和安全。它能提供以下特色:
- 支持對tcp、ucp、RPC服務(wù)(但是當(dāng)前對RPC的支持不夠穩(wěn)定) 。
- 基于時間段的訪問控制 。
- 功能完備的log功能,即可以記錄連接成功也可以記錄連接失敗的行為。
- 能有效的防止DoS攻擊(Denial of Services) 。
- 能限制同時運(yùn)行的同意類型的服務(wù)器數(shù)目 。
- 能限制啟動的所有服務(wù)器數(shù)目 。
- 能限制log文件大小 。
- 將某個服務(wù)綁定在特定的系統(tǒng)接口上,從而能實(shí)現(xiàn)只允許私有網(wǎng)絡(luò)訪問某項(xiàng)服務(wù) 。
- 能實(shí)現(xiàn)作為其他系統(tǒng)的代理。如果和ip偽裝結(jié)合可以實(shí)現(xiàn)對內(nèi)部私有網(wǎng)絡(luò)的訪問。
??? 原則上任何系統(tǒng)服務(wù)都可以使用xinetd,然而,我認(rèn)為,最適合應(yīng)該是哪些常用的internet服務(wù),同時,這個服務(wù)的請求數(shù)目和頻繁程度不會太高。象DNS和Apache就不適合采用這種方式,而象Ftp、telnet、 SSH等就很適合使用xinetd方式,系統(tǒng)默認(rèn)使用xinetd的服務(wù)可以分為如下幾類:
1、標(biāo)準(zhǔn)internet服務(wù):telnet ftp
2、信息服務(wù):finger netstat systat
3、郵件服務(wù):imap imaps pop2 pop3 pops?
4、RPC服務(wù):rquotad rstatd rusersd sprayd walld
5、BSD服務(wù):comsat exec login ntalk shell talk
6、內(nèi)部服務(wù):chargen daytime echo servers services time
7、安全服務(wù):irc
8、其他服務(wù):name uucp
Red Hat 中xinetd 的配置文件:主配置文件:/etc/xinetd.conf,每一個由xinetd啟動的服務(wù)在目錄/etc/xinetd.d/下都有一個以服務(wù)名稱命名的配置文件。在主配置文件/etc/xinetd.conf中將/etc/xinetd.d目錄下的所有文件的內(nèi)容使用 includedir /etc/xinetd.d語句包含進(jìn)來。xinetd的配置選項(xiàng)見表-1。
| 表 1. xinetd的指示符 |
??? xinetd能有效的防止拒絕服務(wù)攻擊(Denial of Services)原理:
??? (a)限制同時運(yùn)行的進(jìn)程數(shù):
??? 通過設(shè)置instances選項(xiàng)設(shè)定同時運(yùn)行的并發(fā)進(jìn)程數(shù):
instances=20
??? 當(dāng)服務(wù)器被請求連接的進(jìn)程數(shù)達(dá)到20個時,xinetd將停止接受多出部分的連接請求。直到請求連接數(shù)低于設(shè)定值為止。
??? (b)限制一個IP地址的最大連接數(shù):
??? 通過限制一個主機(jī)的最大連接數(shù),從而防止某個主機(jī)獨(dú)占某個服務(wù)。
per_source=5
??? 這里每個IP地址可以連接單個IP地址的連接數(shù)是5個。
??? (c)限制負(fù)載:
??? xinetd還可以使用限制負(fù)載的方法防范拒絕服務(wù)攻擊。用一個浮點(diǎn)數(shù)作為負(fù)載系數(shù),當(dāng)負(fù)載達(dá)到這個數(shù)目的時候,該服務(wù)將暫停處理后續(xù)的連接:
max_load = 2.8
??? 上面的例子中當(dāng)一項(xiàng)系統(tǒng)負(fù)載達(dá)到2.8時,所有服務(wù)將暫時中止,直到系統(tǒng)負(fù)載下降到設(shè)定值以下。說明要使用這個選項(xiàng),編譯時要加入--with-loadavg ,xinetd將而已處理max-load配置選項(xiàng)。從而在系統(tǒng)負(fù)載過重時關(guān)閉某些服務(wù)進(jìn)程,來實(shí)現(xiàn)某些拒絕服務(wù)攻擊。?
??? (d)限制所有服務(wù)器數(shù)目(連接速率):
??? xinetd可以使用cps選項(xiàng)設(shè)定連接速率,下面的例子:
cps = 25 60
??? 第一個參數(shù)表示每秒可以處理的連接數(shù),如果超過了這個連接數(shù)之后進(jìn)入的連接將被暫時停止處理;第二個參數(shù)表示停止處理多少秒后繼續(xù)處理先前暫停處理的連接。即服務(wù)器最多啟動25個連接,如果達(dá)到這個數(shù)目將停止啟動新服務(wù)60秒。在此期間不接受任何請求。
3.盡量使用xinetd方式運(yùn)行ProFTPD服務(wù)器
????ProFTPD能以Stand-alone、xinetd兩種模式運(yùn)行。當(dāng)用戶賬號比較少又經(jīng)常需要連接到ProFTPD服務(wù)器時推薦使用xinetd模式運(yùn)行。使用xinetd方式運(yùn)行ProFTPD可以有效防范DoS攻擊。使用xinetd方式運(yùn)行ProFTPD的步驟:
??? (1)檢查確省運(yùn)行情況
??? 確省情況下ProFTPD以stand-alone工作模式運(yùn)行,可以使用“ps aux| grep proftpd”命令查看進(jìn)程號,然后使用kill命令中止運(yùn)行。
??? (2)修改配置文件
??? 修改/etc/proftpd.conf文件的ServerType選項(xiàng)由“standalone”改為“inetd”。
??? (3)建立用戶組
??? groupadd nogroup
??? (4)創(chuàng)建配置文件/etc/xinetd.d/proftpd,代碼如下:
service ftp?
{?
flags = REUSE?
socket_type = stream?? “服務(wù)的數(shù)據(jù)封包類型為stream”
instances = 30?????????? “最多可以同時建立30個ftp連接。”
max_load = 3.0??????? “最大負(fù)載“
wait = no???????? “不需等待,即ftp服務(wù)將以多線程的方式運(yùn)行”
user = root???????? “執(zhí)行此服務(wù)進(jìn)程的用戶是root”
server = /usr/local/sbin/proftpd “啟動腳本位置”
log_on_success = HOST PID?
log_on_failure = HOST RECORD?
disable = no?? “允許運(yùn)行proftpd”
}
??? (5)重新啟動xinetd配置
??? killall -USR1 xinetd
??? (6)使用命令連接服務(wù)器
??? 可以使用“ftp localhost”連接本地服務(wù)器,如果連接被拒絕,可以使用命令:
??? tail -f /var/log/messages查看錯誤信息。
?
Trackback:http://hi.baidu.com/tonyty163/blog/item/e0493b5916ca3ad79c8204b2.html
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/JohnShao/archive/2012/05/01/2477546.html
總結(jié)
以上是生活随笔為你收集整理的教你配置安全的ProFTPD服务器(中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中过滤序列内置函数filte
- 下一篇: moodle3.7中文语言包