首先大家要認清楚一個概念,使用FTP是從http代理出去,還是由socks代理或firewall上打開一個口轉發。從http代理出去的FTP,實際上使用的是http代理程序,象最常用的squid,是http tps代理,但是它也能代理ftp請求。當你打開瀏覽器登陸ftp站點時,使用的就是http代理程序來處理ftp的問題。而有些程序只能設置成socks或firewall代理,象Cuteftp,wu-ftp和dos下的FTP。此類的代理才是標準的FTP代理。
本文假設大家對netfilter技術已經有了一定了解,介紹利用netfilter的有狀態功能在inux2.4內核上實現FTP。
系統環境:
linux7.2,安裝了iptable,squid,有兩塊網卡:
eth0:x.x.x.x 接internet,
eth1:192.168.0.1 接內網。
firewall相關規則:
以下為引用的內容:
##Ismod the firewall modules *加載模塊
modprobe ip_tables
insmod ip_conntrack
insmod ip_conntrack_ftp
insmod ip_nat_ftp
關于有狀態功能,重點在于后三個模塊:ip_conntrack模塊能夠使防火墻具有連接跟蹤能力。(通過輸入 "cat /proc/net/ip_conntrack" 可以查看您的機器參與的活動網絡連接。)加載這個模塊后,基本上所有有狀態的返回包都能識別,例:telnet,http,QQ,mail,ping,dns等。
實際上,加載了ip_conntrack模塊,ftp已經能夠登陸,并能使用象pwd,cd等命令,但當使用ls命令顯示文件內容時,就會timeout。原因在于顯示文件列表的包防火墻無法識別,就會進入默認策略----禁止,此時就需要加載ip_conntrack_ftp模塊。
ip_conntrack_ftp模塊使防火墻能夠識別FTP某類特殊的返回包。如果防火墻上對所有出去的返回包作了偽裝,就需要加載ip_nat_ftp模塊。ip_nat_ftp模塊在出去的包作了偽裝以后,必須加載,否則防火墻無法知道返回的包該轉發到哪里。
以下為引用的內容:
##Define the policy *定義默認規則
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
所有從局域網出去的包偽裝。
以下為引用的內容:
#accept lan use ftp *允許所有局域網用戶使用FTP
iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p tcp --dport 20 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p udp --dport 20 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p udp --dport 21 -j ACCEPT
打開ftp的20,21端口
#accept come back packets from INTERNET
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
允許有狀態的返回包轉發。
關于netfilter有狀態基礎知識,請查看相關資料。 本文出自:億恩科技【www.vbseamall.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|