這兩天在給客戶安裝服務(wù)器時(shí)也順便給他們使用iptables,不用不知道,一用才發(fā)現(xiàn)iptables還有很多東西可以學(xué)的,比如開放ftp。
iptables
的filter表的INPUT鏈的默認(rèn)策略設(shè)為了DROP,其余的鏈均為ACCEPT。
該服務(wù)器即要作ftp服務(wù)器,也要連上別的ftp服務(wù)器。即是說要把源端口和目的端口都開放21才行:
iptables -A INPUT -p tcp
–sport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 21 -j
ACCEPT
開了21端口就行了嗎?不是的。先說說ftp協(xié)議。ftp協(xié)議是一個(gè)簡(jiǎn)單、保密性差(明碼)的tcp協(xié)議,它的工作原理是客戶端先連服務(wù)器端
的21端口,然后經(jīng)過3步的握手以后建立了一條連接。要注意的是,這條連接只可以用來傳輸ftp的命令,只有這條連接的話是什么都傳不了的,就算是用
“ls”命令來查看文件也不行。
建立了命令的連接以后,服務(wù)器端就要建立一條數(shù)據(jù)的連接。數(shù)據(jù)的連接又分為主動(dòng)模式(port)和被動(dòng)模式(passive)。ftp默認(rèn)是被動(dòng)
模式,主動(dòng)和被動(dòng)之間使用”pass”命令切換。主動(dòng)模式通過20端口與客戶端相連,而被動(dòng)模式卻使用1024以后的端口與客戶端相連。由于1024以后
的端口是隨機(jī)分配的,所以在被動(dòng)模式下我們是不知道服務(wù)端是使用什么端口與客戶端連接的。也就是說,我們是不知道iptables要開放什么端口。
開始我使用的是
iptables
-A input -p tcp –sport 1024: –dport 1024: -j
ACCEPT
來讓ftp建立被動(dòng)連接的。但覺得如果這樣的話,那就等于把所以p2p的連接都開放了,不安全。
于是在CU上問人,終于找到了解決的方法:
1、加載模塊。
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe
ip_conntrack_ftp
2,加上一條規(guī)則:
處于server
iptables -A INPUT -m state –state ESTABLISHED,RELATED
-j ACCEPT處于clientiptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j
ACCEPT
允許連接保持的被動(dòng)訪問。
其實(shí)這樣在重啟iptables的時(shí)候所需的模塊又不見了,通過不懈的努力終于找到了最終的解決方法,編輯/etc/sysconfig/iptables-config:
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"
把需要加載的模塊加入,無論重啟系統(tǒng)還是iptables但ftp模塊始終還是加載的。
搞定就這樣哈哈哈,希望能在以后幫助大家來解決ftp上的問題。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u1/51714/showart_423414.html