Pro přenos dat se často využívá protokol FTP neboli File Transfer Protocol, který je vhodný pro různé situace.
Existují různé varianty FTP, které nabízejí vyšší úroveň zabezpečení, jako jsou FTPS a SFTP. Tyto varianty se liší v detailech, jako je způsob přenosu dat, úroveň zabezpečení komunikace a také v požadavcích na nastavení firewallu.
Pochopení fungování těchto protokolů a rozdílů mezi nimi vám umožní vybrat ten nejvhodnější pro vaše specifické potřeby.
FTP
Protokol FTP je starší protokol pro přenos souborů, jehož počátky sahají až do RFC 114. Později byl standardizován v RFC 959, který se používá dodnes.
FTP funguje na principu dvou kanálů: jeden pro příkazy a druhý pro data. Proto vyžaduje dva porty – jeden pro příkazový kanál a jeden pro datový kanál.
Příkazový kanál používá port 21, na kterém přijímá připojení od klientů a zpracovává příkazy. Tento kanál zůstává otevřený po celou dobu trvání relace FTP, dokud klient neodešle příkaz QUIT nebo dokud server spojení neukončí z důvodu nečinnosti či jiné události.
Datový kanál využívá dočasný port, který se otevírá na serveru (pasivní režim) nebo na klientovi (aktivní režim) na vyžádání. Tento kanál slouží pro sdílení skutečných dat mezi serverem a klientem, jako jsou výpisy adresářů a přenosy souborů.
Na rozdíl od příkazového kanálu zůstává datový kanál otevřený pouze po dobu přenosu souboru a po jeho dokončení se uzavře. Pro současný přenos více souborů nebo výpisů adresářů je potřeba více portů datových kanálů.
FTP je ze své podstaty nezabezpečený protokol, protože jak příkazový, tak datový kanál přenášejí data v nešifrované podobě. To je činí zranitelnými vůči útokům typu man-in-the-middle, kdy je komunikace odposlouchávána třetí stranou.
Jak již bylo zmíněno, FTP vyžaduje pro příkazový kanál příchozí spojení na portu 21/tcp na straně serveru. Pro přenos souborů a výpisy adresářů se používá pasivní rozsah portů, který umožňuje příchozí spojení. Nastavení tohoto rozsahu se liší v závislosti na použitém FTP serveru, proto je nutné nahlédnout do dokumentace. Na straně klienta by mělo být povoleno odchozí spojení na portu 21/tcp a také pasivní rozsah portů definovaný na serveru.
Ověřování v FTP
Ověřovací informace pro FTP se přenášejí přes příkazový kanál během úvodního navázání spojení. FTP může používat pro ověření uživatelské jméno a heslo, nebo může být anonymní, aby se k serveru mohl připojit a přistupovat kdokoliv.
Aktivní a pasivní režim FTP
FTP pro navázání spojení používá aktivní nebo pasivní režim.
V aktivním režimu se uživatel připojí z náhodného portu na FTP klientovi k portu 21/tcp na serveru a odešle příkaz PORT s uvedením klientského portu, ke kterému se má server připojit. Tento port se použije pro datový kanál.
Server se poté připojí z portu 20/tcp na klientský port určený klientem pomocí příkazu PORT. Tento datový kanál se následně používá pro přenos souborů mezi serverem a klientem.
V pasivním režimu se klient připojí z náhodného portu z FTP klienta k portu 21/tcp na serveru a odešle příkaz PASV. Server poté odpoví náhodným portem, který se má použít pro datový kanál. Klient pak použije další náhodný port pro připojení k portu, na který odpověděl server. Toto datové spojení se používá pro přenos souborů mezi serverem a klientem.
V aktivním režimu tedy počáteční požadavek na spojení iniciuje klient, zatímco požadavek na datový kanál iniciuje server.
V pasivním režimu naopak jsou jak počáteční požadavky na spojení, tak i následné požadavky na datový kanál iniciovány klientem směrem k serveru. Tento rozdíl ovlivňuje, jak firewall povoluje nebo blokuje požadavky FTP v závislosti na směru příchozího/odchozího spojení.
FTPS
I když jste ochotni podstoupit rizika spojená s nešifrovaným přenosem dat v FTP a útoky typu man-in-the-middle, často jste nuceni používat bezpečnější alternativy, jako jsou FTPS a SFTP. Tyto protokoly poskytují mnohem vyšší úroveň zabezpečení.
V 90. letech minulého století, s rostoucími nároky na zabezpečení, společnost Netscape vyvinula protokol SSL (Secure Sockets Layer, dnes známý jako TLS) pro ochranu síťové komunikace. SSL bylo následně aplikováno i na FTP, čímž vznikl FTPS neboli File Transfer Protocol Secure. FTPS nebo FTP/S obvykle funguje na portu 990/tcp, ale lze se s ním setkat i na portu 21/tcp. Pro datový kanál se často používá port 989/tcp. Pokud se pro příkazový port používá 21/tcp, očekává se, že datový port bude 20/tcp.
Podobně jako FTP, i FTPS pro komunikaci využívá dva kanály: příkazový a datový kanál. V FTPS je možné šifrovat pouze datový kanál nebo pro vyšší zabezpečení i příkazový kanál.
FTPS, stejně jako FTP, používá pro příkazový a datový kanál více portů. Port 21/tcp se tedy používá pro úvodní spojení a přenos ověřovacích informací. Následně jsou pro každý požadavek klienta na přenos souboru nebo výpis adresáře potřeba různé porty pro datové kanály. Proto je potřeba ve firewallu povolit řadu portů.
Ověřování v FTPS
Ověřování v FTPS probíhá pomocí uživatelského jména a hesla a také za použití certifikátu serveru pro šifrování. Když se FTPS klient připojí k serveru, ověří, zda je certifikát serveru důvěryhodný, než může pokračovat ve spojení. Tento certifikát může vyžadovat jak klient, tak server.
SFTP
Na rozdíl od FTP a FTPS je SFTP (SSH File Transfer Protocol) zcela odlišný protokol postavený na SSH (Secure Shell). SFTP standardně funguje na portu 22/tcp, stejně jako SSH, ale je možné ho nakonfigurovat tak, aby na serveru používal libovolný volný port.
SFTP je zabezpečená varianta FTP, která pro přenos a příjem souborů používá protokol SSH. Jelikož je SSH plně šifrovaný, je SFTP robustní a bezpečný způsob přenosu souborů přes síť.
SFTP na rozdíl od FTP a FTPS používá pro přenos příkazů a datový provoz pouze jeden komunikační kanál, přičemž veškerá data jsou přenášena v šifrované podobě spolu s počátečním ověřením.
Ověřování v SFTP
Ověření v SFTP se provádí pomocí uživatelského jména a hesla, ale na rozdíl od FTP jsou všechny informace, včetně ověřovacích údajů, přenášeny šifrovaně.
SFTP také podporuje ověřování pomocí páru SSH klíčů, což je kombinace soukromého a veřejného klíče. Klient poskytne soukromý klíč pro daného uživatele a server musí mít odpovídající veřejný klíč, aby bylo ověření úspěšné. Tato metoda je bezpečnější než ověřování pomocí uživatelského jména a hesla. Je také možné ověřovat stejného uživatele heslem i pomocí SSH klíčů, pokud jsou obě metody na serveru SFTP nakonfigurovány.
Shrnutí
Tento článek shrnuje základní funkce různých populárních protokolů pro přenos souborů, konkrétně FTP, FTPS a SFTP. Zdůrazňuje klíčové a jemné rozdíly mezi těmito protokoly. Popisuje porty, které je potřeba povolit ve firewallu pro zprovoznění serveru FTP/FTPS/SFTP. Článek také zdůrazňuje potřebu přechodu na bezpečnější protokoly, jako jsou FTPS a SFTP.
Pokud zde hovořím o FTP, mám na mysli všechny diskutované protokoly v tomto článku. FTP je totiž protokol starý desítky let a i jeho novější zabezpečené verze se v běžné praxi často označují jako FTP namísto jejich specifických názvů.
Mohlo by vás také zajímat se seznámit s nejlepším softwarem pro FTP servery a FTP/SFTP klienty.