TCP Wrapper je open source hostitelský systém ACL (Access Control List), který se používá k omezení síťových služeb TCP na základě názvu hostitele, IP adresy, síťové adresy a tak dále. Rozhoduje, kterému hostiteli by měl být povolen přístup ke konkrétní síťové službě. TCP Wrapper byl vyvinut holandským programátorem a fyzikem Wietse Zweitze Venema v roce 1990 na Eindhoven University of Technology. Udržoval jej do roku 1995 a poté jej vydal pod licencí BSD v roce 2001. V tomto stručném průvodci vysvětlím, jak omezit přístup k linuxovým serverům pomocí TCP Wrappers.
Mějte prosím na paměti, že TCP Wrapper není úplnou náhradou za správně nakonfigurovaný firewall . Je to jen cenný doplněk ke zvýšení zabezpečení vašeho linuxového serveru. Je doporučeno jej používat ve spojení s plně nakonfigurovaným firewallem a dalšími bezpečnostními mechanismy a nástroji.
Instalace TCP Wrappers
TCP Wrappers je k dispozici v oficiálních repozitářích většiny operačních systémů Linux.
V závislosti na distribuci Linuxu, kterou používáte, ji lze nainstalovat, jak je uvedeno níže.
Na systémech založených na Arch:
$ sudo pacman -S tcp_wrappers
V systémech založených na YUM:
$ sudo yum install tcp_wrappers
Na systémech založených na APT:
$ sudo apt-get install tcp_wrappers
Na systémech SUSE/openSUSE:
$ sudo zypper in tcp_wrappers
Omezit přístup k linuxovým serverům pomocí TCP Wrapperů
Konfigurace
TCP Wrappers implementuje řízení přístupu pomocí dvou konfiguračních souborů:/etc/hosts.allow a /etc/hosts.deny . Tyto dva soubory přístupového seznamu rozhodují o tom, zda konkrétní klienti mají nebo nemají povolen přístup k vašemu linuxovému serveru.
Soubor /etc/hosts.allow
Tento soubor obsahuje seznam povolených nebo nepovolených hostitelů nebo sítí. To znamená, že můžeme povolit nebo zakázat připojení k síťovým službám definováním pravidel přístupu v tomto souboru.
Soubor /etc/hosts.deny
Tento soubor obsahuje seznam hostitelů nebo sítí, které nemají povolen přístup k vašemu serveru Linux. Pravidla přístupu v tomto souboru lze také nastavit v /etc/hosts.allow s 'deny' možnost.
Typická syntaxe pro definování pravidla přístupu je:
daemon_list : client_list : option : option ...
Kde,
- seznam_démonů - Název síťové služby, jako je SSH, FTP, Portmap atd.
- seznam_klientů – Čárkami oddělený seznam platných názvů hostitelů, IP adres nebo síťových adres.
- možnosti – Volitelná akce, která určuje, co se má udělat, kdykoli dojde ke shodě pravidla.
Syntaxe je stejná pro oba soubory.
Pravidla k zapamatování
Před použitím TCP Wrapperů musíte znát následující důležitá pravidla. Mějte prosím na paměti, že TCP Wrapper konzultuje pouze tyto dva soubory (hosts.allow a hosts.deny).
- Nejprve se použijí pravidla přístupu v souboru /etc/hosts.allow. Mají přednost před pravidly v souboru /etc/hosts.deny. Pokud je tedy přístup ke službě povolen v /etc/hosts.allow soubor a pravidlo zakazující přístup ke stejné službě v /etc/hosts.deny je ignorováno.
- V obou souborech (hosts.allow a hosts.deny) je povoleno pouze jedno pravidlo na službu.
- Pořadí pravidel je velmi důležité. Zohledněno bude pouze první párovací pravidlo pro danou službu. Totéž platí pro oba soubory.
- Pokud v žádném ze souborů neexistují žádná odpovídající pravidla pro službu nebo pokud žádný soubor neexistuje, bude přístup ke službě udělen všem vzdáleným hostitelům.
- Jakékoli změny v obou souborech se projeví okamžitě bez restartování síťových služeb.
Doporučený přístup k zabezpečení serveru
Obecně platí, že nejlepším postupem pro zabezpečení linuxového serveru je zablokovat všechna příchozí připojení a povolit pouze několik konkrétních hostitelů nebo sítí. Chcete-li tak učinit, upravte /etc/hosts.deny soubor:
$ sudo vi /etc/hosts.deny
Přidejte následující řádek. Tato linka odmítá připojení ke VŠEM službám a VŠEM sítím.
ALL: ALL
Poté upravte /etc/hosts.allow soubor:
$ sudo vi /etc/hosts.allow
a povolit konkrétní hostitele nebo sítě podle vašeho výběru.
sshd: 192.168.43.192 192.168.43.193
Můžete také zadat platné názvy hostitelů namísto adresy IP, jak je uvedeno níže.
sshd: server1.ostechnix.lan server2.ostechnx.lan
Případně můžete udělat totéž tak, že definujete všechna pravidla (jak povolit, tak zakázat) v samotném souboru /etc/hosts.allow.
Upravte /etc/hosts.allow soubor a přidejte následující řádky.
sshd: 192.168.43.192 192.168.43.193 sshd: ALL: DENY
V /etc/hosts.deny nemusíte zadávat žádné pravidlo soubor.
Podle výše uvedeného pravidla budou všechna příchozí spojení odepřena všem hostitelům kromě dvou hostitelů 192.168.43.192, 192.168.43.193.
Nyní zkuste SSH na váš linuxový server z libovolného hostitele kromě výše uvedených, zobrazí se následující chyba.
ssh_exchange_identification: read: Connection reset by peer
Můžete to ověřit ze souborů protokolu vašeho serveru Linux, jak je uvedeno níže.
$ cat /var/log/secure
Ukázkový výstup:
Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)
Podobně můžete definovat pravidla pro další služby, například vsftpd, v /etc/hosts.allow soubor, jak je uvedeno níže.
vsftpd: 192.168.43.192 vsftpd: ALL: DENY
Opět nemusíte definovat žádná pravidla v /etc/hosts.deny soubor. Podle výše uvedeného pravidla má vzdálený hostitel s IP adresou 192.168.43.192 povolen přístup k serveru Linux přes FTP. Všichni ostatní hostitelé budou zamítnuti.
Také můžete definovat přístupová pravidla v různých formátech v souboru /etc/hosts.allow, jak je uvedeno níže.
sshd: 192.168.43.192 #Allow a single host for SSH service sshd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for SSH vsftpd: 192.168.43.192 #Allow a single host for FTP vsftpd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for FTP vsftpd: server1.ostechnix.lan #Allow a single host for FTP
Povolit všechny hostitele kromě konkrétního hostitele
Můžete povolit příchozí připojení od všech hostitelů, ale ne od konkrétního hostitele. Řekněme například, že chcete povolit příchozí připojení od všech hostitelů v 192.168.43 podsíť, ale ne od hostitele 192.168.43.192 , přidejte následující řádek do /etc/hosts.allow soubor.
ALL: 192.168.43. EXCEPT 192.168.43.192
Ve výše uvedeném případě nemusíte do souboru /etc/hosts.deny přidávat žádná pravidla.
Nebo můžete místo IP adresy zadat název hostitele, jak je uvedeno níže.
ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan
Další podrobnosti naleznete na manuálových stránkách.
$ man tcpd
Přečtěte si také:
- Povolení nebo odepření přístupu SSH konkrétnímu uživateli nebo skupině v systému Linux
- Omezit počet přihlášení SSH na uživatele/skupinu/systém
Opět nezapomínejme, že TCP Wrapper není náhradou za firewall. Měl by být používán ve spojení s firewally a dalšími bezpečnostními nástroji.