(2019年2月19日注:這篇文章原先發在自己github那邊的博客,時間是2017年2月5日)
寒假開始以后,過年之前有一個任務,為實驗室的人搭建一個FTP,用之前部署好的物理服務器。這本就是網管干的活,干唄,思來想去,為了方便,決定還是采取Linux轉發器+Windows服務器的形式,比較方便管理。
先說說總體的配置吧。
(1) Linux轉發器,兩個網卡,配有一個公網IP一個私有IP,私有IP就是該網段的網關。
(2) Windows服務器,FTP服務器,配有一個網卡,私有IP,配有兩塊存儲分區,第一個分區是系統分區,第二個分區是存儲分區,用FileZilla Server作為服務器。
簡單來說,這次的配置里面最為重要的是配置好NAT的部分。Linux的轉發之前已經配置並部署好了,因此只需要部署好FTP服務器,寫好Linux上面防火牆的配置即可。
一、拓撲圖
二、安裝步驟
1.先將Linux轉發器以及Windows服務器部署上去物理服務器上面,安裝好軟件,使得可以遠程控制。
我這里是用了XShell去遠程控制Linux路由器。
2. Linux路由器和Windows服務器上按照拓撲圖的要求設置好IP地址、子網掩碼、默認網關、DNS地址等等。進行Ping測試,確保能連接成功。
三、NAT的配置
1.參考網絡上面給的文檔,要先打開內核路由轉發的功能,更改配置文件 /etc/sysctl.conf 里面的 net.ipv4.ip_forward 設置為1。
2. 寫Linux的iptables規則,使用命令 vi /etc/sysconfig/iptables
里面加入兩條即可
1 -A PREROUTING -d 172.22.83.63/32 -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.100.7:21 2 -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 172.22.83.63
稍微解釋一下,按照師兄給我的講解的是。PREROUTING和POSTROUTING是針對網卡來說的,現在外網過來的數據包要進入內網,根據NAT的規則,我們需要將目的地址從路由器的地址轉化為私有的內部地址,因此這里也是這樣寫的,-d代表目的地址,目的端口是21,映射到內網的192.168.100.7的21端口,換言之,將發往172.22.83.63:21的數據包在Linux路由器這里映射為192.168.100.7:21,使用PREROUTING。
內網出去外網時,按照NAT的規則,我們需要將源地址(此時的源地址為內部主機的私有地址)進行修改,使用路由器的地址代替,才能正確的發送數據包。
3. 重啟Linux iptables service iptables restart
四、FTP主動模式和被動模式
如果按照上述配置完以后,應該還是無法訪問的,當時這里困擾了我相當長的時間,后來師兄給我的提示,他讓我想想FTP的傳輸模式。FTP一共有兩種傳輸模式,主動模式和被動模式,先說說默認的情況下,FTP Client是使用被動模式進行連接的。
FTP被動模式工作原理:在三次握手的過程中,FTP Server監聽着自己的21端口。
(1) FTP Client使用端口號x(x>1024)向FTP Server的21端口發起連接請求,同時監聽x+1端口,發送PASV命令,告知自己處於被動模式。
(2) FTP Server發送確認包,同時發送自己的一個可用端口號y。(PORT y)
(3) FTP Client使用x+1端口去連接FTP Server的y端口,傳輸數據。
FTP主動模式工作原理:在三次握手的過程中,FTP Server監聽着自己的21端口。
(1) FTP Client使用端口號x(x>1024)向FTP Server的21端口發起連接請求,同時監聽x+1端口,發送PORT命令,告知自己處於主動模式。
(2) FTP Server發送確認包,使用本地FTP端口(通常是20)來連接x+1端口,進行數據傳輸。
因此從上可以知道,這個主動與被動是相對於Server端的來說的。
在NAT的過程中,由於默認是使用被動模式進行數據傳輸,我們不知道Server端使用什么端口號去連接,全部端口開放這個不現實,也不安全。因此,為了讓我們的iptables支持我們的ftp,根據網上的資料,需要加載兩個模塊。 nf_nat_ftp 、nf_conntrack_ftp
最后我們使用命令:
1 modprobe nf_conntrack_ftp 2 modprobe nf_nat_ftp
還可以使用命令 lsmod | grep ftp 查看是否已經加載,若已經加載即可。
為了使得模塊的加載不隨着防火牆重啟而消失,我們可以加入配置文件中。
1 vi /etc/sysconfig/iptables-config 2 #在配置文件中加入兩句話。 3 IPTABLES_MODULES="nf_conntrack_ftp" 4 IPTABLES_MODULES="nf_nat_ftp"
保存並測試ftp即可。