Iptables

如何配置 vsftpd 和 iptables 在埠 21 上偵聽但在另一個埠上執行?

  • March 6, 2016

我們有一個 Java 程序,其中包含一個我想在 RHEL5 機器上執行的嵌入式 FTP 伺服器。我不想以 root 身份執行該程序,也不希望客戶端在建立連接時必須指定埠。看來我應該能夠將 vsftpd 配置為偵聽備用埠(例如 20000),然後配置 ipchains 將埠 21 上的所有流量轉發到 20000。我認為我特別需要:

  1. 配置 vsftpd 監聽 20000 埠
  2. 配置ip_conntrack_ftp將流量從埠 21 轉發到 20000

所以我最初的問題是這看起來是一種合理的方法嗎?

為了完成第 1 步,我修改了我的 vsftpd.conf 以具有以下行:

listen_port=20000

然後我可以重新啟動 vsftpd 並通過執行以下操作來驗證它是否正在偵聽 20000:

> ftp tstweb1 20000
Connected to tstweb1.pulseenergy.com.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (tstweb1:cclark):

我繼續登錄沒有問題。步驟 1 完成。

至於第 2 步,我沒有看到載入的模組:

> /sbin/lsmod | grep ftp

>

所以我嘗試用正確的埠轉發資訊載入它:

> /sbin/modprobe ip_conntrack_ftp ports=21,20000

我驗證它已經載入:

> /sbin/lsmod | grep ftp
ip_conntrack_ftp       41489  0 
ip_conntrack           91109  3 ip_conntrack_ftp,iptable_nat,ip_nat

但是當我嘗試使用它時,連接被拒絕:

> ftp tstweb1
ftp: connect: Connection refused

我知道 FTP 是一個複雜的協議,具有主動和被動模式以及多個埠上的通信,但我的印像是該ip_conntrack_ftp模組會為我隱藏很多內容。我還需要編寫一些特定的 iptables 規則嗎?

我認為您正在尋找的是 REDIRECT:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 21 -j REDIRECT --to-port 20000

你需要使用passive-ftp。

引用自:https://serverfault.com/questions/61036