linux搭建安全ftp服務器

 

一、FTP的概述
  文件傳輸協議(FTP)是TCP/IP提供的標準機制,用來將文件從一個主機複製到另一個主機。FTP使用TCP的服務。
FTP會話時包含了兩個通道,一個叫控制通道,一個叫數據通道。

 

 

 

控制通道:控制通道是和FTP服務器進行溝通的通道,連接FTP,發送FTP指令都是通過控制通道來完成的, PI稱爲控制連接。
數據通道:數據通道是和FTP服務器進行文件傳輸或者列表的通道。
FTP協議中,控制連接均有客戶端發起。
數據連接有兩種工作方式:PORT(主動)方式和PASV(被動)方式。
主動方式:
1.客戶端打開一個隨機的端口(端口號大於1024,在這裏,我們稱它爲x),同時一個FTP進程連接至服務器的21號命令端口。此時,源端口爲隨機端口x,在客戶端,遠程端口爲21,在服務器。   
2.客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21號命令端口),此命令告訴服務器客戶端正在監聽的端口號並且已準備好從此端口接收數據。這個端口就是我們所知的數據端口。   
3.服務器打開20號源端口並且建立和客戶端數據端口的連接。此時,源端口爲20,遠程數據端口爲(x+1)。   
4.客戶端通過本地的數據端口建立一個和服務器20號端口的連接,然後向服務器發送一個應答,告訴服務器它已經建立好了一個連接。
被動方式:
當開啓一個 FTP連接時,客戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接服務器的21端口,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許服務器來回連它的數據端口,而是提交 PASV命令。這樣做的結果是服務器會開啓一個任意的非特權端口(P > 1024),併發送PORT P命令給客戶端。然後客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。
FTP的優點:   
1.促進文件的共享  
2.鼓勵間接或者隱式的使用遠程計算機   
3.向用戶屏蔽不同主機中各種文件存儲系統的細節   
4.可靠和高效的傳輸數據   
FTP的缺點:   
1.密碼和文件內容都使用明文傳輸,可能產生不希望發生的竊聽。   
2.因爲必須開放一個隨機的端口以建立連接,當防火牆存在時,客戶端很難過濾處於主動模式下的FTP流量。這個問題通過使用被動模式的FTP得到了很大解決。   
3.服務器可能會被告知連接一個第三方計算機的保留端口。
登錄FTP服務器有三種方式
匿名登錄:在登錄FTP時使用默認的用戶名,一般是ftp或anonymous。
本地用戶登錄:使用/etc/passwd中的系統用戶登錄。
虛擬用戶登錄:有兩種方式實現虛擬用戶:本地數據文件(DB)和數據庫服務器(MySQL)。FTP虛擬用戶是FTP服務器的專有用戶,使用虛擬用戶登錄FTP,只能訪問FTP服務器提供的資源,大大增強了系統的安全。
FTPS簡介
一種多傳輸協議,相當於加密版的FTP。當你在FTP服務器上收發文件的時候,你面臨兩個風險。第一個風險是在上載文件的時候爲文件加密。第二個風險是,這些文件在你等待接收方下載的時候將停留在FTP服務器上,這時你如何保證這些文件的安全。你的第二個選擇(創建一個支持SSL的FTP服務器)能夠讓你的主機使用一個FTPS連接上載這些文件。這包括使用一個在FTP協議下面的SSL層加密控制和數據通道。一種替代FTPS的協議是安全文件傳輸協議(SFTP)。這個協議使用SSH文件傳輸協議加密從客戶機到服務器的FTP連接。   FTPS是在安全套接層使用標準的FTP協議和指令的一種增強型FTP協議,爲FTP協議和數據通道增加了SSL安全功能。
FTPS也稱作“FTP-SSL”和“FTP-over-SSL”。SSL是一個在客戶機和具有SSL功能的服務器之間的安全連接中對數據進行加密和解密的協議。
實驗安全機密的訪問機制
拓撲圖

 

 

 

二、配置步驟
1、安裝vsftpd軟件包
yum install -y vsftpd-2.0.5-16.el5.i386.rpm
啓動vsftpd服務
service vsftpd start
安裝抓包工具
yum -y install wireshark-1.0.8-1.el5_3.1.i386.rpm
創建賬號user1
useradd user1
passwd user1
user1登陸ftp服務器

 

 

 

因爲傳遞是明文的,我們看是否能夠抓到用戶的賬號信息
[root@mail Server]# tshark -ni eth0 -R "tcp.dstport eq 21"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
203.336196 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=2
203.337266 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=1 Ack=1 Win=8192 Len=0
203.545563 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=1 Ack=21 Win=8172 Len=0
206.871753 192.168.10.15 -> 192.168.10.10 FTP Request: USER user1
207.071412 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=13 Ack=55 Win=8136 Len=0
208.183262 192.168.10.15 -> 192.168.10.10 FTP Request: PASS 123
208.827546 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=23 Ack=78 Win=8112 Len=0
我們得到用戶名稱user1,密碼:123,顯然這種明文傳遞的方式顯然是存在安全隱患的,我們爲了提高ftp訪問的安全性,採取ftps加密的訪問方式
2、CA的相關配置
[root@mail ~]# cd /etc/pki/
[root@mail pki]# vim tls/openssl.cnf
45 dir = /etc/pki/CA #證書路徑
頒發證書機構與申請機構必須在同一地區,改爲可選的
88 countryName = optional
89 stateOrProvinceName = optional
90 organizationName = optional
在CA目錄下創建三個目錄兩個文件
[root@localhost CA]# mkdir crl certs newcerts
[root@localhost CA]# touch index.txt serial
頒發的證書的序列號碼從01開始
[root@localhost CA]# echo "01" >serial
爲證書頒發機構產生鑰匙,並重定向到private目錄下的cakey.pem文件中,鑰匙長度爲1024位
[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem
修改文件權限,確保鑰匙的安全,其他用戶沒有權限
[root@localhost CA]# chmod 600 private/*
產生密鑰 #–new表示新的鑰匙 –x509表示一種格式
[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem -days 3650
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BEIJING]:
Locality Name (eg, city) [BEIJING]:
Organization Name (eg, company) [My Company Ltd]:SECCENTER
Organizational Unit Name (eg, section) []:TEC
Common Name (eg, your name or your server's hostname) []:rootca.net.net
ftp服務器的配置
創建存放私有鑰匙,證書等信息的目錄
mkdir -pv /etc/ftpd/certs
產生鑰匙
cd /etc/httpd/certs/
openssl genrsa 1024 >ftpd.key
向根機構請求證書,
[root@localhost certs]# openssl req -new -key ftpd.key -out ftpd.csr
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BEIJING]:
Locality Name (eg, city) [BEIJING]:
Organization Name (eg, company) [My Company Ltd]:abc
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:ftp.abc.com
利用請求,得到證書
[root@localhost certs]# openssl ca -in ftpd.csr -out ftpd.cert
Web服務器申請證書信息
Subject:
countryName = CN
stateOrProvinceName = BEIJING
organizationName = abc
organizationalUnitName = tec
commonName = ftp.abc.com
修改鑰匙證書所在目錄的權限,保證信息的安全
[root@localhost certs]# chmod 600 *
3、配置vsftpd的配置文件
鑰匙
119 rsa_cert_file=/etc/ftpd/certs/ftpd.cert #證書路徑和名字
120 rsa_private_key_file=/etc/ftpd/certs/ftpd.key #私鑰的位置
121 ssl_tlsv1=YES
122 ssl_ssl2=YES
123 ssl_ssl3=YES #支持ssl_tls的三個版本
124 force_local_logins_ssl=YES #本地賬號登陸加密
125 force_local_data_ssl=YES #傳遞數據加密
126 ssl_enable=YES #開啓ssl加密
三、客戶端測試
安裝ftp的客戶端軟件,新建站點

 

 

 

 

 

 

 

繼續在eth0網卡的21端口抓包,我們看到驗證方式爲ssl,增加安全性
tshark -ni eth0 -R "tcp.dstport eq 21"
4890.084795 192.168.10.15 -> 192.168.10.10 FTP Request: AUTH SSL
4890.160493 192.168.10.15 -> 192.168.10.10 FTP Request: \200\310\001\003\001\000\237\000\000\000 \000\300\024\000\300
4890.276378 192.168.10.15 -> 192.168.10.10 FTP Request: \026\003\001\000\206\020\000\000\202\000\200\032g\314\373\006\360\236\360~\233\326\221\032\225\335\004\030^H\201~-\375\v<\025/z\237O;\002\301x\310\241\267\026\304@\217l\313=\031\000P\223\253\301\f\356^
4890.488872 192.168.10.15 -> 192.168.10.10 TCP 51921 > 21 [ACK] Seq=403 Ack=896 Win=64804 Len=0
案例二vsftpd虛擬賬號的實現
1、產生賬號庫文件
cd /etc/vsftpd/
touch viruser.txt #加入如下內容,表示兩個虛擬用戶的名稱和密碼
guest
123
mike
123
2、把文本變成數據庫文件
rpm -ivh db4-utils-4.3.29-10.el5.i386.rpm#安裝db4工具用來把文本轉化成數據庫
db_load -T -t hash -f viruser.txt viruser.db
驗證用戶是否存在,pam驗證和調用的模塊
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/viruser
account required pam_userdb.so db=/etc/vsftpd/viruser#賬號是否過期
創建系統賬號 user1,與虛擬賬號的guest和mike形成映射
useradd user1
改變user1的權限
[root@mail home]# chmod a+rw user1
配置vsftpd的主配置文件vim /etc/vsftpd/vsftpd.conf
119 guest_enable=YES
120 guest_username=user1
用虛擬賬號guest和mike訪問ftp服務器

 

 

 

由於虛擬賬號映射的是系統的user1賬號,因此虛擬賬號訪問的是其對應的賬號的家目錄,虛擬賬號是存在於系統之外的賬號,這種方法也大大增強了系統的安全性。
4、我們可以對訪問ftp服務器的用戶某些限制,來提高服務器的高穩定性能
修改vsftpd的接口文件vim /etc/pam.d/vsftpd
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
auth include system-auth
account include system-auth
session required pam_loginuid.so
編輯vsftpd的配置文件 vim /etc/vsftpd/vsftpd.conf
121 anon_max_rate=102400 #匿名賬號下載速度100K
122 local_max_rate=1024000 #本地賬號下載速度1M
123 max_clients=5 #同時在線的最大用戶數量
124 max_per_ip=2 #每用戶的最大連接數
在ftp上放置一個1M的f1文件,測試匿名賬號下載速度約爲100k/s

 

 

 

 

 

 

5、也可以對本地用戶user1和user2設置不同的訪問速度
vim /etc/vsftpd/vsftpd.conf 添加內容
user_config_dir=/etc/vsftpd/userdir #用戶的配置的目錄
cd /etc/vsftpd
mkdir userdir
cd userdir
vim user1 #添加訪問速率local_max_rate=1024000
vim user2 #添加local_max_rate=10240
重啓服務,就達到了不同用戶訪問ftp服務器不同速率的效果。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章