Konfigurowanie zapory Linux za pomocą iptables na CentOS / RHEL 7

W tym artykule pokażemy, jak zarządzać zaporą Linux za pomocą klasycznego iptables zamiast firewalld w CentOS / RHEL 7 w celu filtrowania ruchu przychodzącego i wychodzącego. W tym artykule opisano, jak skonfigurować iptables na CentOS 7 w celu filtrowania ruchu przychodzącego na przykładzie serwera wirtualnego opartego na chmurze wdrożonego od podstaw myserver01, dostępny z internetu.

Treść

  • Wyłączanie zapory ogniowej w CentOS 7
  • Zasady składni i iptables w CentOS / Red Hat
  • Tworzenie reguł filtrowania ruchu w iptables
  • Włącz dzienniki iptables
  • Zapisywanie i przywracanie reguł filtrowania iptables

Wyłączanie zapory ogniowej w CentOS 7

CentOS 7 domyślnie korzysta z usługi systemowej do kontrolowania zapory zapora ogniowa. Zapewnia własny interfejs, ale ostatecznie działa również za pomocą narzędzia iptables. Jednocześnie zaporą ogniową należy sterować przez zaporę ogniową lub bezpośrednio przez iptables.

firewalld nie jest zamiennikiem, ale opakowaniem wokół iptables, możesz z niego używać tego, co lubisz bardziej, lub bardziej odpowiedniego w określonych warunkach. iptables jest bardziej uniwersalny, jest podstawowym narzędziem, ale nieco trudniejszym do opanowania. firewalld zapewnia prostszy interfejs, ale na przykład CentOS 6 nie może go używać, a dla innych dystrybucji musisz mieć niezbędne pakiety instalacyjne. Ponadto, jeśli korzystasz z aplikacji, które dokonują ustawień w zaporze, muszą być one kompatybilne z zaporą ogniową (przykładem takich aplikacji jest okno dokujące, fail2ban).

Sprawdź stan zapory ogniowej i wyłącz ją.

systemctl status firewalld

Na wyjściu polecenia obszar zakreślony został na czerwono słowem włączone, oznacza, że ​​uruchomienie jest włączone, a obszar zakreślony na żółto słowem aktywny, oznacza, że ​​usługa jest uruchomiona.

Zatrzymujemy usługę i wyłączamy dla niej automatyczne ładowanie:

systemctl stop firewalld
systemctl wyłącz zaporę ogniową

Ponowne sprawdzenie statusu:

Teraz wyświetla się wynik polecenia wyłączone do automatycznego ładowania (wyłączone), oraz nieaktywny oznacza, że ​​usługa jest wyłączona.

Zasady składni i iptables w CentOS / Red Hat

Iptables - jest to narzędzie, które konfiguruje reguły zapory w systemie Linux.

Iptables grupuje reguły zapory w tabele, główne z nich to:

  • Tabela filtruj - Służy do filtrowania ruchu, tzn. zezwalania i odmawiania połączeń
  • Tabela nat - używane do tłumaczenia adresów (NAT)
  • Tabela magiel - inne modyfikacje nagłówków pakietów IP.

Najpierw sprawdź, czy iptables jest zainstalowany w systemie (powinien być domyślny):

rpm -q iptables

Dane wyjściowe polecenia pokazują, że aktualnie zainstalowana wersja iptables to 1.4.21.

Praca z iptables w wierszu poleceń wymaga uprawnień roota, więc będziemy kontynuować pracę jako root.

Aby wyświetlić bieżące reguły, wykonaj polecenie:

iptables [-t tabela] -L [łańcuch] [parametry]

Uwaga: jeśli nie podasz nazwy tabeli podczas wywoływania polecenia, tabela będzie używana domyślnie filtruj.

Na przykład wynik polecenia iptables -L, gdy nie utworzono jeszcze reguł w tabelach:

Rozważ bardziej szczegółowo wynik działania polecenia.

Tabela filtruj zawiera trzy rodzaje reguł, tzw. łańcuch (łańcuch):

  • WEJŚCIE - przychodzące pakiety ip przeznaczone dla samego hosta są przetwarzane w tym łańcuchu;
  • WYJŚCIE - wychodzące pakiety ip od samego hosta są przetwarzane w tym łańcuchu;
  • DO PRZODU - ten łańcuch jest potrzebny do przekierowania pakietów ip. Używane, jeśli chcesz używać serwera jako routera.

Naprzeciw każdego łańcucha znajduje się domyślna zasada, która określa, co należy zrobić, jeśli połączenie nie mieści się w żadnej z reguł. Domyślna zasada może przyjmować dwie wartości i określa podejście do organizacji samej zapory:

  • AKCEPTUJĘ - domyślnie wszystkie połączenia są dozwolone, reguły blokują niechciane połączenia;
  • DROP - domyślnie wszystkie połączenia są odrzucane, reguły dopuszczają niezbędne połączenia.

Tworzenie reguł filtrowania ruchu w iptables

Filtr Iptables według interfejsu

Zacznijmy tworzyć reguły. Składnia polecenia dodania nowej reguły na końcu określonego łańcucha wygląda następująco:

iptables [-t tabela] -A -j

Na początek zezwólmy na ruch przez lokalny interfejs sprzężenia zwrotnego (127.0.0.1), który jest niezbędny do działania niektórych aplikacji:

iptables -A WEJŚCIE -i lo -j AKCEPTUJĘ

Przeanalizujmy w kolejności:

  1. Określamy łańcuch INPUT, tj. reguła będzie obowiązywać dla połączeń przychodzących.
  2. Następnie użyj klucza -i (w interfejsie), aby określić interfejs przychodzący, do którego dociera pakiet ip.
  3. Uzupełniamy polecenie klawiszem -j (-skok), określanie akcji, która zostanie wykonana dla wszystkich pakietów ip, które spełniają kryteria z klauzuli 2. W takim przypadku AKCEPTUJ pozwala na połączenie. Ponadto podstawowe działania związane z połączeniami obejmują również:
    • DROP - wyłącz połączenie, źródło połączenia nie jest informowane, pakiet ip jest po prostu odrzucany;
    • ODRZUĆ - wyłącz połączenie, źródło połączenia poinformuje komunikat.

Filtr Iptables według portu, protokołu lub adresu IP

Teraz dodaj regułę zezwolenia na połączenie z naszym serwerem Linux za pośrednictwem SSH na porcie 22.

iptables -A WEJŚCIE -p tcp --port 22 -j AKCEPTUJ

W tej regule port i protokół są kryteriami. Protokół (tcp, udp, icmp, all) jest ustawiany przez klucz -p (-protokół), port docelowy (tj. port, do którego pakiety IP będą przychodzić na serwer) -dport.

Uwaga: jeśli chcesz użyć portu docelowego lub portu źródłowego w kryteriach (-dport lub -sport), a następnie określ protokół.

Możesz na przykład określić zakres portów za pomocą dwukropka

--dport 6000: 6063

Jeśli znamy adresy IP klientów, z których połączymy się z serwerem, bezpieczniej będzie zezwolić na dostęp tylko z tych adresów IP. W takim przypadku dodaj -s (-src, -source) do kryteriów, określając adres IP lub podsieć źródła połączenia, na przykład za pomocą tej reguły:

iptables -A WEJŚCIE -p tcp -s 94.41.174.122 - port 22 -j AKCEPTUJ

dostęp do portu 22 będzie dozwolony tylko z adresu IP 94.41.174.122.

Częściowo zezwalaj na żądania icmp, 3 typy:

iptables -A WEJŚCIE -p icmp --icmp -typ echo-żądanie -j AKCEPTUJ
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j AKCEPTUJ
iptables -A WEJŚCIE -p icmp - typ -icmp przekroczył czas -j AKCEPTUJ

Reguły te włączają narzędzia ping, traceroute i umożliwiają mechanizmowi określanie MTU między dwoma hostami.

Status połączenia iptables filtr

Aby zapewnić poprawne działanie, musisz utworzyć regułę, która zezwala na nawiązane już połączenia:

iptables -A WEJŚCIE -m stan - stan USTANOWIONO, POWIĄZANE -j AKCEPTUJ

Tutaj klucz jest używany w kryteriach -m, załadować moduł stanu, który umożliwia określenie aktualnego stanu pakietu ip na podstawie możliwych:

  • NOWOŚĆ - dotyczy przychodzących pakietów ip zaangażowanych w nawiązywanie połączenia;
  • ESTABLISHED and RELATED - dotyczy przychodzących pakietów ip uczestniczących w już ustanowionych połączeniach lub połączeniach inicjowanych z już ustanowionych (połączonych połączeń);
  • INVALID - odnosi się do przychodzących pakietów ip, jeśli żaden z powyższych warunków ich nie dotyczy.

Ustawianie domyślnych zasad iptables

Minimalny zestaw reguł zezwalających na zaporę jest gotowy, pozostaje ustawić domyślne zasady, które zabraniają wszystkich połączeń przychodzących, które nie są zgodne z naszymi regułami. Aby to zrobić, użyj klawisza w poleceniu iptables -P., ustawia domyślne zasady dla danego łańcucha, w naszym przypadku:

iptables -P KROK WEJŚCIA

Uwaga: przed użyciem tego polecenia musisz upewnić się, że obecne reguły pozwalają ci połączyć się z serwerem, w przeciwnym razie po prostu zablokujesz dostęp do siebie!
Spójrzmy na wynikową tabelę reguł iptables, dodaj klucz -v, aby wyświetlić bardziej szczegółowe dane wyjściowe:
iptables -L -v

Włącz dzienniki iptables

Iptables pozwala zapisywać informacje o przekazywaniu pakietów IP do dziennika systemu. Jest to realizowane przez konkretne działanie. LOG powyżej połączenia, po czym pakiet ip kontynuuje ruch nietknięty wzdłuż łańcucha. Na przykład utwórz regułę, która będzie rejestrować wszystkie zdarzenia połączenia z portem 445 (tcp) w dzienniku systemowym:

iptables -A WEJŚCIE -p tcp --port 445 -j LOG - przedrostek dziennika „IN SMB DROP:”

tutaj -przedrostek dziennika ustawia prefiks dla wszystkich wiadomości rejestrowanych przez naszą regułę. Jest to wygodne, jeśli masz kilka różnych reguł rejestrowania lub do dalszego przetwarzania oprogramowania. Jeśli teraz spróbujesz połączyć się zewnętrznie z naszym serwerem na porcie 445, na przykład przez telnet, w pliku / var / log / messages pojawią się wpisy:

Przeanalizujmy wniosek:

  • W SMRO DROP: przedrostek, który ustawiamy z opcją -przedrostek dziennika
  • IN = eth0 interfejs, na który odbierany jest pakiet ip, zawiera pustą wartość dla połączeń wychodzących
  • OUT = interfejs, z którego wysłano pakiet ip dla połączeń przychodzących, zawiera pustą wartość
  • MAC = połączone razem w następującej kolejności: docelowy adres MAC, źródłowy adres MAC, EtherType - 08:00 odpowiada IPv4.
  • Src = adres ip źródła, z którego wysłano pakiet ip
  • DST = docelowy adres ip, na który wysłano pakiet ip
  • LEN = rozmiar ip pakietu w bajtach
  • SPT = port źródłowy, z którego wysłano pakiet ip
  • DPT = port docelowy, do którego wysyłany jest pakiet ip

Zapisywanie i przywracanie reguł filtrowania iptables

Podsumowując, skonfiguruj automatyczne ładowanie reguł po ponownym uruchomieniu serwera. Aby to zrobić, należy zainstalować pakiet. iptables-services i usługa jest aktywowana. Zainstaluj pakiet przez yum:

mniam zainstalować iptables-services
systemctl włącza iptables

Sprawdź status usługi iptables:

systemctl status iptables

Opcja uruchamiania jest ustawiona na włączone parametr (włączony) aktywny wskazuje, że usługa jest uruchomiona.

Podczas ładowania usługa odczyta zawartość pliku / etc / sysconfig / iptables, i przywróć zapisane reguły. Aby zapisać nasze reguły, używamy polecenia:

iptables-save> / etc / sysconfig / iptables

Możesz przywrócić reguły z pliku za pomocą polecenia:

iptables-restore < /etc/sysconfig/iptables

Teraz możesz zrestartować serwer i upewnić się, że reguły zapory zostały przywrócone podczas uruchamiania.

W następnym artykule pokażemy, jak używać iptables do tworzenia reguł przekierowywania ruchu NAT dla bramy dostępu opartej na CentOS z / do wewnętrznej sieci organizacji.