Co je ferm firewall založený na Linuxu iptables a jak jej konfigurovat

In Linux-operační systémy na bázi firewall par excellence, kterou používáte, jsou iptables, je však také možné, že používáte nftables, což je evoluce iptables, mnohem efektivnější a s mnohem „lidštější“ syntaxí, nicméně ne celý svět stále používá nftables. Dnes si vysvětlíme, jak nakonfigurovat bránu firewall na serverech Linux pomocí Ferm (For Easy Rule Making), rozhraní iptables, které nám umožní velmi snadno, rychle a jednoduše přidávat pravidla do brány firewall, aniž byste se museli učit syntaxi iptables.

Co je firewall Ferm a k čemu slouží?

Co je ferm firewall založený na Linuxu iptables

Ferm (For Easy Rule Making) je frontend iptables. iptables nebo vytvářet různé skripty pomocí iptables, ale uděláme to přímo s Ferm. Tento nástroj je schopen přečíst pravidla z konfiguračního souboru, který definujeme, a později „zavolá“ iptables, aby přidal různá pravidla po jednom a vložil je v reálném čase do jádra.

Cílem společnosti Ferm je poskytnout správcům systému a sítě snadný způsob, jak číst a zapisovat všechna pravidla brány firewall, čímž se sníží úkol psát jedno pravidlo za druhým, abychom mohli věnovat více času vývoji a optimalizaci pravidel tak, aby byla co nejúčinnější. Ferm používá velmi jednoduchý, ale poměrně pokročilý konfigurační jazyk, můžeme použít proměnné, funkce, pole a dokonce i bloky. Další velmi zajímavé možnosti Fermu jsou, že nám umožní zahrnout do adresáře další konfigurační soubory a postará se o import a aplikaci všech těchto pravidel automaticky.

Ferm je stále frontendem iptables, takže když použijeme tento nástroj, budeme vždy moci přímo upravovat a konfigurovat bránu firewall pomocí příkazů iptables. Ve skutečnosti je Ferm schopen importovat aktuální pravidla iptables a automaticky je vložit do konfiguračního souboru, aby je mohl později upravit nebo rozšířit.

Jedním z nejpopulárnějších frontendů iptables je ufw, který je široce používán správci systému a sítě ke snadné a rychlé konfiguraci firewallů.

Instalace a zprovoznění Ferm

Instalace Ferm je opravdu jednoduchá, v současné době je ve většině úložišť různých distribucí založených na Linuxu, v našem případě jsme použili nejnovější verzi Debianu k provedení všech testů, které vás naučíme. Chcete -li nainstalovat tento program, což je frontend iptables, musíme spustit následující příkaz:

sudo apt install ferm

Jakmile spustíme tento příkaz, měli bychom vidět něco takového, kde se nám zobrazí další balíčky, které musíme nainstalovat, v zásadě musíme nainstalovat Perl, abychom mohli tento program správně spustit.

Instalační program Ferm nám řekne, že načte pravidla brány firewall během spouštění z cesty /etc/ferm/ferm.conf, to znamená, že vše v tomto souboru bude automaticky předáno do iptables, aby byla povolena nebo zamítnuta dopravní síť. Výchozí konfigurace tohoto firewallu nám umožňuje vzdálený přístup přes SSH přes port 22, pokud na tomto portu nemáte nakonfigurovaný SSH, budete muset upravit výchozí hodnoty a kliknout na „ne“, aby se nespustilo , jinak přijdete o připojení.

Jakmile jsme vybrali ano nebo ne, apt dokončí instalaci všech dalších balíčků, které potřebujeme, aby tento program fungoval.

Po instalaci můžeme přejít na cestu / etc / ferm / a uvidíme jak konfigurační soubor s názvem ferm.conf, tak adresář s názvem ferm.d, do kterého můžeme začlenit naše konfigurační soubory ferm a importovat je, to umožňuje máme větší modularitu.

Ferm již ve výchozím nastavení přichází se seznamem pravidel, která můžeme kdykoli odstranit, ale pomůže nám to vypořádat se se syntaxí tohoto frontendu iptables, a proto to bude docela užitečné. Pokud se podíváme na syntaxi, uvidíme, že je podobná nftables, ale vychází z iptables.

Na následujícím snímku obrazovky vidíte, jak jsou deklarovány domény, kde se bude konfigurovat (iptables nebo ip6tables), tabulky a řetězce a také pravidla, která máme v rámci různých řetězců.

Můžeme také vidět, že ve výchozím nastavení máme několik pravidel:

  • V řetězci INPUT je zásada DROP, povolen provoz localhost, provoz ICMP a připojení je povoleno přes IPsec a také přes SSH s výchozími porty. Pokud jde o stav připojení, neplatná připojení jsou DROPED a navázaná a související jsou povolena, ale nová nejsou povolena, kromě těch, která jsou konkrétně definována.

V řetězci VÝSTUP je definováno, že zásadou je přijmout vše a stav připojení umožňuje těm navázaným a souvisejícím. V řetězci FORWARD je provoz odepřen zásadami, neplatná připojení jsou konkrétně blokována, ale navázaná a související připojení jsou povolena.

Dále můžete vidět tento konfigurační soubor v textovém formátu:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# sledování připojení
stav stavu mod INVALID DROP;
stav stavu mod (ZAVEDENO SOUVISEJÍCÍ) PŘIJMOUT;

# povolit místní paket
rozhraní co PŘIJMOUT;

# odpovězte na ping
proto icmp PŘIJMOUT;

# povolit IPsec
proto udp dport 500 PŘIJMOUT;
@if @eq ($ DOMAIN, ip) {
proto (esp ah) PŘIJMOUT;
} @else {
proto (esp) PŘIJMOUT;
}

# povolit připojení SSH
proto tcp dport ssh ACCEPT;
}
řetězec VÝSTUP {
politika PŘIJÍMAT;

# sledování připojení
#mod state state INVALID DROP;
stav stavu mod (ZAVEDENO SOUVISEJÍCÍ) PŘIJMOUT;
}
řetěz FORWARD {
politika DROP;

# sledování připojení
stav stavu mod INVALID DROP;
stav stavu mod (ZAVEDENO SOUVISEJÍCÍ) PŘIJMOUT;
}
}
}

@include ferm.d/;

Nejzajímavější částí je „@include ferm.d /“, kterou máme v závěrečné části, to znamená, že importuje všechny konfigurační soubory, které v daném adresáři máme.

Tento níže uvedený firewall Ferm používá iptables, pokud tedy provedeme následující příkaz:

iptables -L

Můžeme vidět aktuální stav iptables se všemi pravidly, která začlenil do brány firewall:

Jakmile uvidíme výchozí konfiguraci Ferm, uvidíme různé příklady konfigurace, které můžeme udělat.

Základní konfigurace Ferm

Fermova syntaxe je velmi jednoduchá a flexibilní, ale musíme se ji naučit, abychom vytvořili správnou konfiguraci. Doporučujeme vám přístup k oficiální příručce Ferm kde najdete všechny podrobnosti o syntaxi, která se má použít, a o tom, jak by měla být různá pravidla deklarována v konfiguračním souboru, díky tomuto oficiálnímu manuálu můžeme tento firewall konfigurovat bez mnoha problémů.

První věc, kterou je třeba mít na paměti, je, že všechna pravidla Ferm začínají a končí složenými závorkami a pravidla končí středníkem, proto je v programování dobře známou syntaxí. Další zajímavé funkce jsou, že konce řádků jsou ignorovány a komentáře můžete vložit kamkoli, když na konec řádku zadáte „#“.

Pokud jde o syntaxi iptables a ferm, máme několik rozdílů:

  • Chcete -li definovat vstupní rozhraní: rozhraní (pokud)
  • Chcete -li definovat výstupní rozhraní: vnější plocha (z)
  • Definování původu: saddr
  • Chcete -li definovat cíl: daddr
  • Chcete -li definovat protokol: proto
  • Přístav původu: sport
  • Cílový port: dport
  • Načíst modul: mod
  • Přejít na vlastní pravidlo: skok

Ve Fermu nejsou žádné příkazy jako -A, -I, -C, -R nebo -D, protože vše je zapsáno v konfiguračním souboru, to samé se děje s příkazy pro přidání nového řetězce, jeho přejmenování nebo odstranění, teď tady úplně zmizí. Další funkce jsou, že ferm vám umožňuje zdědit různá pravidla, která mají být použita v rámci jiných pravidel, vnořená do konfiguračního souboru.

Jakmile zhruba víme, jaká je syntaxe, uvidíme několik příkladů, které ji porovnávají s iptables, ve všech budeme pracovat na tabulce «filtr» v řetězci «INPUT».

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

Ve fermu by to bylo napsáno následovně (přidání zásad řetězce OUTPUT a FORWARD z tabulky filtrů):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

Ferm nám umožňuje snadno a rychle definovat stejná pravidla ve VSTUPU a VÝSTUPU, aniž by bylo nutné pravidla znovu a znovu opakovat. Představme si například, že nyní chceme přijmout protokol TCP jak v řetězci INPUT, tak v řetězci OUTPUT, v iptables by to bylo následující:

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

S Ferm je to jednoduché jako následující:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

Jak vidíte, je mnohem rychlejší a snazší použít stejné pravidlo na VSTUP i VÝSTUP.

Tento firewall také obsahuje velmi zajímavé funkce, například můžeme zkontrolovat, zda je definována proměnná nebo funkce, můžeme zkontrolovat, zda jsou dvě hodnoty stejné nebo odlišné, popřít booleovskou hodnotu, řešit domény přímo z Fermu, zřetězení parametrů a dlouhé seznam funkcí.

Ferm vám také umožňuje „načíst“ moduly iptables a používat je a pokročilým způsobem konfigurovat bránu firewall, například máme následující:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

To můžeme dát do celého konfiguračního souboru.

Abychom mohli použít pravidla zavedená ve Fermu, budeme muset provést následující příkaz:

ferm -i -t 10 /etc/ferm/ferm.conf

Importujte pravidla iptables do Ferm

Ferm nám umožňuje snadno a rychle importovat pravidla iptables, která aktuálně provádíme, do souboru Ferm pro pozdější úpravy. Abychom to mohli udělat, budeme prostě muset mít načtená pravidla iptables v paměti (aktuálně používané) a spustit tento příkaz:

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

Když ho spustíme, můžeme vidět pravidla iptables přímo v Fermově syntaxi.

Pokud chcete transformovat pravidla iptables, která máte v textovém souboru, na Ferm, můžete provést následující příkaz:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

Jak jste viděli, ferm je skvělý frontend iptables, který nám umožní jej pokročilým způsobem konfigurovat, aniž byste se museli učit syntaxi iptables a správně organizovat pravidla v konfiguračním souboru. Podle našeho názoru se však domníváme, že správná konfigurace skriptu bash se všemi pravidly iptables nevyžaduje žádný frontend ani další software, i když to může být pro některé lidi užitečné. Musíme mít na paměti, že Nftables již obsahuje možnost konfigurace pravidel přímo v konfiguračním souboru, a nejen interaktivně prostřednictvím příkazů konzoly.