FTP的鏈接通常是有兩個鏈接的,一個是客戶程和服務器傳輸命令的,另外一個是數據傳送的鏈接。
FTP服務程序通常會支持兩種不一樣的模式:
一種是Port模式
一種是Passive模式(Pasv Mode),
主動模式和被動模式的的區別:
先假設客戶端爲C,服務端爲S.
Port模式:
當客戶端C向服務端S鏈接後,使用的是Port模式,那麼客戶端C會發送一條命令告訴服務端S(客戶端C在本地打開了一個端口N在等着你進行數據鏈接),當服務端S收到這個Port命令後 就會向客戶端打開的那個端口N進行鏈接,這種數據鏈接就生成了。
Pasv模式:
當客戶端C向服務端S鏈接後,服務端S會發信息給客戶端C,這個信息是(服務端S在本地打開了一個端口M,你如今去鏈接我吧),當客戶端C收到這個信息後,就能夠向服務端S的M端口進行鏈接,鏈接成功後,數據鏈接也創建了。
總結
從上可知兩種模式主要的不一樣是數據鏈接創建的不一樣:
對於Port模式,是客戶端C在本地打開一個端口等服務端S去鏈接創建數據鏈接;
而Pasv模式就是服務端S打開一個端口等待客戶端C去創建一個數據鏈接。
我須要把傳送模式設置成PASV mode嗎?
若是您鏈接到INTERNET的方式以下圖,你須要設置成爲PASV mode模式傳送
路由上有兩個ip一個是內網ip(也就是你的網關地址)另一個是外網IP,你全部LAN中的計算機都是共享這個218.63.1.5訪問INTERNET的(中間經過了192.168.1.1這個網關),讓咱們來看一個鏈接的詳細過程,以便您
更進一步瞭解爲何須要設置成爲PASV mode 傳送:
當您經過下載工具或使用瀏覽器下載影片的時候就開始鏈接FTP服務器, 當FTP服務收到你的鏈接請求後發送應答信息給客戶並開始等待用戶的認證信息,–>認證經過後開始創建數據鏈接若是你不是設置成爲pasv模式,那 麼客戶段(下載工具)會在本地計算機開一個數據端口,而後發送一條「命令」給FTP服務段,(我已打開了n端口你如今能夠鏈接我),那麼FTP服務器段就 開始鏈接你ip地址的N端口,(可是鏈接是失敗的) 由於你是經過192.168.1.1 這個網關(你的路由設備)訪問internet的ftp服務段他其實是同你的外網地址爲218.63.1.5的路由設備鏈接,根本就鏈接不上你下載工具 中打開的端口,例如你使用的是 192.168.1.2 這個客戶機,FTP服務段此時沒法同你計算機192.168.1.2)監聽端口N鏈接上,因此此時你會看到服務器反饋的錯誤信息,提示你 192.168.1.2打開的端口沒法鏈接之類的, 信息此時你就須要把傳送模式設置成爲PASV模式,而若是你使用的是PASV模式那麼當你ftp經過認證後,客戶段首先向服務器發送一條PASV命令,服 務段接受到命令後打開一個端口並告訴客戶段「我已打開了一個端口,你此時能夠來鏈接了」 客戶段(下載工具)接受到信息後,就去鏈接服務段已經打開了的端口,從而完成數據鏈接,全部ftp下載的數據流都將經過這個端口傳送
並且在用iptables作NAT時,應該裝載這兩個模塊(ip_nat_ftp、ip_conntrack_ftp),才能正常連到ftp服務器。不然pasv被動模式都沒法鏈接到ftp服務器。
FTP模式與數據端口
FTP 分爲兩類,PORT FTP和PASV FTP,PORT FTP是通常形式的FTP。這兩種FTP在創建控制鏈接時操做是同樣的,都是由客戶端首先和FTP服務器的控制端口(默認值爲21)創建控制連接,並經過 此連接進行傳輸操做指令。它們的區別在於使用數據傳輸端口(ftp- data)的方式。PORT FTP由FTP服務器指定數據傳輸所使用的端口,默認值爲20。PASV FTP由FTP客戶端決定數據傳輸的端口。 PASV FTP這種作法,主要是考慮到存在防火牆的環境下,由客戶端與服務器進行溝通(客戶端向服務器發出數據傳輸請求中包含了數據傳輸端口),決定二者之間的數 據傳輸端口更爲方便一些。
port_enable=YES|NO
若是你要在數據鏈接時取消PORT模式時,設此選項爲NO。默認值爲YES。
connetc_from_port_20=YES|NO
控制以PORT模式進行數據傳輸時是否使用20端口(ftp-data)。YES使用,NO不使用。默認值爲NO,但RHL自帶的vsftpd.conf文件中此參數設爲YES。
ftp_data_port=port number
設定ftp數據傳輸端口(ftp-data)值。默認值爲20。此參數用於PORT FTP模式。
port_promiscuous=YES|NO
默認值爲NO。爲YES時,取消PORT安全檢查。該檢查確保外出的數據只能鏈接到客戶端上。當心打開此選項。
pasv_enable=YES|NO
YES,容許數據傳輸時使用PASV模式。NO,不容許使用PASV模式。默認值爲YES。
pasv_min_port=port number
pasv_max_port=port number
設定在PASV模式下,創建數據傳輸所可使用port範圍的下界和上界,0 表示任意。默認值爲0。把端口範圍設在比較高的一段範圍內,好比50000-60000,將有助於安全性的提升。
pasv_promiscuous=YES|NO
此選項激活時,將關閉PASV模式的安全檢查。該檢查確保數據鏈接和控制鏈接是來自同一個IP地址。當心打開此選項。此選項惟一合理的用法是存在於由安全隧道方案構成的組織中。默認值爲NO。
pasv_address=
此選項爲一個數字IP地址,做爲PASV命令的響應。默認值爲none,即地址是從呼入的鏈接套接字(incoming connectd socket)中獲取。
因此若是linux打開了防火場,必須開通對應的端口 例如:
-A RH-Firewall-1-INPUT -m state –state NEW -p tcp -m tcp –dport 30000:31000 –syn -j ACCEPT
4、防火牆配置
#!/bin/bash
#ip.sh
echo 「1″ >/proc/sys/net/ipv4/ip_forward
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t filter -A FORWARD -p tcp -s 172.16.0.0/16 -d 192.168.0.10 –dport 21 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 192.168.0.10 –sport 21 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 172.16.0.0/16 -d 192.168.0.10 –dport 30000:310000 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 192.168.0.10 –sport 3000:4000 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -p icmp –icmp-type 8 -j ACCEPT
iptables -t filter -A FORWARD -p icmp –icmp-type 0 -j ACCEPT
5、驗證:
# 在xp下用ftp命令鏈接,都是採用主動模式鏈接,能夠採用圖形界面的軟件,默認通常爲被動模式。
# netstat -an|grep 172
Linux下VsFTP配置全方案
綱要:
一, VsFTPd的簡述
二, 企業Linux下vsFTPD方案
三, VsFTPD相關配置文件詳解
一,VsFTPd的簡述:
VSFTP(Very Secure FTP Daemon,很是安全的FTP服務器)。顧名思義,VSFTPD設計的出發點就是安全性。同時隨着版本的不斷升級,VSFTPD在性能和穩定性上也取得 了極大的進展。除了安全和性能方面很優秀的外,還有很好的易用性。Red Hat公司在本身的FTP服務器(ftp.redhat.com)上就使用了vsFTPd
二,企業Linux下vsFTPD實戰方案
要求:
1. 用戶:netseek_com;FTP:ftp.netseek.com(192.168.0.21,我已經配置好了相關的DNS)
2. 禁止匿名登錄,禁止用戶離開用戶目錄
3. 命令通道端口使用5021,數據通道端口使用5020(你能夠改爲你想設置的端口如1021,1020)
4. 容許使用被動模式使用端口範圍爲10010~10020.
5. 用戶帶寬設置爲200kps;用戶空間大小限制爲300M,容許寬限期限內有10MB的緩衝
具體操做步驟以下:
爲了更徹底的描述安裝全過程,我在個人另外一臺主機(netseek)上進行配置,在臺機IP:192.168.0.20上綁定了192.168.0.21,也配置好了相關的DNS解析,在這裏我就很少說了請參照」Linux全能web服務器架設」。
1. 配置相關服務
啓動服務:
[root@netseek root]# #rpm –qa | grep vsftpd ;查看是否安裝vsftpd服務
#/etc/init.d/vsftpd start ;啓動服務
#chkconfig vsftpd on ;讓系統服務隨着系統啓動而啓動
配置相關文檔:
#vi /etc/vsftpd/vsftpd.conf
禁止匿名用戶訪問:
anonymous_enable=YES,將YES改成NO
在文件末尾加以下的設置:
# new added by netseek
listen_port=5021 ;命令通道端口,默認爲21
listen_data_port=5020 ;數據通道端口,默認爲20
pasv_enable=YES ;容許被動模式
pasv_min_port=10000 ;被動模式使用端口範圍
pasv_max_port=10010
local_max_rate=200000 ;用戶寬帶限制
chroot_local_user=YES ;禁用戶離開主目錄
listen_address=192.168.0.21 ;讓他監聽ip:192.168.0.21
注:在添加過程當中請不要加上」;」和這些中文註釋,在這裏我上爲了方便你們瞭解才加上的。
2. 添加虛擬主機用戶
添加用戶netseek_com,用戶目錄指定爲/var/www/netseek.com,且此用戶不能登錄系統.
#mkdir /var/www/netseek.com
#useradd –s /sbin/nologin –d /var/www/netseek.com netseek_com
注-s /sbin/nologin是讓其不能登錄系統,-d 是指定用戶目錄爲/var/www/netseek.com
#passwd netseek_com (Do not Hack me 3ks) DnHm3ks 這是我設置的密碼
#chown –R netseek_com:netseek_com /var/www/netseek.com
注:將用戶目錄及其子目錄的全部和所屬的組設置爲netseek_com
3. 配置磁盤配額
我在安裝過程當中磁盤了多個區,分別/home,/var,/,/www,tmp,swap,/boot多個分區。建議你將磁盤分多個獨單的分區,這樣能夠下降磁盤分區損壞形成的數據丟失風險.
#[root@netseek root]# rpm -qa | grep quota
quota-3.06-9 ; 個人系統已經安裝了磁盤配額工具
#vi /etc/fstab
找到相似
LABEL=/var /var ext3 defaults 1 2
在defaults後加入usrquota,改成以下:
LABEL=/var /var ext3 defaults,usrquota 1 2
從新加載/var這個分區:
#mount –o remount /var
#cd /var 進入這個目錄
#touch quota.user
#chmod 600 quota.user
#quotacheck –mf /var 對磁盤分區空間使用狀況進行強制檢測
[root@localhost var]# quotacheck -mf /var
quotacheck: WARNING – Quotafile /var/quota.user was probably truncated. Can’t save quota settings…
從新啓動系統
第一次運行時都會出現這個警告,再次運行的時候就不會啦
爲指定用戶定額:
#edquota netseek_com 爲用戶netseek_com設置磁盤配額。
Disk quotas for user netseek_com (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 6616 307200 0 15 0 0
注:
ilesystem blocks soft hard inodes soft hard
filesystem-正在設置的文件系統,不要修改或刪除
bolock-當前使用的碰盤空間,單位爲KB
soft(第一個)-軟磁盤空間限制,默認0,表示無限制,我在這裏設爲300M。
hard(第一個)-硬配額限制,0表示無限制。
inodes-當前文件數量
soft(第二個)-對文件數量的軟限制,0表示無限制
hard(第二個)-對文件數量的硬限制,0表示無限制
讓系統啓動是自動加載:
#vi /etc/rc.d/rc.local ,加入如下:
/etc/init.d/vsftpd start
/sbin/quotacheck
/sbin/quotaon –avu
如今查看netseek_com 用戶使用磁盤空間的狀況
[root@localhost ~]# quota -u netseek_com
Disk quotas for user netseek_com (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda5 6616 307200 0 15 0 0
注:關於更多的quota命令,請用man命令查看吧,烏哥(VBird)說,咱們要學會找男人 !
4. 效果演示,登錄演示:
四, VsFTPd相關的配置詳解
1.匿名用戶相關設置
anonymous_enable=YES ,將YES改成NO, 禁止匿名用戶登錄
#non_mkdir_write_enable=YES ,將#註釋去掉,容許匿名用戶建立目錄
#non_upload_enalbe=YES ,將#去掉,容許匿名用戶上傳
anon_world_readable_only=YES ,容許匿名用戶下載,默認是禁止的,這個能夠自行添加。
Anon_other_write_enable=YES ,將其設爲YES的話,就除了上傳和建立目錄外,還能夠重命名,刪除文件,默認是NO
no_anon_password=NO ,將其設爲YES,匿名用戶不會查詢用戶密碼直接登錄。
ftp_username=ftp ,匿名用戶登錄系統的帳號默認爲ftp,此項最好不要改,不然設置不當會給系統的安全帶來威脅。
2.FTP服務端口的指定
listen_port=8021 ,指定命令通道爲8021,默認爲21
listen_data_port=8020 ,指定數據通道爲8020,默認爲20
3.上傳模式的設置
pasv_enable=YES ,是否允使用被動模式,默認是容許的。
pasv_min_port=10000 ,指定使用被動模式時打開端口的最小值
pasv_max_port=10004 ,指定使用被動模式時打開端口的最大值。
4.Vsftp服務器指定IP地址
listen_address=192.168.0.21 ,指定FTP,IP地址
注:只有當vsftp運行於獨立模式時才容許使用指定IP,若是在/etc/xinetd.d目錄下已經創建了vsfpd文件,就要將該文件中的disable設置爲yes,方可。
5. 鎖定用戶,禁止用戶離開用戶主目錄
chroot_local_user=YES ,將其設爲YES,就鎖定在用戶主目錄,設爲NO,能夠切換
將指定用戶設置爲鎖定用戶主目錄:
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
將其改成以下:
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
將上面保存,再作以下操做:
#touch /etc/vsftpd/vsftpd.chroot_list
#vi /etc/vsftpd/vsftpd.chroot_list ,在該文件中加入用戶名單,如:
netseek_com
6.FTP服務器的流量控制
max_clients=100 ;容許的最大鏈接數,定義爲100,默認爲0,表沒有限制
max_per_ip=5 ;每一個IP容許的鏈接數,0表沒有限制,須要運行於獨立模式方可
anon_max_rate=50000 ;匿名用戶最大帶寬,單位爲bps
local_max_rate=200000 ;系統用戶最大帶寬
如何對指定用戶進行流量限制呢?
#vi /etc/vsftpd/vsftpd.conf,添加一行:
user_config_dir=/etc/vsftpd/userconf
#touch /etc/vsftpd/userconf/netseek_com 爲netseek_com這個用戶創建一個netseek_com文件
#vi /etc/vsftpd/userconf/netseek_com 添加如下內容
local_max_rate=100000
保存重啓服務便可.
7.定製歡迎信息
目錄說明設置
#vi /etc/vsftpd/vsftpd.conf
#dirmessage_enable=YES,前的#去掉。
而後咱們定製一個.message,寫上你想寫的東西,而後把這個文件複製到各個用戶的家目錄中,就OK。
系統歡迎消息設置
ftpd_banner=Welcome to ftp.netseek.com , Yeah!!!
系統歡迎消息文件設置
banner_file=/etc/vsftpd/welcome 與ftpd_banner相相似,不一樣之處在於,banner_file指定歡迎文件.