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