frp穿透內網使用vsftpd服務

本篇文章將會介紹如何使用frp穿透內網以及如何在centos8環境下安裝和使用vsftpd,最後在公網通過frp穿透內網使用ftp。

一、內網穿透神器frp

frp 是一個專注於內網穿透的高性能的反向代理應用,支持 TCP、UDP、HTTP、HTTPS 等多種協議。可以將內網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。

frp是一個go語言編寫的、開源的項目,github地址:https://github.com/fatedier/frp

中文文檔完整地址:https://gofrp.org/docs/

原理

frp 主要由 客戶端(frpc)服務端(frps) 組成,服務端通常部署在具有公網 IP 的機器上,客戶端通常部署在需要穿透的內網服務所在的機器上。

內網服務由於沒有公網 IP,不能被非局域網內的其他用戶訪問。

用戶通過訪問服務端的 frps,由 frp 負責根據請求的端口或其他信息將請求路由到對應的內網機器,從而實現通信。

安裝

frp安裝包,直接到github上下載二進制文件即可:https://github.com/fatedier/frp/releases

啓動服務端:./frps -c ./frps.ini

啓動客戶端:./frpc -c ./frpc.ini

配合nohup工具使用效果更佳。

配置

解壓安裝文件之後,目錄層次如下:

├── frpc			frp客戶端可執行文件
├── frpc_full.ini		完整的frp客戶單配置文件,僅作爲參考
├── frpc.ini			真實使用的frp客戶端配置文件,通過frpc -c frpc.ini使用
├── frps                        frp服務端可執行文件
├── frps_full.ini	        完整的frp服務端配置文件,僅作爲參考
├── frps.ini			真實使用的frp服務端配置文件,通過frps -c frps.int使用
├── LICENSE
└── systemd		        寫入系統服務的一些腳本,在centos8中並不好用,我用nohup工具進行了替代
    ├── frpc.service
    ├── [email protected]
    ├── frps.service
    └── [email protected]

關於具體的配置使用方法,可參考官方中文文檔,已經足夠詳細,不再贅述。但是要注意frp客戶端千萬不要死掉,死掉就連不上了。

二、安裝vsftpd

vsftpd是linux平臺的ftp服務端軟件,這裏只介紹vsftpd的簡單使用方法,不用虛擬用戶名的配置方式,全部使用linux實際用戶並且每個用戶只能看到自己的用戶文件夾。

安裝

使用命令yum install vsftpd安裝vsftpd體積很小,不到1MB。

寫入服務

安裝完成之後,執行下面命令寫入服務

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

防火牆准入

sudo firewall-cmd --zone=public --permanent --add-port=21/tcp
sudo firewall-cmd --zone=public --permanent --add-service=ftp
sudo firewall-cmd --reload

三、配置vsftpd

vsftpd的配置文件都在 /etc/vsftpd文件夾中,最核心的配置文件是 /etc/vsftpd/vsftpd.conf ,所以基本上所有的配置都是圍繞 /etc/vsftpd/vsftpd.conf 文件進行的。

在配置該文件之前,需要注意一點,那就是 /etc/vsftpd/vsftpd.conf 配置文件中的配置並不全,很多配置是必須的,但是裏面並沒有給出,必須到網上自己查。 這點非常不友好,甚至可以說是非常白癡,畢竟像是frp,怕你不知道怎麼寫配置,還給了一個非常全面的frpc_full.ini之類的模板文件。

1.配置vsftpd.conf

禁用ipv6,啓用ipv4

listen_ipv6=NO
listen=YES

禁用匿名登錄

anonymous_enable=NO

允許已登錄用戶上傳

write_enable=YES

只允許登錄的用戶 訪問自己的文件夾

chroot_local_user=YES
allow_writeable_chroot=YES

設置user_list配置文件模式以及配置准入用戶

userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

注:userlist_deny爲NO表示/etc/vsftpd/user_list配置文件中的用戶都是允許登錄ftp的用戶;userlist_deny爲YES表示/etc/vsftpd/user_list配置文件中的用戶都是不允許登錄ftp的用戶

關閉主動模式登錄

connect_from_port_20=NO

配置被動模式登錄(重要)

pasv_address=外網ip地址
pasv_enable=Yes
pasv_min_port=50000
pasv_max_port=50002
pasv_promiscuous=YES

2.創建ftp用戶

創建用戶

sudo adduser testuser
sudo passwd testuser

將用戶添加到user_list文件

echo “testuser” | sudo tee –a /etc/vsftpd/user_list

3.重啓ftp服務

使用命令sudo systemctl restart vsftpd或者service vsftpd restart重啓ftp。

四、frp內網穿透並使用ftp服務

1.防火牆准入

在安裝vsftp的時候已經做了一次防火牆准入,那是開啓21端口號准入,這裏則是進行數據端口號防火牆准入。

在上面的vsftpd配置中,使用了被動模式數據傳輸,在這種模式下,需要服務端開啓若干個端口號進行數據傳輸,由於使用了frp內網穿透,所以需要公網主機和客戶端主機同時開啓端口號進行一一映射,這時候不適宜進行過多的端口號開放,根據配置文件vsftpd.conf中的配置

pasv_min_port=50000
pasv_max_port=50002

開放端口號50000到50002

firewall-cmd --permanent --zone=public --add-port=50000-50002/tcp
firewall-cmd --reload

2.frpc配置

服務端不動,只需要配置客戶端並重啓即可

[ftp]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port = 21

[ftp1]
type = tcp
local_ip = 127.0.0.1
local_port = 50000
remote_port = 50000

[ftp2]
type = tcp
local_ip = 127.0.0.1
local_port = 50001
remote_port = 50001

[ftp3]
type = tcp
local_ip = 127.0.0.1
local_port = 50002
remote_port = 50002

ftp負責接入,ftp1、ftp2、ftp3負責數據傳輸,配置完成之後重啓frp客戶端即可。

3.測試

在windows環境下使用filezillia ftp客戶端進行測試,ip地址填寫公網frp服務端地址,端口號填寫21,被動模式,填寫完賬號密碼後登陸即可查看下效果。

五、遇到的一些問題

1.vsftpd 425 Security: Bad IP connecting.

FTP客戶端軟件連接VSftpd服務報此錯誤,大概原因是在連接中變換了IP地址。

解決方案是修改/etc/vsftpd/vsftpd.conf,添加或者修改pasv_promiscuous=YES配置項

2.ftp客戶端顯示“返回了不可路由的服務器地址

解決方案是修改/etc/vsftpd/vsftpd.conf配置文件,配置配置項pasv_address=xxxx,這個配置項需要綁定公網ip地址,和vsftpd所在的機器ip可能不同,實際上就是暴露ftp服務的公網ip,在我這裏實際上就是frps地址。

3.移動端連接不上或者無內容

出現過手機端鏈接不上或者連上了但是看不到內容的情況,分別用ES文件瀏覽器、FE文件管理器、FTPManager軟件進行了測試,沒有一個正常的,但是在windows端使用filezillia客戶端確是好的

經過嘗試,原來是忘了配置一行pasv_enable=Yes ,感覺像是個廢話實際上不是啊。。。

六、參考文檔

https://phoenixnap.com/kb/how-to-setup-ftp-server-install-vsftpd-centos-7

https://blog.csdn.net/cy104204/article/details/24490729

https://serverfault.com/questions/421161/how-to-configure-vsftpd-to-work-with-passive-mode/421169

https://blog.csdn.net/default7/article/details/97898056

https://blog.csdn.net/hajistark/article/details/82954777

https://blog.csdn.net/qq_15127715/article/details/69055099

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章