Na první pohled mohou pravidla IPTables vypadat záhadně.
V tomto článku jsem uvedl 25 praktických pravidel IPTables, která můžete zkopírovat/vložit a použít pro své potřeby.
Tyto příklady budou sloužit jako základní šablony pro úpravu těchto pravidel tak, aby vyhovovala vašim konkrétním požadavkům.
Pro snadnou orientaci je všech těchto 25 pravidel iptables ve formátu skriptu shell:iptables-rules
1. Smazat existující pravidla
Než začnete vytvářet novou sadu pravidel, možná budete chtít vyčistit všechna výchozí pravidla a stávající pravidla. K tomu použijte příkaz iptables flush, jak je ukázáno níže.
iptables -F (or) iptables --flush
2. Nastavit výchozí zásady řetězce
Výchozí zásada řetězce je ACCEPT. Změňte toto na DROP pro všechny řetězce INPUT, FORWARD a OUTPUT, jak je znázorněno níže.
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
Když nastavíte výchozí zásadu řetězce INPUT i OUTPUT jako DROP, pro každý požadavek na pravidlo brány firewall, který máte, byste měli definovat dvě pravidla. tj. jeden pro příchozí a jeden pro odchozí.
Ve všech níže uvedených příkladech máme pro každý scénář dvě pravidla, protože jsme nastavili DROP jako výchozí zásadu pro INPUT i OUTPUT řetězec.
Pokud důvěřujete svým interním uživatelům, můžete poslední řádek výše vynechat. tj. Ve výchozím nastavení nezahazovat všechny odchozí pakety. V takovém případě pro každý požadavek na pravidlo brány firewall, který máte, stačí definovat pouze jedno pravidlo. tj. definovat pravidlo pouze pro příchozí, protože odchozí je ACCEPT pro všechny pakety.
Poznámka: Pokud nevíte, co řetězec znamená, měli byste se nejprve seznámit se základy IPTables.
3. Blokovat konkrétní ip-adresu
Než budeme pokračovat dále, uvedeme další příklady, pokud chcete zablokovat konkrétní ip-adresu, měli byste to nejprve udělat, jak je uvedeno níže. Změňte „x.x.x.x“ v následujícím příkladu na konkrétní IP adresu, kterou chcete blokovat.
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
To je užitečné, když v souborech protokolu najdete nějaké podivné aktivity z konkrétní IP adresy a chcete tuto IP adresu dočasně zablokovat, zatímco budete provádět další průzkum.
Můžete také použít jednu z následujících variant, která pro tuto IP adresu blokuje pouze TCP provoz na připojení eth0.
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
4. Povolit VŠECHNY příchozí SSH
Následující pravidla povolují VŠECHNA příchozí ssh připojení na rozhraní eth0.
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Poznámka :Pokud chcete přesně porozumět tomu, co každý z argumentů znamená, měli byste si přečíst Jak přidat pravidla brány firewall IPTables
5. Povolit příchozí SSH pouze z konkrétní sítě
Následující pravidla povolují příchozí připojení ssh pouze ze sítě 192.168.100.X.
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Ve výše uvedeném příkladu můžete místo /24 použít také úplnou masku podsítě. tj. „192.168.100.0/255.255.255.0“.
6. Povolit příchozí HTTP a HTTPS
Následující pravidla povolují veškerý příchozí webový provoz. tj. přenos HTTP na port 80.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Následující pravidla povolují veškerý příchozí zabezpečený webový provoz. tj. přenos HTTPS na port 443.
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
7. Kombinujte více pravidel dohromady pomocí MultiPorts
Když povolujete příchozí spojení z vnějšího světa na více portů, místo psaní jednotlivých pravidel pro každý port je můžete zkombinovat pomocí rozšíření pro více portů, jak je uvedeno níže.
Následující příklad umožňuje veškerý příchozí provoz SSH, HTTP a HTTPS.
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
8. Povolit odchozí SSH
Následující pravidla povolují odchozí připojení ssh. tj. Když ssh provedete zevnitř na externí server.
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Upozorňujeme, že toto je mírně odlišné od pravidla příchozího příjmu. tj. Povolujeme stav NEW i ESTABLISHED na OUTPUT řetězci a pouze stav ESTABLISHED na INPUT řetězci. U příchozího pravidla je to naopak.
9. Povolit odchozí SSH pouze do určité sítě
Následující pravidla povolují odchozí ssh připojení pouze do určité sítě. tj. zevnitř používáte ssh pouze do sítě 192.168.100.0/24.
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10. Povolit odchozí HTTPS
Následující pravidla umožňují odchozí zabezpečený webový provoz. To je užitečné, když chcete svým uživatelům povolit internetový provoz. Na serverech jsou tato pravidla také užitečná, když chcete použít wget ke stažení některých souborů zvenčí.
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Poznámka:Pro odchozí webový provoz HTTP přidejte dvě další pravidla jako výše a změňte 443 na 80.
11. Vyrovnání zátěže Příchozí webový provoz
Můžete také vyrovnávat zatížení příchozího webového provozu pomocí pravidel brány firewall iptables.
Toto používá n-tou příponu iptables. Následující příklad zatížení vyrovnává provoz HTTPS na tři různé IP adresy. Pro každý 3. paket je zátěž vyvážena na příslušný server (pomocí čítače 0).
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
12. Povolit ping zvenku dovnitř
Následující pravidla umožňují externím uživatelům pingnout vaše servery.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
13. Povolit ping zevnitř ven
Následující pravidla vám umožňují ping zevnitř na kterýkoli z vnějších serverů.
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
14. Povolit Loopback Access
Na svých serverech byste měli povolit úplný přístup zpětné smyčky. tj. přístup pomocí 127.0.0.1
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
15. Povolit z interní sítě na externí síť.
Na firewallovém serveru, kde je jedna ethernetová karta připojena k externímu a další ethernetová karta připojena k interním serverům, použijte následující pravidla, abyste umožnili komunikaci mezi interní sítí a externí sítí.
V tomto příkladu je eth1 připojeno k externí síti (internetu) a eth0 je připojeno k vnitřní síti (například:192.168.1.x).
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
16. Povolit odchozí DNS
Následující pravidla povolují odchozí připojení DNS.
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
17. Povolit připojení NIS
Pokud používáte NIS ke správě uživatelských účtů, měli byste povolit připojení NIS. I když je povoleno připojení SSH, pokud nepovolíte připojení ypbind související s NIS, uživatelé se nebudou moci přihlásit.
Porty NIS jsou dynamické. tj. když se spustí ypbind, přidělí porty.
Nejprve proveďte rpcinfo -p, jak je ukázáno níže, a získejte čísla portů. V tomto příkladu používal port 853 a 850.
rpcinfo -p | grep ypbind
Nyní povolte příchozí připojení k portu 111 a portům, které používal ypbind.
iptables -A INPUT -p tcp --dport 111 -j ACCEPT iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT iptables -A INPUT -p udp --dport 853 -j ACCEPT iptables -A INPUT -p tcp --dport 850 -j ACCEPT iptables -A INPUT -p udp --dport 850 -j ACCEPT
Výše uvedené nebude fungovat, když restartujete ypbind, protože v té době bude mít jiná čísla portů.
Existují dvě řešení:1) Použijte statickou IP-adresu pro váš NIS, nebo 2) Použijte některé chytré skriptovací techniky shellu k automatickému získání dynamického čísla portu z výstupu příkazu „rpcinfo -p“ a použijte ty, které jsou uvedeny výše. pravidla iptables.
18. Povolit Rsync z konkrétní sítě
Následující pravidla povolují rsync pouze z konkrétní sítě.
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
19. Povolit připojení MySQL pouze z konkrétní sítě
Pokud používáte MySQL, obvykle nechcete povolit přímé připojení zvenčí. Ve většině případů můžete mít webový server spuštěný na stejném serveru, kde běží databáze MySQL.
DBA a vývojáři se však možná budou muset přihlásit přímo do MySQL ze svého notebooku a stolního počítače pomocí klienta MySQL. V takovém případě možná budete chtít povolit své interní síti komunikovat s MySQL přímo, jak je uvedeno níže.
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
20. Povolit přenos Sendmail nebo Postfix
Následující pravidla povolují provoz pošty. Může to být sendmail nebo postfix.
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
21. Povolit IMAP a IMAPS
Následující pravidla povolují provoz IMAP/IMAP2.
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
Následující pravidla povolují provoz IMAPS.
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
22. Povolit POP3 a POP3S
Následující pravidla umožňují přístup POP3.
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
Následující pravidla umožňují přístup POP3S.
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
23. Zabraňte útoku DoS
Následující pravidlo iptables vám pomůže zabránit útoku Denial of Service (DoS) na váš webový server.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
Ve výše uvedeném příkladu:
- -m limit:Používá příponu limit iptables
- –limit 25/min:Omezuje pouze maximálně 25 připojení za minutu. Změňte tuto hodnotu na základě vašeho konkrétního požadavku
- –limit-burst 100:Tato hodnota označuje, že limit/minuta bude uplatněna až poté, co celkový počet připojení dosáhne úrovně limit-burst.
24. Přesměrování portů
Následující příklad směruje veškerý provoz, který přichází na port 442 na 22. To znamená, že příchozí připojení ssh může pocházet z portu 22 i 422.
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
Pokud provedete výše uvedené, musíte také výslovně povolit příchozí připojení na portu 422.
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
25. Zaznamenat zahozené pakety
Můžete také chtít zaznamenat všechny zahozené pakety. Tato pravidla by měla být dole.
Nejprve vytvořte nový řetězec s názvem LOGGING.
iptables -N LOGGING
Dále se ujistěte, že všechna zbývající příchozí připojení skočí do řetězce LOGGING, jak je znázorněno níže.
iptables -A INPUT -j LOGGING
Dále zaprotokolujte tyto pakety zadáním vlastní „předpony protokolu“.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
Nakonec tyto pakety zahoďte.
iptables -A LOGGING -j DROP
Všech výše uvedených 25 pravidel iptables je ve formátu skriptu shell:iptables-rules
Předchozí články ze série iptables:
- Výukový program brány firewall systému Linux:Tabulky IPTables, řetězce, základy pravidel
- IPTables Flush:Smazat / odebrat všechna pravidla na RedHat a CentOS Linux
- Linux IPTables:Jak přidat pravidla brány firewall (s příkladem Allow SSH)
- Linuxové IPTables:Příklady pravidel příchozí a odchozí pošty (SSH a HTTP)