在配置防火墻前,需確保已安裝并啟動FTP服務(以vsftpd
為例,CentOS默認倉庫提供):
# 安裝vsftpd
sudo yum install -y vsftpd
# 啟動服務并設置開機自啟
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
# 檢查服務狀態(確保無報錯)
sudo systemctl status vsftpd
firewalld是CentOS主流版本的默認防火墻管理工具,需通過以下步驟開放FTP所需端口:
FTP協議依賴**控制端口(21/tcp)**用于命令交互,**數據端口(20/tcp)**用于主動模式數據傳輸。需永久開放這兩個端口:
# 開放控制端口(21/tcp)
sudo firewall-cmd --permanent --add-port=21/tcp
# 開放數據端口(20/tcp)
sudo firewall-cmd --permanent --add-port=20/tcp
被動模式(PASV)下,FTP服務器會隨機開放一個高端口(范圍需提前配置)供客戶端連接。需根據vsftpd
配置指定端口范圍(如50000-50050
),并開放該范圍:
# 開放被動模式端口范圍(示例:50000-50050)
sudo firewall-cmd --permanent --add-port=50000-50050/tcp
注:被動模式端口范圍需與
vsftpd
配置文件(/etc/vsftpd/vsftpd.conf
)中的pasv_min_port
和pasv_max_port
一致,否則客戶端無法連接。
修改防火墻規則后,需重新加載以使更改生效:
sudo firewall-cmd --reload
通過以下命令確認FTP相關端口已成功開放:
# 查看所有開放端口
sudo firewall-cmd --list-all
# 或檢查特定端口(如21、50000)
sudo firewall-cmd --query-port=21/tcp # 應返回"yes"
sudo firewall-cmd --query-port=50000/tcp # 應返回"yes"
若系統啟用了SELinux(默認Enforcing
模式),需調整策略以允許FTP訪問用戶目錄:
# 設置FTP用戶可訪問其主目錄
sudo setsebool -P ftp_home_dir on
若需允許FTP用戶訪問系統其他目錄(謹慎使用):
sudo setsebool -P allow_ftpd_full_access on
可通過以下命令查看與FTP相關的SELinux策略:
getsebool -a | grep ftp
為避免不必要的風險,需調整vsftpd
配置文件(/etc/vsftpd/vsftpd.conf
):
# 禁止匿名訪問
anonymous_enable=NO
# 允許本地用戶登錄
local_enable=YES
# 允許用戶寫入文件(需配合chroot)
write_enable=YES
# 將用戶限制在其主目錄(增強安全性)
chroot_local_user=YES
# 允許例外用戶(如需管理員訪問,可添加用戶名到/etc/vsftpd/chroot_list)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 允許可寫目錄(解決chroot后無法寫入問題)
allow_writeable_chroot=YES
# 開啟被動模式
pasv_enable=YES
# 設置被動模式端口范圍(與防火墻配置一致)
pasv_min_port=50000
pasv_max_port=50050
# 指定服務器IP(避免客戶端連接錯誤)
pasv_address=your_server_public_ip
修改后重啟vsftpd
服務:
sudo systemctl restart vsftpd
使用FTP客戶端(如ftp
、FileZilla
)連接服務器,驗證防火墻配置是否生效:
# 使用命令行FTP客戶端測試
ftp your_server_ip
輸入用戶名和密碼后,嘗試上傳/下載文件,確認操作正常。
netstat -tuln
檢查)。cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
)。