今天登陆一个外网的FTP,网页能正常登陆及浏览,但dos窗口下却只能登陆上去,但输入ls命令却被拒绝了,可能是对端采用了NAT转换,主动模式登陆不进去,解决办法如下。
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
�P於 FTP
事��上�o�H知道如何操作 iptables 工具�o�不足以�O定好您的防火��及 NAT �o您�要�Ω鞣N TCP/IP 服�斩家�有相��程度的了才行�s您必�知道一���B�的建立�^程是怎�拥末o每一��封包�幼魇窃��囊欢怂偷搅硪欢说摹D�除了要知道每一��封包的�碓春湍康奈恢珐o�要知道它��的�碓床嚎诤湍康牟嚎凇6�且�o我��不要忘�了�s所有�B�都是�p向的�o您除了要照��目�舳说剿欧�器端的�求�o也要照��乃欧�器到客�舳说幕��。下面�o�我��看一看火��的�O定如何影� FTP 的�\作的( FTP 是一��非常�典的 NAT/Firewall �O定�例)。
首先�o我��要知道 FTP 的�B�模式有�煞N�s主�幽J�( active )和被�幽J�( passive )。要了解�@���模式的不同�o得要了解 FTP 的�B�是怎�咏�立的�s
在正常模式下�s
在 passive 模式下�s
我��都知道�s火��的保�o�ο笫�炔烤W路的 client 主�C。防火���榱�醯粢恍�碜酝饷娴奈kU�幼鳗o通常��限制那些�碜酝饷娴闹�舆B��o也就是�� SYN �嘶`的封包(��⒖� Three-Way Handshake 的�^程)。在�@�拥那�r下�oiptables 或�S有�@�拥囊���O定�s
iptables -I INPUT -i ppp0 -p TCP --syn -j DROP iptables -I FORWARD -i ppp0 -p TCP ! --syn -j ACCEPT |
在第二行中的那�� " ! " 就是 NOT 的意思�o" ! --syn " 就是 NOT SYN 之意�o也就是只允�S非主�舆B�的 TCP 封包�耐獠拷缑孢M入�o�@和第一行的意思一�萤s不接受�碜酝饷嬷�咏�立的�B�。
Tips�s前面我��已��f�^我��可以��鞯� NAT 外部界面的�B��D到 DMZ �e面去。假如我��有�@�拥囊�求�o�s�^�m沿用前面那行�� " ! -y " 的��t的��o外面的客�糁�C就�o�慕�立�B��磉B接我��的服�罩�C了。但我��又不想取消它�o以免危害到其它非 DMZ 的�炔烤W路。
��得 iptables 的行�榱��T�岍s它��自上而下的�Ρ纫��t�o找到符合的就不再往下找了。根���@�拥奶匦冤o我��可以�� NAT 外部界面�M入的某些�B��o在那行 syn �^�V��t之前 ACCEPT �M�怼2贿^�o就要非常小心�e漏了必要的限制元素�o有可能的��o�M您想象把��t�O得�烂苡�烂馨伞�
假�O我���@�r候有一��在防火��之後的 FTP client 要��D�B接外面的 FTP server 。在正常模式下�o(第 3 步)�碜� server 的���通道之建立�求就��被�跸�愆o�@���е���通道�o�慕�立。�m然您可以 login �M�h端的 FTP 伺服器�o但如果�入 ls 後�o�s看不到�Y果的。FTP 的 login �c ls 是透�^命令通道�M行的�o因�槊�令通道的建立�K�]���}�o所以 server 可以收到命令。但 ls 的�Y果�_需要透�^���通道送回�愆o然而���通道�s不能建立建立。所以 server 在�魉褪�♂岍o再用命令通道告�V您�s “Can't build data connection: Connection refused.”
明白了�t是否解�了困�@您心目中以久的疑�F呢�t ^_^
好了�o如果用 Passive 模式又��如何呢�t�我��回去看看正常模式的第 3 步和 Passive 模式的第 4 步�o然後�z查它���M出防火��的方向�o以及防火��如何�理 SYN 封包就知道了。我不想直接把答案告�V您。自己要懂得思考�o才��有�M步�u不是�岍t
Tips�s不�^�o在 iptables 中有一�� RELATED 的 TCP �B���B�嘶`�o可以� ftp-data �B��利建立�s
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT |
但是�o我必�再指出�s上面�的是基於一�� routing 健全的情形下。如果用 NAT 的��o封包的位址���有所改�。�o�用正常模式或 Passive 模式�oserver 都看不到 client 的位址�oserver只看到 NAT 的位址而已。故此�o就算您取消了入站封包的 SYN 限制�o在正常模式下�碜� server 的���通道�B��o封包只��送到 NAT 主�C的外面界面那�e。但���}是 NAT �K�]有��B�的 NAT ���o也就不���⑿薷姆獍� socket �⒅�送回�e面的客�糁�C。除非�o您能��� client 端做 ftp-data 的 DNAT 。然而�o因�� client 所使用的 ftp-data socket 是�S�C挑�x的一��大於 1024 的 port �o您事先�]�k法在 NAT 上知道 ftp client 用哪�� socket 的。然而�o更重要的���}在於�sclient 在命令通道中所使用的 port 命令�o其 IP 是原有的�炔课恢珐p而 NAT 根本不���⒅�修改�^�愆u所以 server 在建立 ftp-data �B�的�r候�o根本就不可能路由到正�_的位址�u
那是否有�k法解�Q呢�t��然有的啦~~ 使用 passive 模式就可以了�u�槭颤N�t不知道您的�X筋是否能�D得�^�砟丞t 那是因�椹s在 passive 模式下面�o所有�B�的建立方向都是��炔康� client 送往外面的 server 的�r因�檫@���B�需要做 SNAT�o那�N�oNAT 的 table 中有�@�� socket �D�Q的��了�r然後�� server 所送回的回��封包�o理所��然也能�利完成 socket 的�原工作。
明白了�t或�S�o您又�����s那如果在 NAT 情�r下�o不使用 passive 模式呢�t是否�有�k法解�Q ftp ���通道的���}�t
搭配核心模�M
呵~~ 就算不用 passive 也可以啦�u只要能� NAT 抓到 ftp client 在命令通道中送出的 port 命令�o�K修改原本在封包 body 中的 socket �o那就可以‘�明的’在外部界面上建立 DNAT socket�o以等待 server 那�的���通道�B��求了。�@工作�o通常是由核心模�M�硗瓿傻末o在 2.4.x 核心上�o您只需�绦腥缦旅�令就可以了�s
modprobe ip_conntrack_ftp modprobe ip_nat_ftp |
Tips�s在 2.2.x 核心中所使用的模�M名�Q�� ip_masq_ftp �o不�^�o它只能跟 ipchains 配合使用。就算您在 2.4.x 核心中能�蜉d入 ipchains 模�M�o但因�� 2.4.x 核心的 ip_nat_ftp �K不能�c ipchains 合作�o所以也就�]�k法了。假如您有�d趣知道 ip_masq_ftp �@��模�M��做些什�N�t��⒖季W友 常��I 兄的精解�s
常��I |
文章�m然是描述 ip_masq_ftp 模�M的�o但其中的原理和 ip_nat_ftp 是一�拥摹�
事��上�oFTP 服�盏脑O定�o在防火���c NAT �O�中非常具有代表性。如果要�y�自己�� NAT 的�O定是否及格�o用 FTP 服��砜甲约壕�α恕H绻�您有�d趣�o不妨做做下面�@����}哦�s
NAT 的 FTP �O定命�}
�a充�s在�^往的�y�中�o我曾�作�^如此猜�y�s
如果 server 和 client �啥硕几髯远阍� NAT 背後�o�o�用 ipchains 和 iptalbes 都�o法用 passive 模式�斫�立 data channel。 |
然而�o在最近的�y�中�o我�l�F netfilter 所��淼� ip_conntrack_ftp 以及 ip_nat_ftp 模�M 已�能�虺晒Φ倪M行 server 端�c client 端的�B��D�Q。
�Q而言之�o我之前所提到的�^�V�s“client �c server �p方都在 NAT 之後是否能�B��t”�F在已�不是���}了�u��在非常感�x netfilter 的工作者��。
p.s. 我所�y�的核心�� 2.4.16 以及 iptables-1.2.1a-1 。
如果您在�⒖即鸢钢�前能�蚋愣� FTP 服�盏脑��o那基本上您就及格了。否�t�o我�衲��是�e急著碰 NAT 的�O定。
除了 FTP 之外�o�有�S多其它服�粘淌僵o也有�似的‘多通道�B�’的特性�o例如 netmeeting �prealaudio�p�W路游�颟p等等。因�檫@些程式大都�]有所�^的 passive 模式�o所以�o只能靠相�P的模�M�兔α恕H绻�您有相�P���}�o不妨到下面�W站找找�s
http://www.tsmservices.com/masq/
�@���W站有�S多奇奇怪怪的 IP �窝b技巧�c模�M�o相信���有您感�d趣的�|西。