Úvod
V tomto článku si probereme několik základních kroků, které můžete podniknout při odstraňování problémů, se kterými se můžete setkat s tím, aby vaše pravidla iptables dělala to, co byste od nich mohli chtít.
Předpoklady
Server se systémem CentOS 6.x (nebo jakákoli distribuce Linuxu)
iptables nainstalované a nakonfigurované (pro základní konfiguraci viz Základní konfigurace souboru IPTables)
Základní řešení problémů s IPTables
Jedním z užitečných doplňků k vytváření pravidel iptables je nastavení protokolování. Protokolování používá speciální cíl v sadě nástrojů iptables, který vede výběrový výstup do souborů protokolu vašeho operačního systému (dmesg nebo systemd).
Na příkazovém řádku:
sudo iptables -A INPUT -j LOG --log-prefix DROPPED-INGRESS-
Nebo ve vašem souboru /etc/sysconfig/iptables:
Ukázka syntaxe protokolování
Rozbalíme syntaxi:
* ‘-A INPUT
‘ připojí toto pravidlo na konec řetězce INPUT. Pamatujte, že pořadí pravidel je důležité, takže pokud toto pravidlo umístíte za pravidlo, které snižuje nebo odmítá provoz, nebude nikdy použito. Více o tom, když probereme --log-prefix
níže.
* ‘-j LOG
‘ přeskočí na LOG
cílová. Tento cíl je speciální, nazývaný „nekoncový“ cíl. Na rozdíl od nejběžněji používaných cílů (jako je ACCEPT
, DROP
nebo REJECT
), to nezabrání iptables v analýze dalších pravidel. Když je tedy toto pravidlo vyvoláno, zaprotokoluje paket (a může provést další volby, pokud jsou specifikovány v následujících možnostech), a poté pokračuje ve vyhodnocování pravidel ve stejném řetězci, dokud nenarazí na odpovídající pravidlo s ukončovacím cílem nebo dokud překoná poslední pravidlo v řetězci a následuje výchozí cíl.
* ‘--log-prefix DROPPED-INGRESS-
‘ přidá ke každé položce protokolu řetězec „DROPPED-INGRESS-“. Toto přidání může být užitečné pro filtrování nebo vyhledávání v dlouhém souboru protokolu. „--log-prefix
” může mít řetězec o délce až 256 znaků. Protože toto pravidlo je posledním pravidlem v tomto INPUT
řetězce, toto zaprotokoluje každý paket, který neodpovídá žádnému z výše uvedených pravidel, a bude zpracován pomocí výchozí zásady (v tomto případě DROP
).
Chcete-li vidět, která z vašich pravidel jsou vyvolána (a co je možná stejně důležité, která nikoli), můžete se podívat na počítadla paketů a provozu. Použijte ‘-v
“ do položky „iptables
‘ příkaz k zobrazení čítačů (a také některých dalších informací):
sudo iptables -vL INPUT
nebo
sudo iptables -nvL INPUT
Výstup jednoho z těchto příkazů se zobrazí ve sloupcích na levé straně pro čítače paketů a bajtů pro každé pravidlo. „-L
Možnost ‘ označuje, že chceme, aby byla pravidla uvedena (všimněte si, že tato konkrétní možnost je velká). „-n
‘ znamená, že nechceme překládat IP adresy na jejich názvy hostitelů (v delších seznamech může toto zpětné rozlišení názvů způsobit zbytečnou režii serveru a vaše řešení problémů bude nepříjemně zpomalovat). Každý příznak můžete použít samostatně (-n
-v
-L
, např.) nebo společně, jak je uvedeno výše, ale pozor:„L
‘ musí být poslední, protože hledá další vstup ve formě názvu řetězce, který se má vypsat (pokud není nic zadáno, výchozí je vypsat všechny řetězce v tabulce filtrů).
iptables -nvL INPUT Výstup
Všimněte si, že jeden paket zasáhl moje pravidlo ssh pro povolení všech a několik paketů zasáhlo první povolený RELATED/ESTABLISHED
pravidlo (to by odpovídalo mé relaci ssh na tento server). Také vidím, že moje pravidla pro povolení provozu ssh z rozsahu 192.168.50.0/24 nemají žádné výsledky. Takže, kdybych například měl někoho, kdo řekl, že na tento server nemá přístup z tohoto rozsahu, viděl jsem, že jeho pokusy se na tento server ani nedostaly.
Je docela možné, že vaše počítadla bajtů paketů narostou dostatečně vysoko, že hodnoty budou na konci zkráceny „K“, „M“ nebo dokonce „G“, což odpovídá 1 000, 1 000 000 nebo 1 000 000 000. Pokud stále chcete vidět nezkrácené počty, uveďte „-x
příznak ‘:
sudo iptables -nvxL INPUT
Pokud nechcete, aby se museli zabývat velkými počty, můžete je vynulovat (vynulovat) pomocí „-Z
příkaz ‘ (opět si uvědomte, že tento příznak je velkými písmeny). Můžete vynulovat počty pro všechny řetězce, konkrétní řetězec nebo pro konkrétní řádek v řetězci. Respektive:
sudo iptables -Z
sudo iptables -Z INPUT
sudo iptables -Z INPUT 1
Poslední příklad by pouze vynuloval čítače pro řádek číslo 1 v INPUT
řetěz.
Čítače by se také vynulovaly pokaždé, když znovu načtete iptables (ať už při restartu serveru nebo při opětovném načtení iptables služby sudo). Toto však nejsou nejideálnější způsoby, jak tento úkol splnit.
Můžete také chtít získat více v reálném čase prozkoumat vaše počítadla iptables. Zde je „watch
‘ příkaz se hodí. „Watch
‘ nám umožňuje opakovat stejné příkazy a sledovat výstup každou chvíli (výchozí nastavení je každé 2 sekundy).
sudo watch iptables -nvL INPUT
Při „watch
‘ samo o sobě nevyžaduje přístup sudo, pokud to vyžaduje příkaz, který budete sledovat, můžete předřadit ‘sudo
‘ do ‘watch
‘, abyste měli oprávnění root pro příkaz, který chcete sledovat. Také, pokud byste chtěli sledovat výstup pomocí kanálu „grep
‘, budete chtít dát celý příkazový řetězec do jednoduchých uvozovek:
sudo watch 'iptables -nvL INPUT | grep tcp'
Chcete-li opustit „watch
‘, stiskněte <Ctrl-C>
.
Zjistěte více o našich hostingových službách VPS a virtuálních privátních serverech.