Wyszukiwanie w witrynie

Jak zabezpieczyć usługi sieciowe za pomocą opakowań TCP w systemie Linux


W tym artykule wyjaśnimy, czym są wrappery TCP i jak je skonfigurować, aby ograniczyć dostęp do usług sieciowych działających na serwerze Linux. Zanim jednak zaczniemy, musimy wyjaśnić, że użycie opakowań TCP nie eliminuje konieczności posiadania odpowiednio skonfigurowanej zapory ogniowej.

W związku z tym możesz myśleć o tym narzędziu jako o liście kontroli dostępu opartej na hoście, a nie o ostatecznym środku bezpieczeństwa twojego systemu. Używając firewalla i opakowań TCP, zamiast faworyzować jedno nad drugim, będziesz mieć pewność, że Twój serwer nie będzie pozostawiony z pojedynczym punktem awarii.

Zrozumienie hostów.allow i hosts.deny

Kiedy żądanie sieciowe dociera do Twojego serwera, opakowania TCP używają hosts.allow i hosts.deny (w tej kolejności), aby określić, czy klient powinien mieć możliwość korzystania z danej usługi .

Domyślnie te pliki są puste, wszystkie są skomentowane lub nie istnieją. W ten sposób wszystko jest dozwolone przez warstwę opakowań TCP, a system musi polegać na zaporze ogniowej w celu zapewnienia pełnej ochrony. Ponieważ nie jest to pożądane, z powodu podanego we wstępie, upewnij się, że oba pliki istnieją:

ls -l /etc/hosts.allow /etc/hosts.deny

Składnia obu plików jest taka sama:

<services> : <clients> [: <option1> : <option2> : ...]

Gdzie,

  1. usługi to rozdzielona przecinkami lista usług, do których ma zostać zastosowana bieżąca reguła.
  2. klienci reprezentują listę rozdzielonych przecinkami nazw hostów lub adresów IP, których dotyczy reguła. Akceptowane są następujące symbole wieloznaczne:

    1. ALL pasuje do wszystkiego. Dotyczy zarówno klientów, jak i usług.
    2. LOCAL dopasowuje hosty bez kropki w ich FQDN, np. localhost.
    3. ZNANE wskazuje sytuację, w której znana jest nazwa hosta, adres hosta lub użytkownik.
    4. NIEZNANY jest przeciwieństwem słowa ZNANY.
    5. PARANOID powoduje zerwanie połączenia, jeśli odwrotne wyszukiwanie DNS (najpierw na adresie IP w celu ustalenia nazwy hosta, następnie na nazwie hosta w celu uzyskania adresów IP) zwraca w każdym przypadku inny adres.
  3. Na koniec opcjonalna lista akcji oddzielonych dwukropkami wskazuje, co powinno się stać po uruchomieniu danej reguły.

Możesz pamiętać, że reguła zezwalająca na dostęp do danej usługi w /etc/hosts.allow ma pierwszeństwo przed regułą w /etc/hosts.deny zabraniającą To. Dodatkowo, jeśli do tej samej usługi będą miały zastosowanie dwie zasady, pod uwagę będzie brana tylko ta pierwsza.

Niestety nie wszystkie usługi sieciowe obsługują opakowania TCP. Aby sprawdzić, czy dana usługa je obsługuje, wykonaj:

ldd /path/to/binary | grep libwrap

Jeśli powyższe polecenie zwróci dane wyjściowe, można je zapakować w protokół TCP. Przykładem tego są sshd i vsftpd, jak pokazano tutaj:

Jak używać opakowań TCP do ograniczania dostępu do usług

Edytując /etc/hosts.allow i /etc/hosts.deny, pamiętaj o dodaniu nowej linii, naciskając Enter po ostatnim niepusta linia.

Aby zezwolić na dostęp SSH i FTP tylko do 192.168.0.102 i localhost i zabronić wszystkim innym, dodaj te dwie linie w /etc/hosts.deny :

sshd,vsftpd : ALL
ALL : ALL

i następujący wiersz w pliku /etc/hosts.allow:

sshd,vsftpd : 192.168.0.102,LOCAL
#
hosts.deny	This file contains access rules which are used to
#		deny connections to network services that either use
#		the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		The rules in this file can also be set up in
#		/etc/hosts.allow with a 'deny' option instead.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : ALL
ALL : ALL
#
hosts.allow	This file contains access rules which are used to
#		allow or deny connections to network services that
#		either use the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : 192.168.0.102,LOCAL

Zmiany te zachodzą natychmiast, bez konieczności ponownego uruchamiania.

Na poniższym obrazku widać efekt usunięcia słowa LOCAL z ostatniej linii: serwer FTP stanie się niedostępny dla localhost. Po ponownym dodaniu symbolu wieloznacznego usługa staje się ponownie dostępna.

Aby zezwolić na wszystkie usługi hostom, których nazwa zawiera example.com, dodaj tę linię w hosts.allow:

ALL : .example.com

i aby odmówić dostępu do vsftpd komputerom w 10.0.1.0/24, dodaj tę linię w hosts.deny:

vsftpd : 10.0.1.

W dwóch ostatnich przykładach zwróć uwagę na kropkę na początku i na końcu listy klientów. Służy do wskazania „WSZYSTKICH hostów i/lub klientów, których nazwa lub adres IP zawiera ten ciąg”.

Czy ten artykuł był dla Ciebie pomocny? Czy masz jakieś pytania lub uwagi? Możesz zostawić nam notatkę, korzystając z poniższego formularza komentarza.