什麼叫做PASV mode(被動模式傳送)?他是如何工作的?
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四、防火牆設定
#!/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
五、驗證:
Linux下VsFTP設定全方案
綱要:
一, VsFTPd的簡述
二, 企業Linux下vsFTPD方案
三, VsFTPD相關組態檔詳解
一,VsFTPd的簡述:
VSFTP(Very Secure FTP Daemon,非常安全的FTP伺服器)。顧名思義,VSFTPD設計的出發點就是安全性。同時隨着版本的不斷升級,VSFTPD在效能和穩定性上也取得 了極大的進展。除了安全和效能方面很優秀的外,還有很好的易用性。Red Hat公司在自己的FTP伺服器(ftp.redhat.com)上就使用了vsFTPd
二,企業Linux下vsFTPD實戰方案
要求:
使用者:netseek_com;FTP:ftp.netseek.com(192.168.0.21,我已經設定好了相關的DNS)
禁止匿名登陸,禁止使用者離開使用者目錄
命令通道埠使用5021,數據通道埠使用5020(你可以改成你想設定的埠如1021,1020)
允許使用被動模式使用埠範圍爲10010~10020.
使用者頻寬設定爲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
在檔案末尾加如下的設定:
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,方可。
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指定歡迎檔案.