You are on page 1of 19

Serwer

FTP
dr inż. Andrzej Chmielewski
Wydział Informatyki
Politechniki Białostockiej
Serwer FTP

FTP – File Transfer Protocol (RFC 959)

Architektura: klient-serwer.

Serwer FTP działa na protokole TCP oraz UDP na dwóch portach:


20 oraz 21.

Port 21 (TCP) jest wykorzystywany do przesyłania poleceń.

Port 20 (UDP) jest wykorzystywany do przesyłania danych (nie


zawsze!)

FTP
Tryby połączeń

Serwer FTP może działać w jednym z trybów: pasywnym lub


aktywnym.

Różnica pomiędzy trybem pasywnym oraz aktywnym polega na


tym kto jest inicjatorem połączenia.

W trybie aktywnym klient inicjalizuje połączenie kontrolne, a


serwer inicjuje połączenie do przesyłania danych.

W trybie pasywnym klient inicjalizuje obydwa połączenia.

FTP
Tryby połączeń

Tryb aktywny

W trybie aktywnym klient rozpoczyna sesję FTP.


Po stronie klienta, jak w przypadku każdego połączenia, jest losowany port
z zakresu powyżej 1023, z którego inicjalizowane jest połączenie kontrolne
na porcie 21 serwera FTP. Klient wysyła adres IP wraz z portem, na którym
będzie oczekiwał na połączenie w celu przesłania danych. Zwykle port do
przesyłania danych po stronie klienta jest o 1 większy od tego
wykorzystanego do połączenia kontrolnego. Serwer wysyła flagę ACK do
klienta na porcie kontrolnym i aktywnie otwiera połączenie danych z portu
20 do klienta. Klient odsyła flagę ACK do serwera na połączeniu danych.

Przykład:

klient łączy się z serwerem z portu 1050 na port 21

klient wysyła port 1051 (1050 + 1) do serwera, który odpowiada flagą
ACK na połączeniu kontrolnym
● FTP
serwer otwiera połączenie danych z portu 20 na port 1051 klienta

klient wysyła flagę ACK na połączeniu danych
Tryby połączeń

Tryb pasywny

W trybie pasywnym klient rozpoczyna sesję FTP łącząc się ze swojego


losowo wybranego, nieuprzywilejowanego portu (>1023) na port 21
serwera. Klient wysyła komendę PASV do serwera, a w odpowiedzi
zwrotnej otrzymuje adres IP oraz numer portu (>1023, a nie 20), na
którym serwer zaczyna pasywnie nasłuchiwać. Klient otwiera połączenie
danych, z portu o 1 większego od portu wykorzystywanego do połączenia
kontrolnego, na port przekazany przez serwer. Serwer wysyła flagę ACK do
klienta na połączeniu danych.

Przykład trybu pasywnego:


Klient otwiera połączenie z portu 1050 na port 21
Klient wysyła polecenie PASV do serwera na połączeniu kontrolnym
Serwer odsyła na połączeniu kontrolnym PORT 1234 i zaczyna na nim
nasłuchiwać
FTP
Klient otwiera połączenie danych ze swojego portu 1051 na port 1234.
Serwer przesyła flagę ACK na połączeniu danych.
Tryby połączeń

Tryb pasywny i aktywny a firewall

Tryb aktywny Tryb pasywny


FTP
Tryby połączeń

Tryb pasywny i aktywny a firewall

W przypadku, gdy klient jest schowany za firewallem i nie jest w stanie


akceptować przychodzących połączeń TCP, jedynie tryb pasywny może
być użyty.

W tym celu należy załadować moduł ip_conntrack_ftp


# modprobe ip_conntrack_ftp

oraz zaakceptować połączenia w stanie „RELATED”.

FTP
Firewall z FTP
Przykład firewalla
http://www.cyberciti.biz/faq/iptables-passive-ftp-is-not-working/)
#!/bin/bash
# Sample iptables shell script to deal with FTP server issues including
# active and passive FTP connections issues.
IPT=/sbin/iptables
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp

# Setting default filter policy


$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT

# Allow FTP connections @ port 21


$IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

# Allow Active FTP Connections


$IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

# Allow Passive FTP Connections


$IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT FTP
$IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

### Add the rest of rules below ###


Serwery FTP

Najpopularniejsze otwartoźródłowe serwery FTP

FTP
Serwer vsFTPd

https://security.appspot.com/vsftpd.html

Instalacja
# apt-get install vsftpd
# yum install vsftpd

Po instalacji serwer jest skonfigurowany do pracy ze wszystkimi


użytkownikami zdefiniowanymi w systemie.

Pierwszy test:
$ ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 3.0.2)
Name (127.0.0.1:student):
331 Please specify the password.
Password:
230 Login successful. FTP
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.
Serwer vsFTPd

Plik konfiguracyjny: /etc/vsftpd.conf

Wybrane opcje z pliku konfiguracyjnego:

# Wartość YES oznacza, że serwer będzie działał jako


stanalone, NO – pod kontrolą usługi xinted
listen=YES

# Zezwolenie na logowanie na konta systemowe; domyślnie YES


local_enable=YES

# Zezwolenia na zapisywanie danych na serwerze


#write_enable=YES

# Domyślna maska dla użytkowników lokalnych wynosi 077.


Sugerowana wartość to 022 w przypadku serwerów FTP.
#local_umask=022
FTP
Serwer vsFTPd

Plik konfiguracyjny: /etc/vsftpd.conf

Wybrane opcje z pliku konfiguracyjnego związane z użytkownikiem


anonymous:

# Zezwolenia na logowanie na konto anonymous; domyślnie NO


anonymous_enable=NO

# W połączeniu z write_enable directive zezwolenie na upload


przez użytkowników anonymous; domyślnie NO.
#anon_upload_enable=YES

# W połączeniu z write_enable directive zezwolenie na


tworzenie nowych katalogów przez użytkownika anonymous
wewnątrz katalogu do którego nastąpiło logowanie; (domyślnie
NO)
#anon_mkdir_write_enable=YES
FTP

# Ścieżka do katalogu, który uzyska po zalogowaniu


#anon_root='/var/ftp'
Serwer vsFTPd

Plik konfiguracyjny: /etc/vsftpd.conf

Wybrane opcje z pliku konfiguracyjnego związane z użytkownikiem


anonymous:

# Nazwa użytkownika lokalnego (zawartego w /etc/passwd)


używanego w przypadku anonymous. Katalog domowy tego
użytkownika, będzie korzeniem drzewa po zalogowaniu się;
domyślnie: ftp
#ftp_username=ftp

# Określa, czy użytkownik anonymous nie będzie pytany o hasło;


domyślnie NO
#no_anon_password=NO

FTP
Serwer vsFTPd

Plik konfiguracyjny: /etc/vsftpd.conf

Wybrane opcje z pliku konfiguracyjnego związane z siecią:

# Maksymalny czas w jakim klient w trybie pasywnym powinien


nawiązać połącznie.
#accept_timeout=60

# Maksymalny współczynnik transferu (bytes per second) dla


użytkowników anonymous; domyślnie 0, co oznacza brak limitu
#anon_max_rate=0

# Maksymalny czas (w sekundach) w jakim klient w trybie


aktywnym musi odpowiedzić na połączeniu danych
#connect_timeout=60

# Czas bezczynności po stronie klienta, po którym połączenie


FTP
zostanie zamknięte
#data_connection_timeout=300
Serwer vsFTPd

Plik konfiguracyjny: /etc/vsftpd.conf

Wybrane opcje z pliku konfiguracyjnego związane z siecią:

# Port, na którym serwer będzie nasłuchiwał


#listen_port=21

# Maksymalny współczynnik transferu (bytes per second) dla


użytkowników lokalnych; domyślnie 0, co oznacza brak limitu
#local_max_rate=0

# Maksymalna liczba jednoczesnych połączeń; dodatkowe


połączenia spowodują wygenerowanie błędu; domyślnie 0, co
oznacza brak limitu
#max_clients=0

# Maksymalna liczba jednoczesnych połączeń z jednego adresu


FTP
IP; dodatkowe połączenia spowodują wygenerowanie błędu;
domyślnie 0, co oznacza brak limitu
#max_per_ip=0
Serwer vsFTPd

Plik konfiguracyjny: /etc/vsftpd.conf

Wybrane opcje z pliku konfiguracyjnego związane z siecią:

# Wartość YES odblokowuje połączenia w trybie pasywnym


#pasv_enable=YES

# Zmienne służące do określenia minimalnego oraz maksymalnego


numeru portu wysyłanych do klientów w trybie pasywnym. Użycie
zakresu ułatwia utworzenie reguł w firewallu; wartości
domyślne 0 ustalają zakres na 1024-65535
#pasv_max_port=0
#pasv_min_port=0

# Wartość YES odblokowuje tryb aktywny; domyślnie NO


#port_enable=NO
FTP
Serwer FTP

Wybrane polecenia

pwd – bieżący katalog


ls lub dir – wylistowanie bieżącego katalogu
cd – zmiana katalogu
get nazwa_pliku – pobranie pliku z serwera do katalogu lokalnego
get nazwa_pliku nowa_nazwa - pobranie pliku z serwera do katalogu lokalnego
połączana ze zmianą jego nazwy
mget plik1 plik2 plik3 – jednoczesne pobranie wielu plików z serwera
put nazwa_pliku – skopiowanie pliku na serwer do katalogu bieżącego
put nazwa_pliku nowa_nazwa – skopiowanie pliku na serwer do katalogu
bieżącego połączone ze zmianą jego nazwy
mput plik1 plik2 plik3– jednoczesne skopiowania na serwer wielu plików
delete nazwa_pliku – skasowanie pliku na serwerze
mdelete plik1 plik2 plik3 – jednoczesne skasowanie wielu plików na
serwerze
FTP
passive – zmiana na tryb pasywny
active – zmiana na tryb aktywny
Serwer FTP

Wybrane polecenia

ascii lub asc - ustanowienie tekstowego trybu transmisji


binary lub bin - ustanowienie binarnego trybu transmisji
hash lub ha - włączenie/wyłączenie wyświetlania znaków; po przesłaniu każdego
kilobajta danych
prompt- włączenie/wyłączenie wyświetlania zapytań podczas transmisji wielu plików

quit lub disconnect – opuszczenia serwera


help lub ? - lista dostępnych poleceń

FTP
Serwer FTP

Fragment przykładowej sesji

$ ftp 10.64.104.252
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:student):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-rw-r-- 1 1000 1000 0 Feb 18 04:55 test
226 Directory send OK.
ftp> passive FTP
Passive mode on.
ftp> get test
…..

You might also like