Portál AbcLinuxu, 30. dubna 2025 08:44
Cílem dnešního příspěvku je popsat základní konfiguraci Iptables a to tak, že by měla dostačovat k zabezpečení osobního PC. V případě námitek nebo konstruktivních poznámek máte možnost vyjádřit je v diskuzi. O Iptables toho bylo napsáno poměrně dost, ale nikde jsem nenašel ucelený, krátký a stručný přehled jak Iptables fungují a jak je nastavit – o toto se pokusím v dnešním příspěvku. Ještě bych chtěl dodat, že toto není rozhodně náhrada za manuál k Iptables. Budou popsány jen ty nejpoužívanější parametry a nastavení. PC zároveň slouží jako NAT pro další PC v LAN, která se prostřednictvím jeho připojují do internetu.
echo „1“ > proc/sys/net/ipv4/ip_forward
.ip route
a nebo netstat -r
.#politiky FW
/sbin/iptables -P INPUT DROP # vše co jde na vstup PC zahoď
/sbin/iptables -P FORWARD DROP # vše co chce jen projít počítačem zahoď
/sbin/iptables -P OUTPUT ACCEPT # vše co odchází z PC nech odejít
#NAT
echo "1" > /proc/sys/net/ipv4/ip_forward # povolení forwardingu v jádře
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # změna zdrojové LAN adresy na zdrojovou WAN adresu
/sbin/iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT #povolí vše z eth0 směřující na eth1
/sbin/iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT #povolí přeposílání z rozhraní WAN na rozhraní LAN u existujících a nebo souvisejících spojení
#FW pravidla
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # propust spojeni která byla inicializovaná zevnitř
/sbin/iptables -A INPUT -i lo -j ACCEPT #propust na vstup vše pokud je vstupní rozhraní loopback
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT #HTTP server, propustí vstupní data na port 80
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT #SSH server, propustí vstupní data na port 22
/sbin/iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT # FTP server, povolen rozsah portů 20-21
/sbin/iptables -A INPUT -p udp --dport 4672 -j # aMule , povolen UDP port 4672
/sbin/iptables -A INPUT -p tcp --dport 4662 -j # aMule , povolen TCP port 4662
/sbin/iptables -A INPUT -p ICMP --icmp-type echo-request -j ACCEPT
Sekce politiky: první pravidlo politiky říká, že všechny pakety určené pro náš PC budou zahozeny s výjimkou těch, které jsou povoleny v části FW pravidla a s výjimkou těch spojení která byla inicializována naším PC.
Druhé pravidlo politiky přikazuje zahodit každý paket, který by chtěl naším PC jen projít.
Třetí pravidlo politiky říká, že všechna odchozí spojení jsou povolena.service iptables stop
“iptables -F
“sh ./cesta/soubor
. Pravidla se načtou do paměti.service iptables save
“ (uloží se do /etc/sysconfig/iptables)service iptables restart
“ iptables-save > /cesta/k/novemu/souboru/s/pravidly/pro/iptables
uložíme pravidla do souboru ze kterého je bude iptables načítat. Ten má trochu jinou syntaxi než náš skript s pravidly. /etc/network/interfaces
umístíme pre-up /sbin/iptables-restore < /cesta/k/novemu/souboru/s/pravidly/pro/iptables
. Tím zajistíme, že při každém spuštění budou pravidla načtena.yum install ulogd
“, u Debianu by to bylo „aptitude install ulogd
“. Konfigurace tohoto daemona se provádí v souboru /etc/ulogd.conf
. Dále nebudu rozepisovat všechny direktivy tohoto konfiguračního souboru, ale uvedu 2 nejdůležitější: logfile
– určuje kde se budou logy ukládatloglevel
– určuje jak „podrobné“ logy budouhttp://nmap.org/man/sk/
. V případě použití TCPDUMP odkazuji na manuálové stránky. Pro vypsání aktuálního obsahu iptables použijeme příkaz: iptables -L
.http://deja-vix.sk/sysadmin/firewall.html#top
. Dále jsou iptables poměrně dobře vysvětleny v knížce od autora Petra Krčmáře: Postavte si počítačovou síť. Nakonec uvádím poměrně přehledný tutoriál na adrese http://forums.debian.net/viewtopic.php?f=16&t=16166
. Sice je to v angličtině, ale není se čeho bát – když jsme to zvládnul já zvládnete to i vy:)
Tiskni
Sdílej:
-m state --state NEW
u pravidel povolující přístup na port, nebo alespoň explicitně definovat, co se stane se spojeními v jiném než ESTABLISHED, RELATED stavu.
U natu vysvětlit k čemu je DNAT a hlavně SNAT pro forwardovaní portů.
Dál doporučuji doplnit target REJECT včetně ICMP hlášek a info o vlastních chainech.
Dále je vhodné použít-m state --state NEW
u pravidel povolující přístup na port, nebo alespoň explicitně definovat, co se stane se spojeními v jiném než ESTABLISHED, RELATED stavu.
Dál doporučuji doplnit target REJECT včetně ICMP hlášek a info o vlastních chainech.
Tady mi není jasny prvni krok... Pravidla pro pristup na konkretni porty tam prece mam a s -m state --state NEW jsem se jeste nesetkal(bohuzel). Taky bych byl rad kdyby jste objasnil co myslite tim REJECTEM vcetne ICMP hlasek. Snat a dnat jeste dopisu...
Pravidla pro pristup na konkretni porty tam prece mam a s -m state --state NEW
jsem se jeste nesetkal(bohuzel).
Takhle:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
Packety ve stavu ESTABLISHED, RELATED máš ošéfované již nahoře. Takže ti zbývají packety ve (dnes dalších možných stavech - může se v budoucnu měnit) stavech NEW a INVALID. Těmi povolovacími pravidly pro služby jsi chtěl zcela jistě pouštět nová připojení a žádná jiná.
Taky bych byl rad kdyby jste objasnil co myslite tim REJECTEM vcetne ICMP hlasek.
Zahazování packetů pomocí DROP nutí klientskou stranu čekat na IP timeout. Odmítání pomocí REJECT pošle okamžitě ICMP hlášku, že je port z nějakého důvodu uzavřen a klient nemusí čekat. Iptables umožňují vybrat správnou ICMP hlášku. Zde je mj. jiné vidět, k čemu může vést zahazování ICMP na vstupu do sítě.
Např:
-j REJECT --reject-with tcp-reset -j REJECT --reject-with icmp-port-unreachable
No jak pisete
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
ja nechapu na co to je kdyz mi FW jede i bez toho... Kdyz se prihalsuju na 22 tak to jede neni s tim problem... Nebo je tu jeste nejaka finta o ktere nevim?
Ano jede ti to. Stejně tak to pojede, když dáš iptables -P INPUT accept
.
Cílem je to co nejvíce zabezpečit. Můj příspěvek k bezpečnosti byl explicitně akceptovat pouze nová připojení. Což se v tomto případě rovná zahazovat INVALID, jak správně píše Michal. Ten skript by šel ještě vylepšit o ochranu proti spoofingu adres, proti DOS útokům atp. Pokud z toho bude nakonec článek, moc rád bych tam viděl i tyto věci. Firewallových skriptů jako je ten tvůj je po internetu tuna (tím jej nekritizuji), ale málokdo jde dál.
Tady porad nechapu co mate na mysli pod tim iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT. ja tam mam ty pravidla vypsana vsechna az na to ze tam nemam to new. Nevim k cemu to NEW slouzi kdyz mi to funguje i bez toho. Nova pripojeni ny tyto porty jsou automaticky prijata podle mych pravidel.
Omlouvam se nevsimnul jsem si vysvetleni... Jen bych dodal.... co vlastne patri do INVALID? Muzete mi to prosim vysvetlit zpusobem ze napr. do INPUT retezce patri vse co prichazi? Do NEW nove vytvarena spojeni? Clanek z toho asi nebude... Vubec posledni dobou nemam cas. Jinak samozrejme jsem tam chtel dat dalsi prvky jako ping flood atd. ale z casovych duvodu jsem po tom uz nepatral.
Chyba:
4)Pravidla z paměti uložíme příkazem „iptables save“ (uloží se do /etc/sysconfig/iptables) 5)Restartujeme iptables příkazem „iptables restart“
Je to:
service iptables save service iptables restart
Odstranit zmíňku o příkazu route
, nebo upozornit, že je pouze pro kernely do verze 2.2.
No, zcela určitě ne obecně. Gentoo:Je to:
service iptables save service iptables restart
/etc/init.d/iptables save # nebo rc-service iptables save
Týká se to chyby v zápisku:
Zprovoznění na systému CentOS(Red Hat, Fedora):
REJECT
, ne DENY
. Stavový firewall není stavový proto, že rozlišuje příchozí a odchozí komunikaci, ale proto, že umí sledovat spojení (tj. nehodnotí jen samotný paket, ale i spojení, ke kterému patří). Bez toho by nebylo možné dělat třeba NAT. Překládat „NAT“ jako „překlad adres“ není vhodné (tento termín se používá pro překlad DNS adres na IP adresy), spíš se používá „přepis adres“. route
je myslím pro kernely do verze 2.0.x, ve verzi 2.2 už bylo iproute2
, tedy příkaz ip
.
Možná by stálo za to doplnit, že příkazy pro uložení a obnovení stavu firewallu se jmenují iptables-save
a iptables-restore
– ty jsou ve všech distribucích, kde je iptables
. Skripty zmíněné v příspěvku jsou pak distribučně závislá nadstavba nad těmito skripty.
REJECT a "prepis" - opraveno.
Stavový firewall není stavový proto, že rozlišuje příchozí a odchozí komunikaci, ale proto, že umí sledovat spojení (tj. nehodnotí jen samotný paket, ale i spojení, ke kterému patří). Bez toho by nebylo možné dělat třeba NAT.
NAT by bez toho samozřejmě udělat šlo. Nešlo by bez toho udělat stavový překlad adres. Ve skutečnosti dokonce byla jakási podpora maškarády už v ipchains a jádře 2.2, tedy ještě před netfilterem a stavovou filtrací, ale byl to tak trochu bastl.
odchozí IP adresa : odchozí port
podle nějaké hash tabulky přidělit odchozí port, a tam už by v případě velkého počtu spojení asi reálně hrozily kolize. Ale je pravda, že když budu IP adresu a/nebo port měnit třeba náhodně, je to taky NAT, a stav si pamatovat nepotřebuju…
Route mi normalne funguje... zbytek jsem opravil...
Route mi normalne funguje
To je bohužel klamný dojem, který route
podle vytváří. Hledej komentáře Michala Kubečka na toto téma a zjistíš, že a proč nefunguje.
No tak to se mi to pekne posr***:( nekritizujte vsichni ten obrazek .... je jen symbolicky...da se rict ze jsem kaslal jak to bude vypadat hlavne ze bude schematicky spravne... nechci aby se mi to tu zvrhlo v diskuzi o pravech. Uz jsem psal autorovi toho obrazku(asi pred rokem a pul jsem se s nim osobne setkal) o svoleni k pouziti kdyz teda jde tak moc o prava.
P.S. nemazal jsme puvodniho autora... kdyz si ten obrazek najdete na netu uvidite co jsme mazal...
No na to bych se chtel zeptat.... kdo muze na abclinuxu psat clanky? Nebo jakym zpusobem bych dosahl toho abych je mohl psat aj ja?
Diky
kdo muze na abclinuxu psat clanky?Každý...
Nebo jakym zpusobem bych dosahl toho abych je mohl psat aj ja?Domluvíš se s šéfredaktorem, jestli je o tvoje téma zájem, napíšeš článek, pošleš ho redaktorovi a je to.
No nevolil bych tak hruba slova jako vykradeny... Pouzil jsem obrazek co jsem nasel kdyz jsem sam mel za ukol nastudovat funkci iptables. Jinak bych dodal ze vse co jsem napsal v clanku jsem nekde nasel, precetl a udelal vhodny vycuc. Muj blog pisu proto abych zde zdokumentoval reseni problemu se kterymy jsmese setkal. Myslite ze ostatni prispevky si cucam z prstu? Samozrejme mam to nekde vyctene... z diskuzi, clanku atd. Tady se tomu snazim dat vhodnou formu ....dat to do jednoho celku a zpristupnit to ostatnim...neberu za to zadne penize nechlubim se tim...jen mi prislo zbytecne kdyz jsme nabyl urcitych znalosti je nechat jen tak zapomenout. To je vse...
P.S. Trochu jsme se bal ze se ozve nekdo takovy...co se tyce autorskych prav. V nejhorsim obrazek teda prekreslim.
OK zkusme se ted bavit jako lidi kterym uz bylo 18 a kteri nejsou nejak zaujati. Podivejte ja nema zkusenost s publikovanim... nevedel jsem ze z jednoho obrazku bude takovy pruser. Takze to berme tak ze se to proste stalo. priste si dam pozor a ted udelam vse pro co nejrychlejsi napravu. Autorovi jsem napsal, pripadne teda uvedu zdroje ze kterych jsem "citoval." Jo to OK nebo jsem jeste neco opomenul?? Ukonceme prosim uz tema vykradani... pracuju na tom abych to napravil co nejdrive.
OK zkusme se ted bavit jako lidi kterym uz bylo 18 a kteri nejsou nejak zaujati. Podivejte ja nema zkusenost s publikovanim... nevedel jsem ze z jednoho obrazku bude takovy pruser.
Neznalost zákona neomlouvá.
Mate pravdu a souhlasim s Vami. Ziskal jsem souhlas autora s publikovanim obrazku. Snad uz to je OK a tohle tema muzeme brat jako uzavrene.
Ted jsem Vas nepochopil... Co myslite tim okecavanim. Bylo to proste tak ze jsem pouzil vsech dostupnych zdroju co jsem mel a nasel k tomu abych napsal tento clanek. Nelamal jsem si hlavu s nejakyma pravama. Az jsem za to sklidil kritiku zacal jsem to resit. Napsal jsem autorovi obrazku a mam od neho svoleni k publokaci. Pokud myslite okecavanim to ze jsem se branil, ze jsem nevedel... tak co jsem na to mel rict? Snazim se uz jen o ukonceni tehle debaty o pravech, protoze za timto ucelem jsem clanek nenapsal a popravde neni to zrovna tema ktere by me zajimalo. Myslim ze chybu jsem uz uznal, napravil, taky jsem se omluvil a ze uz se o tom nemusime bavit. Priste si dam samozrejme vetsi pozor na to z ceho cerpam. Mam ale pocit ze nekteri proste budou porad rypat a starat se v tom ze jsem mel udelat to co uz tu bylo zmineno x-krat. Byl bych radeji za konstruktivni prinosne prispevky tykajici se tematu clanku a ne jeho "vedlejsich nasledku,"
No nevolil bych tak hruba slova jako vykradeny... Pouzil jsem obrazek co jsem nasel kdyz jsem sam mel za ukol nastudovat funkci iptables. Jinak bych dodal ze vse co jsem napsal v clanku jsem nekde nasel, precetl a udelal vhodny vycuc. Muj blog pisu proto abych zde zdokumentoval reseni problemu se kterymy jsmese setkal. Myslite ze ostatni prispevky si cucam z prstu? Samozrejme mam to nekde vyctene... z diskuzi, clanku atd. Tady se tomu snazim dat vhodnou formu ....dat to do jednoho celku a zpristupnit to ostatnim...neberu za to zadne penize nechlubim se tim...jen mi prislo zbytecne kdyz jsme nabyl urcitych znalosti je nechat jen tak zapomenout. To je vse...
a
OK zkusme se ted bavit jako lidi kterym uz bylo 18 a kteri nejsou nejak zaujati. Podivejte ja nema zkusenost s publikovanim... nevedel jsem ze z jednoho obrazku bude takovy pruser. Takze to berme tak ze se to proste stalo. priste si dam pozor a ted udelam vse pro co nejrychlejsi napravu.
To jsou prostě kecy. Ale šlechtí tě, že to řešíš.
OK zkusme se ted bavit jako lidi kterym uz bylo 18 a kteri nejsou nejak zaujati.
Právě lidé, kterým už bylo osmnáct, by měli mít aspoň nějaké základní právní (a hlavně morální) vědomí, které by jim mělo napovědět, že jen tak zkopírovat obrázek cizí práce do své není v pořádku.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.