Skocz do zawartości

Dziwny Problem Z Ftp


MrReal

Rekomendowane odpowiedzi

Sytuacja jest następująca: Mam serwer NAT (FC2 - łącze DSL) na którym zrobiłem przekierowanie z portu 6001 na port 21 na serwer ftp, który działa na komputerze w LANie (Windows - CesarFTP):

$IPT -A FORWARD -i eth1 -p tcp --dport 6001 -d 10.10.0.1 -j ACCEPT
$IPT -t nat -A PREROUTING -p tcp --dport 6001 -j DNAT --to 10.10.0.1:21 -i eth1

Problem polega na tym, że nie każdy może się połączyć z ftp. Tzn niektóre osoby nie mają problemów podczas gdy inni nie mogą się połączyć.

Oto log z ftp:

Thu 28 Apr 2005 [20:55:54] 000001 USER anonymous
Thu 28 Apr 2005 [20:55:54] 000001 User Public connected, login : anonymous
Thu 28 Apr 2005 [20:55:54] 000001 331 User login OK, waiting for password
Thu 28 Apr 2005 [20:55:54] 000001 PASS  **********
Thu 28 Apr 2005 [20:55:54] 000001 User Public logged in successfully
Thu 28 Apr 2005 [20:55:54] 000001 230 User password OK, CesarFTP server ready
Thu 28 Apr 2005 [20:55:54] 000001 SYST
Thu 28 Apr 2005 [20:55:54] 000001 215 Microsoft Windows
Thu 28 Apr 2005 [20:55:54] 000001 FEAT
Thu 28 Apr 2005 [20:55:54] 000001 500 Syntax error or unknown command
Thu 28 Apr 2005 [20:55:54] 000001 PWD
Thu 28 Apr 2005 [20:55:54] 000001 257 "/"
Thu 28 Apr 2005 [20:55:54] 000001 TYPE A
Thu 28 Apr 2005 [20:55:54] 000001 200 Type successfully set
Thu 28 Apr 2005 [20:55:54] 000001 PORT 192,168,1,2,9,18
Thu 28 Apr 2005 [20:55:54] 000001 200 command successfully executed
Thu 28 Apr 2005 [20:55:55] 000001 LIST
Thu 28 Apr 2005 [20:55:55] 000001 150 Data connection created for directory listing
Thu 28 Apr 2005 [21:00:15] 000001 PORT 192,168,1,2,9,30
Thu 28 Apr 2005 [21:00:15] 000001 200 command successfully executed
Thu 28 Apr 2005 [21:00:15] 000001 LIST
Thu 28 Apr 2005 [21:00:15] 000001 150 Data connection created for directory listing
Thu 28 Apr 2005 [21:00:49] 000001 PORT 192,168,1,2,9,31
Thu 28 Apr 2005 [21:00:49] 000001 200 command successfully executed
Thu 28 Apr 2005 [21:00:49] 000001 LIST
Thu 28 Apr 2005 [21:00:49] 000001 150 Data connection created for directory listing

User się załogował jednak nie może uzyskać listy katalogów. Zawsze w momencie "Data connection created for directory listing" następuje zwis, który kończy się po przekroczeniu timelimit przez klienta po czym zostaje on odłączny od serwera.

 

Zauważyłem, że ten problem mają szczególnie osoby łączące się z Neostrady (jednak nie wszystkie). Dziwny jest fakt że ja mogę się bez problemu łączyć z serwerem ftp postawionym u kolegi który ma neo, ale on nie może się połączyć ze mną.

Nie wiem co się dzieje. Myślałem że może trzeba odblokować jakieś dodatkowe porty, ale nie rozumiem dlaczego jedni łączą się bez problemu a inni nie.

 

Przeprowadzałem testy z różnymi serwerami ftp i różnymi klientami jednak ciągle powtarzał się ten sam problem.

 

Proszę o pomoc w wyjaśnieniu tego zjawiska.

Pozdrawiam :)

Odnośnik do komentarza
Udostępnij na innych stronach

Załaduj moduły iptables chyba że masz skompilowane na stałe w kernelu

modprobe ip_tables
#ip_conntrack umozliwia sledzenie polaczen
modprobe ip_conntrack
# Raczej wymagane dla passive ftp
modprobe ip_conntrack_ftp 
# wymagane przy przekierowaniu serwera ftp z LAN
modprobe ip_nat_ftp

 

I dodaj odpowiednie reguły IPT

    # Akceptujemy pakiety NEW na naszym porcie 21(ftp) tcp. 
    # Oraz dla otworzenia kanalu danych w aktiv port 20 tcp.
    iptables -A INPUT  -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A INPUT  -p tcp --dport 20 -m state --state NEW -j ACCEPT 

 

Pamiętaj że FTP łączy sie na porcie 21 a 20 przesyła dane !!! wiec jak przekierowałeś i chcesz przesyłać na aktywnym połączeniu bedzie potrzebne odblokowanie portu 20.

 

Dodatkowo zrób przekierowanie bo tego tu nie ująłem.

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

najłatwiej przekierować port 21, czyli tak:

iptables -t nat -I PREROUTING -p tcp --dport 21 -i eth1 -j DNAT --to 10.10.0.1:21

z przekierowaniem innych portów zawsze pojawiał się problem, (ftp korzysta z portu 21 i 20 - jako active)

 

przy trybie pasive również wykorzystuje 2 porty, więc jeśli koniecznie chcesz korzystać z portu 6001 czyli tak jak to zrobiłeś, to ustaw swojego klienia ftp w tryb passive i wszystko ruszy

(błąd, który opisujesz polega właśnie na tym, że Twój klient ftp ustawiony jest jako active i oczekuje nawiązania połączenia przez serwer z portu 20, na porcie 21 przekazywane są tylko komendy, jednak Twój serwer nie nawiązuje tego połączenia, jeśli przestawisz klienta ftp na tryb pasive to sam otworzy drugie połączenie dla danych)

 

zobacz tutaj: http://www.slacksite.com/other/ftp.html

 

-------

P.S.1

testowałem te regułki:

$IPT -A FORWARD -i eth1 -p tcp --dport 6001 -d 10.10.0.1 -j ACCEPT
$IPT -t nat -A PREROUTING -p tcp --dport 6001 -j DNAT --to 10.10.0.1:21 -i eth1

działają po przestawieniu klienta na passive, jeśli tego nie uczynisz nawiążesz tylko połączenie i będziesz mógl wydać komendy ale nie dostaniesz odpowiedzi i po pewnym czasie zostaniesz rozłączony

 

P.S.2

mam załadowane moduły do śledzenia połączeń (zobacz post ATI)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...