GNU/Linux >> Znalost Linux >  >> Linux

Jak zabezpečit linuxový firewall pomocí pravidel IPTables

Hackování serveru a neoprávněný přístup jsou skutečnou hrozbou. Z těchto důvodů byste měli implementovat firewall jako součást vaší celkové strategie zabezpečení sítě. Konfigurace firewallu pomocí pravidel iptables je jedním ze způsobů, jak tato rizika v systémech Linux zmírnit.

Naštěstí pro vás tento tutoriál naučí, jak implementovat firewall se základní konfigurací pravidel iptables, kterou si pak můžete přizpůsobit podle svých požadavků. Jste připraveni ušpinit si ruce? Čas se ponořit!

Předpoklady

Tento tutoriál obsahuje praktické ukázky. Pokud chcete pokračovat, ujistěte se, že máte linuxový server nebo stolní počítač. Tento tutoriál používá pro příklady Ubuntu 14.04, ale měl by fungovat s jinými distribucemi Linuxu a novějšími verzemi Ubuntu.

Instalace služby Iptables Persistent Firewall Service

Jak název napovídá, IPTables Persistent Firewall je služba, která ukládá vaše sady pravidel a automaticky aplikuje pravidla IPTables při restartech serveru. Nejprve však budete muset nainstalovat balíček trvalé brány firewall.

Chcete-li nainstalovat IPTables Persistent Firewall, postupujte podle následujících kroků.

1. Otevřete terminálovou relaci na vašem serveru buď lokálně, nebo přes SSH.

2. Dále spusťte níže uvedený příkaz a aktualizujte mezipaměť zdrojů balíčků vašeho serveru.

# Updating the package source cache
sudo apt update -y

3. Nyní spusťte níže uvedený příkaz a nainstalujte IPTables Persistent Firewall.

# Installing the Persistent Firewall Package
sudo apt install iptables-persistent -y

4. Chcete-li suložit aktuální pravidla IPv4 , vyberte Ano a ve výzvě stiskněte Enter. Instalační program uloží pravidla IPv4 do souboru /etc/iptables/rules.v4.

5. Další výzva vás vyzve k Uložení aktuálních pravidel IPv6 , vyberte možnost Ano a stiskněte Enter. Instalační program uloží pravidla IPv6 do souboru /etc/iptables/rules.v6.

Nakonec potvrďte, že netfilter-persistent.service je aktivní a povoleno.

sudo systemctl status netfilter-persistent

Nastavení základních pravidel Iptables

V základním nastavení firewallu vytvoříte rozšiřitelný rámec, na kterém můžete stavět pro konfiguraci vašeho firewallu. Obecně platí, že nastavíte „zakázat vše-přijmout vše “, což znamená, že jakýkoli příchozí požadavek z jakékoli IP adresy bude zamítnut, s výjimkou vaší IP a SSH portu 22 (pro přístup správce).

Budou povolena všechna probíhající připojení z IP vašeho serveru k širšímu internetu; všechna příchozí spojení budou zrušena (kromě SSH). Poté vytvoříte výjimky pro konkrétní služby a typy provozu, které potřebujete, a postupně se o nich dozvíte později v tomto tutoriálu.

1. Otevřete /etc/iptables/rules.v4 soubor v textovém editoru. Tento příklad používá nano jako redaktor.

sudo nano /etc/iptables/rules.v4

Dále odstraňte veškerý obsah v /etc/iptables/rules.v4 soubor a nahraďte jej následujícími řádky. Podívejte se na vložené komentáře, abyste pochopili, co každý řádek/část dělá.

Poznámka:Níže uvedená konfigurace brány firewall může být popsána jako přísná a slouží pouze k vytvoření základního pravidla brány firewall, které můžete později upravit.

*filter
# Setting up a "deny all-accept all" policy
# Allow all outgoing, but deny/drop all incoming and forwarding traffic
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Custom per-protocol chains
# Defining custom rules for UDP protocol.
:UDP - [0:0]
# Defining custom rules for TCP protocol.
:TCP - [0:0]
# Defining custom rules for ICMP protocol.
:ICMP - [0:0]

# Accept SSH UDP traffic
-A TCP -p udp --dport 22 -j ACCEPT
# Accept SSH TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT

# Acceptable ICMP traffic

# Boilerplate acceptance policy
# Allowing packets based on the CONNTRACK connection states of ESTABLISHED and RELATED
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Allowing packets through the loopback interface, which is used for local connections
-A INPUT -i lo -j ACCEPT

# Packets that do not match any rules in the protocol-specific should be dropped.
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Allowing new protocol-specific chains to process packets for UDP that have a NEW conntrack state.
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
# Allowing new protocol-specific chains to process packets for TCP that have a NEW conntrack state.
-A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
# Allowing new protocol-specific chains to process packets for ICMP that have a NEW conntrack state.
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP

# Reject anything at this point. And print out rejection message with its specific protocol.
# Issuing an ICMP "port unreachable" message to any new incoming UDP packets, rejecting them.
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
# Issuing a "tcp-reset" message to any new incoming TCP packets, rejecting them.
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
# Issuing an "icmp-proto-unreachable" message to any new incoming TCP packets, dropping all other incoming packets.
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

# Commit the changes
COMMIT

*raw
# Allowing packets in the PREROUTING chain
:PREROUTING ACCEPT [0:0]
# Allows packets in the OUTPUT chain, which is used for locally generated packets
:OUTPUT ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT
# NAT table is used to alter packets as they are routed through the system
*nat
:PREROUTING ACCEPT [0:0]
# Allowing packets in the INPUT chains for NAT
:INPUT ACCEPT [0:0]
# Allowing packets in the OUTPUT chains for NAT
:OUTPUT ACCEPT [0:0]
# Allowing packets in the POSTROUTING chains for NAT
:POSTROUTING ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT

*security
# Allowing packets in the INPUT chains for security
:INPUT ACCEPT [0:0]
# Allowing packets in the FORWARD chains for security
:FORWARD ACCEPT [0:0]
# Allowing packets in the OUTPUT chains for security
:OUTPUT ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT

*mangle
# Allowing packets in the PREROUTING chains for mangle
:PREROUTING ACCEPT [0:0]
# Allowing packets in the INPUT chains for mangle
:INPUT ACCEPT [0:0]
# Allowing packets in the FORWARD chains for mangle
:FORWARD ACCEPT [0:0]
# Allowing packets in the OUTPUT chains for mangle
:OUTPUT ACCEPT [0:0]
# Allowing packets in the POSTROUTING chains for mangle
:POSTROUTING ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT

3. Uložte soubor. V nano , stiskněte CTRL+X, Y, Enter.

4. Spusťte iptables-restore příkaz níže pro ověření nebo nalezení jakýchkoli syntaktických chyb. Pokud nejsou žádné chyby, firewall se restartuje s pravidly, která jste definovali v souboru. Pokud se vyskytnou chyby, příkaz vrátí seznam chyb a způsob, jak je opravit.

sudo iptables-restore -t /etc/iptables/rules.v4

5. Dále upravte /etc/iptables/rules.v6 implementovat zásady a rámec brány firewall pro IPv6.

sudo nano /etc/iptables/rules.v6

6. Nahraďte soubor /etc/iptables/rules.v6 s následujícími řádky. Uložte a ukončete /etc/iptables/rules.v6 stisknutím CTRL+X, Y, Enter.

Níže uvedená pravidla iptables zruší veškerý provoz IPv6 a předpokládají, že na serveru není žádná aplikace ani služba, která se spoléhá na IPv6 nebo jej používá.

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT

7. Spuštěním příkazu níže vyhledejte a opravte všechny syntaktické chyby.

sudo ip6tables-restore -t /etc/iptables/rules.v6

8. Nyní znovu načtěte netfilter-persistent aby pravidla iptables vstoupila v platnost.

sudo service netfilter-persistent reload

9. Spuštěním příkazu níže uložte nová pravidla iptables.

sudo service netfilter-persistent save

10. Spuštěním příkazu níže zobrazíte seznam všech aktuálně používaných pravidel pro IPv4.

sudo iptables -S

10. Nakonec uveďte seznam pravidel iptables pro IPv6.

sudo ip6tables -S

Změna IP adresy serveru DNS serveru (podmíněné)

Blokování veškerého provozu IPv6 může mít nepříznivé vedlejší účinky, zejména pokud váš server spoléhá na překlad názvů na IPv6.

V tomto příkladu se konfigurace sítě opírá o jmenné servery IPv6 (například 2001:4860:4860::8888 a 2001:4860:4860::8844). Protože brána firewall vynucuje pouze provoz IPv4, systém nemůže vyhledat názvové servery pro IPv6.

Například některá z vašich úložišť APT nemusí fungovat, pokud brána firewall blokuje veškerý provoz IPv6. Pokud se pokusíte znovu spustit sudo apt update příkazu, může se zobrazit následující chyba.

Řešením je aktualizovat konfigurační soubor sítě a upřednostňovat použití jmenných serverů IPv4 (jako jsou 8.8.8.8 a 8.8.4.4).

1. Otevřete /etc/network/interfaces soubor v textovém editoru.

Konfigurační soubory nsíťového rozhraní se mohou lišit v závislosti na distribuci nebo verzi Linuxu. Níže uvedený příklad je konkrétně pro Ubuntu 14.04 LTS.

sudo nano /etc/network/interfaces

2. Hledejte dns-nameservers směrnice. Změňte tuto direktivu na dns-nameservers 8.8.8.8 8.8.4.4 .

8.8.8.8 a 8.8.4.4 jsou veřejné servery DNS provozované společností Google. Tyto veřejné servery DNS jsou spolehlivé a rychlé. Neváhejte použít jiné servery DNS, jako je OpenDNS nebo interní DNS IPv4 ve vaší organizaci.

3. Spuštěním níže uvedeného příkazu proveďte cyklus síťového rozhraní vašeho serveru a použijte nové jmenné servery.

sudo ifdown eth0 && sudo ifup eth0

4. Dále otevřete soubor /etc/apt/apt.conf.d/99force-ipv4 v textovém editoru. Tato výchozí konfigurace obsahuje soubor APT používá pro trvalá nastavení.

sudo nano /etc/apt/apt.conf.d/99force-ipv4

5. Vyplňte 99force-ipv4 soubor s následujícím řádkem. Tato hodnota přinutí APT používat pro překlad názvů IPv4. Uložte a ukončete 99force-ipv4 .

Acquire::ForceIPv4 "true";

6. Odhlaste se a přihlaste se zpět do relace SSH a znovu spusťte sudo apt update příkaz. Chyby rozlišení názvů by se již neměly zobrazovat.

Přidání výjimek pro konkrétní služby

Nyní, když máte fungující pravidla iptables „povolit vše-zakázat vše“, můžete nyní podle potřeby otevřít konkrétní porty pro určité služby. Pokud například váš server hostí nebo bude hostit web, budete muset povolit provoz na portu HTTP 80 nebo HTTPS 443. Chcete-li tak učinit, postupujte následovně.

1. Na terminálu spusťte následující příkaz pro otevření portu TCP 80 pro provoz HTTP a port 443 pro provoz HTTPS.

  • -A parametr přijímá, který řetězec má být připojen k pravidlu.
  • -p parametr určuje typ protokolu, který pravidlo použije.
  • --dport hodnota parametru je číslo cílového portu.
  • -j parametr určuje, jaká akce se má provést, když se pravidlo shoduje.
sudo iptables -A TCP -p tcp --dport 80 -j ACCEPT
sudo iptables -A TCP -p tcp --dport 443 -j ACCEPT

2. Spusťte níže uvedený příkaz a ověřte, že nová pravidla jsou nyní účinná.

sudo iptables -L -v

Uvidíte své dva záznamy pro HTTP a HTTPS.

3. Nakonec spusťte níže uvedený příkaz a uložte změny pravidel iptables.

sudo service netfilter-persistent save

Povolení připojení na základě zdroje

Iptables také umožňuje vytvářet pravidla pro povolení provozu z konkrétních zdrojů, například z jedné nebo více IP adres. Vaše společnost může mít například tři weby, z nichž každý má svou IP adresu (např. 192.168.1.20, 192.168.1.30 a 192.168.1.40).

Pravděpodobně budete chtít povolit připojení k vašemu serveru z každého webu. Chcete-li tak učinit, vytvořte tři samostatná pravidla s -s specifikovat konkrétní zdroj.

1. Spuštěním následujících příkazů povolte připojení ze tří konkrétních IP adres.

Níže uvedené adresy IP slouží pouze pro ilustrativní účely a nemusí odrážet skutečný scénář. IP adresy vašich stránek se budou lišit.

# Allowing connection from 192.168.1.20
sudo iptables -A TCP -s 192.168.1.20 -j ACCEPT
# Allowing connection from 192.168.1.30
sudo iptables -A TCP -s 192.168.1.30 -j ACCEPT
# Allowing connection from 192.168.1.40
sudo iptables -A TCP -s 192.168.1.40 -j ACCEPT

2. Znovu spusťte níže uvedený příkaz a ověřte, že jste přidali nová pravidla.

sudo iptables -L -v

Uvidíte tři položky pro vaše tři konkrétní zdroje, které jim umožní připojit se k vašemu serveru.

3. Nakonec si nezapomeňte uložit pravidla iptables spuštěním příkazu níže.

sudo service netfilter-persistent save

Resetování pravidel Iptables

Nyní jste úspěšně nakonfigurovali firewall s pravidly iptables. Ale ne vždy jde všechno podle plánu. Ale co kdybyste to zpackali a chtěli začít znovu?

Jednou z možností je resetovat všechna vaše pravidla iptables. Chcete-li tak učinit, postupujte podle níže uvedených kroků.

1. Nejprve si vytvořte záložní kopii svých stávajících pravidel iptables. Níže uvedený příkaz zkopíruje soubor rules.v4 a rules.v6 soubory do vašeho domovského adresáře.

sudo cp /etc/iptables/* ~/

2. Dále vyprázdněte všechna vaše stávající pravidla iptables spuštěním příkazu níže.

sudo service netfilter-persistent flush

3. Potvrďte, že pravidla již neexistují.

sudo iptables -S

Jak můžete vidět níže, zůstávají pouze výchozí pravidla iptables, která povolují vše. Toto chování zajišťuje, že resetování pravidel nezpůsobí scénář uzamčení přístupu správce.

Závěr

V tomto tutoriálu jste se naučili, jak zabezpečit linuxový firewall pomocí pravidel iptables a jak nakonfigurovat výjimky.

Někteří správci Linuxu mohou namítat, že iptables je pro konfiguraci linuxového firewallu zastaralý. Ale mnoho aplikací stále spoléhá na iptables, což by mohlo znamenat, že zůstane hlavním pilířem po mnoho dalších let.

Co si myslíte o používání trvalých pravidel iptables? Zvážíte jeho implementaci nebo přejdete na novější možnosti, jako je nekomplikovaný firewall (UFW)?


Linux
  1. Jak vyprázdnit pravidla iptables

  2. Linux IPTables:Jak přidat pravidla brány firewall (s příkladem Allow SSH)

  3. Jak zkontrolovat heslo v Linuxu?

  1. Jak vyprázdnit pravidla iptables

  2. Jak přidat vlastní pravidla iptables v CSF Firewallu

  3. Jak zabezpečit server Ubuntu pomocí brány firewall CSF

  1. Jak na to:Linux General – IPTtables obecně

  2. Jak protokolovat Linux IPTables Firewall zahozené pakety do souboru protokolu

  3. Jak ověřit, zda běží iptables nebo je aktivován firewall