Portál AbcLinuxu, 9. května 2024 06:51


Dotaz: Neroutuje, pokud zapnu firewall

1.2.2005 19:14 Rozik | skóre: 14
Neroutuje, pokud zapnu firewall
Přečteno: 252×
Odpovědět | Admin
Dobry den, konocne se rysuje moje brzke pernamentni pripojeni k internetu a tak jsem se dokopal ke studii iptables, abych byl pripraven na nebezpeci z internetu. Dostal jsem se vsak do problemu a nevim jak dal :(. Za jakekoliv rady budu moc vdecny a pripadne vyreseni problemu mi udela obrovitanskou radost, nebot se snazim o rozchozeni firewallu jiz tyden :(.

Abych neodbocoval, situace je takovato.

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.255
/etc/sysconfig/network-scripts/ifcfg-eth1 - dano poskytovatelem inetu
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.65.3
NETMASK=255.255.255.128
GATEWAY=192.168.65.1
/etc/sysconfig/network-scripts/ifcfg-lo
DEVICE=lo
ONBOOT=yes
NAME=loopback
IPADDR=127.0.0.1
NETWORK=127.0.0.0
NETMASK=255.0.0.0
BROADCAST=127.255.255.255
Ping na lokalni sit i na AP do internetu funguje meho routeru funguje.

Routing jsem rozchodil nasledovne pomoci sh scriptu
# Vase IP adresa a vnejsi rozhrani
INET_IP="192.168.65.3"
INET_IFACE="eth1"

# IP a broadcast adresa a rozhrani vnitrni site
LAN1_IP="192.168.1.100/24"
LAN1_BCAST="192.168.100.255/32"
LAN1_IFACE="eth0"

# Lokalni loopback rozhrani
LO_IFACE="lo"
LO_IP="127.0.0.1/32"

# Cesta k programu iptables
IPTABLES="/sbin/iptables"

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
do teto chvile vse fungovalo tak jak ma i z klientu v siti eth0.

Pote jsem vsak nasel pusobivy script pro firewall na http://www.petricek.cz, ktery jsem upravil do nasledujici podoby a ejhle. Vse prestalo fungovat.

/etc/rc.d/firewall.sh
#!/bin/sh

# Vase IP adresa a vnejsi rozhrani
INET_IP="192.168.65.3"
INET_IFACE="eth1"

# IP a broadcast adresa a rozhrani vnitrni site
LAN1_IP="192.168.1.100/24"
LAN1_BCAST="192.168.100.255/32"
LAN1_IFACE="eth0"

# Lokalni loopback rozhrani
LO_IFACE="lo"
LO_IP="127.0.0.1/32"

# Cesta k programu iptables
IPTABLES="/sbin/iptables"

# Inicializace databaze modulu
/sbin/depmod -a

# Zavedeme moduly pro nestandardni cile
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE

# Modul pro FTP prenosy
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

# Zapneme routovani paketu
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# rp_filter na zamezeni IP spoofovani
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
   echo "1" > ${interface}
done

# Implicitni politikou je zahazovat nepovolene pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

Omlouvam se za nasledujici strankovou diru 
- nevim, proc to dela...
zadne radkovani ani strankovani tu neni...
#
# Retezec PREROUTING v NAT tabulce
#
# Presmerujeme port 2222 na port 22 (ssh) na stanici 192.168.1.1 - nas pokus server :D 
$IPTABLES -t nat -A PREROUTING -p tcp -d $INET_IP --dport 2222 -j DNAT --to 192.168.1.1:22

#
# Retezec POSTROUTING v NAT tabulce
#

# IP maskarada - SNAT
# NATujeme 
# $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP

# Pekna blbost, budeme to delat pomoci Masquerade, at se nemusime starat o pridelenou IP. Az budeme mit verejnou,
# budeme to delat pomoci SNATu...
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE


#
# Pridavne retezce pro snazsi kontrolu na rezervovane adresy
#

# Zahazovat a logovat (max. 5 x 3 pakety za hod)
$IPTABLES -N logdrop
$IPTABLES -A logdrop -m limit --limit 5/h --limit-burst 3 -j LOG --log-prefix "Rezervovana adresa: "
$IPTABLES -A logdrop -j DROP


# V tomto retezci se kontroluje, zda prichozi pakety nemaji nesmyslnou IP adresu
$IPTABLES -N IN_FW
$IPTABLES -A IN_FW -s 192.168.0.0/16 -j logdrop # rezervovano podle RFC1918
$IPTABLES -A IN_FW -s 10.0.0.0/8 -j logdrop     #   ---- dtto ----
$IPTABLES -A IN_FW -s 172.16.0.0/12 -j logdrop  #   ---- dtto ----  
$IPTABLES -A IN_FW -s 96.0.0.0/4 -j logdrop     # rezervovano podle IANA
# ... dalsi rezervovane adresy mozno doplnit podle 
#       http://www.iana.com/assignments/ipv4-address-space


# TOS flagy slouzi k optimalizaci datovych cest. Pro ssh a ftp (telnet)
# pozadujeme minimalni zpozdeni. Pro ftp-data zase maximalni propostnost
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput



#
# Retezec FORWARD
#

# Navazovani spojeni ala Microsoft -
# Paket navazuje spojeni, ale nema nastaveny priznak SYN, pryc s nim
$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -A FORWARD -p tcp -i $INET_IFACE --tcp-flags SYN,FIN SYN,FIN -j LOG -m limit --limit 10/m --log-prefix="bogus packet: "
$IPTABLES -A FORWARD -p tcp -i $INET_IFACE --tcp-flags SYN,FIN SYN,FIN -j DROP

# Nechceme rezervovane adresy na internetovem rozhrani
$IPTABLES -A FORWARD -i $INET_IFACE -j IN_FW

# Umoznit presmerovani portu na stanici (ssh na pokus server) dovnitr site
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -p tcp -d 192.168.1.1 --dport ssh -j ACCEPT

# Routing zevnitr site ven neomezujeme
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT

# Routing zvenku dovnitr pouze pro navazana spojeni (stavovy firewall)
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# Ostatni pakety budou zahozeny, tak je budeme logovat (12 x 5 pkt/hod)
$IPTABLES -A FORWARD -m limit --limit 12/h -j LOG --log-prefix "forward drop: "


#
# Retezec INPUT
#

# Navazovani spojeni ala Microsoft -
# Paket navazuje spojeni, ale nema nastaveny priznak SYN, pryc s nim
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Portscan s nastavenym SYN,FIN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE --tcp-flags SYN,FIN SYN,FIN -j LOG -m limit --limit 10/m --log-prefix="bogus packet: "
$IPTABLES -A INPUT -p tcp -i $INET_IFACE --tcp-flags SYN,FIN SYN,FIN -j DROP

# Nejprve se zbavime nezadoucich adres
$IPTABLES -A INPUT -i $INET_IFACE -j IN_FW

# Pravidla pro povolene sluzby 
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 21 -j ACCEPT  #FTP server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 22 -j ACCEPT  #SSH server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 25 -j ACCEPT  #SMTP server
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 53 -j ACCEPT  #DNS server UDP
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 53 -j ACCEPT  #DNS server TCP
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j ACCEPT  #WWW server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 110 -j ACCEPT #POP3 server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 143 -j ACCEPT #IMAP server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 443 -j ACCEPT #HTTPS server
# $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 873 -j ACCEPT #rsync server

# Sluzbu AUTH neni dobre filtrovat pomoci DROP, protoze to muze
# vest k prodlevam pri navazovani nekterych spojeni. Proto jej
# sice zamitneme, ale tak, aby nedoslo k nezadoucim prodlevam.
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -m limit --limit 12/h -j LOG
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -j REJECT --reject-with tcp-reset #AUTH server

# Propoustime pouze ICMP ping
$IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-request -j ACCEPT

# Loopback neni radno omezovat
$IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT

# Stejne jako pakety z lokalni site, jsou-li urceny pro nas
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $INET_IP -j ACCEPT

# Broadcasty na lokalnim rozhrani jsou take nase
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_BCAST -j ACCEPT

# MS klienti maji chybu v implementaci DHCP
$IPTABLES -A INPUT -i $LAN1_IFACE -p udp --dport 67 -j ACCEPT

# Pakety od navazanych spojeni jsou v poradku
$IPTABLES -A INPUT -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT

# Vsechno ostatni je zakazano - tedy logujeme, maxim. 12x5 pkt/hod 
$IPTABLES -A INPUT -m limit --limit 12/h -j LOG --log-prefix "INPUT drop: "

#
# Retezec OUTPUT
#

# TOS flagy slouzi k optimalizaci datovych cest. Pro ssh, ftp (telnet)
# pozadujeme minimalni zpozdeni. Pro ftp-data zase maximalni propostnost
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput

# Povolime odchozi pakety, ktere maji nase IP adresy
$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $INET_IP -j ACCEPT

# Povolime DHCP broadcasty na LAN rozhrani
$IPTABLES -A OUTPUT -o $LAN1_IFACE -p UDP --dport 68 --sport 67 -j ACCEPT

# Ostatni pakety logujeme (nemely by byt zadne takove)
$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT drop: "
Po tomto zasahu mi prestalo routovani behat a nevim proc. Po dlouhem zjistovani jsem zjistil, ze to neni jen problem z klientu, ale i ze samotneho routeru, protoze nebylo mozne pingnout AP. Z nasledujiciho jsem usoudil, ze zrejme zahazuji i pakety, ktery zahazovat nemam a vubec nevim kde. Kde je chyba? Ve skriptu jsem iptablu rekl, at loguje, ale log jsem nenasel. Kam vubec loguje? Pouzivam distribuci RH 9.0. Kernel puvodni, iptables taktez.

Predem dekuji vsem zucastnenym.
-- Zadny uceny z nebe nespad --
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.2.2005 21:00 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takhle to dopadá když někdo bezmyšlenkovitě přepíše nějakej text a neví co to dělá :-)

Takže si nastudujte jak to chodí

Nat howto CZ Jednoduchý firewall Další firewall

Jinak pro místní síť bych zvolil jinou sadu IP než co máte do sítě na internet. Takže pro svoji místní zvolte IP v rozsahu 10.0.y.x a pro tu k providerovy 192.168.s.d pokud to tak nezměníte tak budete muset šahat do nastavení routování a dělat další opičárny s maskamy sítě.

Jinak logy /var/log/* (* asi messages pokud jsi to nezměnil jinam)
1.2.2005 21:36 Rozik | skóre: 14
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Jenze ja to neopsal bezmyslenkovite :-) - peclive jsem prostudoval clanky na www.petricek.cz - psal tutorialek "stavime firewall" na root.cz - 3. dilny clanek. Vim, co ten script ma delat, nebot veskera syntaxe a dana problematika je v techto clancich vysvetlena. Zmena IP adres je nesmyslna - zakonite to musi fungovat i na soucasnem nastaveni - tj. 192.168.65.a a 192.168.1.b Uz jste videl lokalni sit zacinajici rozsahem 10.0.x.y? :-) Pokud se nemylim, tak prave pro tyto ucely je vymezen rozsah 192.168.c.d. Jelikoz muj provider je WIFI sit pripojena do internetu, neni divu ze se setkavame prave se sitemi 192.168.65-provider.a a 192.168.1.b-ja. Jestlize routovani funguje (i pomoci IP masqurade), nez doplnim dalsi pravidla input, output a forward, tak to jit musi. Pravdepodobne ve skriptu delam stale dokola jednu a tu samou chybu (ktera mi filtruje vic, nez si myslim ze ma filtrovat) a nevim kde...

o /var/log/message jsem si to myslel taky, ale ouvej. Rovnez /var/log/secure je prazdne. U iptables jsem nic neprenastavoval...

I tak diky za reakci :-)
-- Zadny uceny z nebe nespad --
Luboš Doležel (Doli) avatar 1.2.2005 22:05 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Vemte si Guarddog nebo KMyFirewall a naklikejte si to. Ono se při tom klikání většinou přecejen neudělá tolik chyb....
1.2.2005 22:08 Michal Kubeček
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
1. Všechny tři rozsahy 10.0.0.0/8, 172.16.0.0/12 a 192.168.0.0 jsou rovnocenné a jsou určeny k témuž účelu. Je to dáno historicky, protože v pre-CIDR terminologii to byl jeden rozsah třídy A, 16 rozsahů třídy B a 256 rozsahů třídy C. Ten "áčkový" se naopak používá velmi často, protože je největší.

2. Pokud, jak sám píšete, je problém i s provozem, který pochází přímo z vašeho stroje, proč píšete, že váš počítač neroutuje?

3. V první fázi se vykašlete na filtraci v řetězci OUTPUT. Na vašem stroji snad nic tak hrozného neběží, a pokud ano, je to problém sám o sobě. Nemluvě o tom, že si nejsem úplně jistý, nakolik je korektní testovat zdrojovou adresu v řetězci OUTPUT.

4. Automatické povolení všeho z vnitřní sítě není příliš šťastný nápad. Představa, že ti zlí jsou jen venku, je jednou z nejčastějších chyb.

5. Ale hlavní kámen úrazu vidím v řetězci IN_FW. Pokud segment, do kterého připojujete své vnější rozhraní, používá rozsah 192.168.65.0/25, pak nemůžete zahazovat celý rozsah 192.168.0.0/16, jinak se nedomluvíte s nikým, kdo je "příliš blízko"

6. Přimlouval bych se za trochu konzistentnější pojmenování proměnných. Proč je INET_IP adresa vašeho vnějšího rozhraní, ale LAN1_IP celý rozsah vnitřní sítě? Navíc broadcast adresu vnitřní sítě máte špatně.

7. Rozsah adres pro lokální smyčku je 127.0.0.0/8, ne 127.0.0.1/32.

1.2.2005 22:58 Rozik | skóre: 14
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
ad 1) omlouvam se za neznaloust. Zrejme jsem cerpal az z moc starych materialu, nebo mi to neutkvelo v pameti :-) - alespon jsem zase o neco chytrejsi :-) System IP pro intranet je vskutku vymakany.

ad 2) hovoril jsem, ze prestava routovat az kdyz aplikuji druhy script.

ad 3) zde chyba nebyla, ale i tak jsem cely output odstranil

ad 4) Nechaval jsem si zatim vse volne, abych nenarusil chod na vnitrni siti. Da se rici, ze jsem testoval firewall tam, kde jsem nemohl zpusobit skodu. Samozrejme mam v planu napsat i pravidla pro vnitrni sit.

ad 5) To je presne to o cem jsem hovoril. Nekde mam chybu, ale nevim kde :-) Mockrat diky. Po tomto ukonu se mi routrovani opetovne rozbehlo :-)

ad 6) napravil jsem. Jak by broadcast adresa vnitřní sítě tedy mela vypadat?

ad 7) Skolacka chyba :-)
-- Zadny uceny z nebe nespad --
1.2.2005 23:20 Michal Kubeček
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Ad 2. Měl jsem na mysli ten termín routování. S routingem má totiž netfilter společné jen to, že přepisem cílové adresy (případně u policy routingu ještě manipulacemi v tabulce mangle) můžete ovlivnit, jak bude paket směrován.

Ad 5. Problém je v tom, že 192.168.65.0/25 je podmnožinou 192.168.0.0/16, takže přijde-li zvenku jakýkoli paket s takovou zdrojovou adresou, vy ho v IN_FW zahodíte. To by se ale mělo týkat jen paketů, které k vám přijdou z takových adres, se zbytkem světa byste měl být schopen komunikovat i s touto chybou.

Ad 6. Jako broadcast adresa se obvykle používá poslední adresa rozsahu, tj. ta, která má host part vyplněnou jedničkami. V případě 192.168.1.0/24 by to bylo 192.168.1.255. Nejjednodušší je podívat se, co vám ukáže 'ip addr show dev eth0'.

1.2.2005 23:36 Rozik | skóre: 14
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
ad 2) v tom pripade ip masquarade :-)

ad 5) jiz pri minulem prispevku jsem vedel, o cem mluvite - proto se to opet rozbehlo :-)

ad 6) uz vim, ktera bije - na stroji jsem v dobe, kdy jsem cetl Vasi reakci, jiz mel opravenou broadcast adresu na 192.168.1.255 a proto jsem nevedel o cem mluvite. Po tom, co jsem se podival, co jsem zde uverejnil (192.168.100.255) jiz chapu.
-- Zadny uceny z nebe nespad --
1.2.2005 23:26 ...... | skóre: 41 | blog: ...
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
jak to může fungovat, když firewall od Petříčka je dělaný pro router s veřejnou IP a v IN_FW testuje zda se na venkovním rozhraní neocitla adresa z výše uvedených rozsahů? Jelikož provider i vy používáte tyto rozsahy, tak jste si zakázal všechno!
hawk
1.2.2005 23:34 Michal Kubeček
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Všechno ne, jen to, co přijde z toho rozsahu. Problém by měl nastat jen při komunikaci se "sousedy" nebo se službami, poskytovanými providerem (MTA, nameserver apod.).
2.2.2005 12:19 ...... | skóre: 41 | blog: ...
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
no myslel jsem všechno na venkovním rozhraní.....protože IN_FW kontroluje jen zde. Díky za opravu
2.2.2005 13:43 Michal Kubeček
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Možná tu došlo trochu k nedorozumění, takže to pro jistotu ještě upřesním. Ta chyba se dotýká jen paketů, které přijdou na vnější rozhraní a mají zdrojovou adresu v některém z rezervovaných rozsahů, což je pravděpodobně jen bezprostředně přiléhající segment. Provoz z celého Internetu přichází také na vnější rozhraní, ale toho by se to dotknout nemělo (není-li tam ještě nějaký jiný problém).
1.2.2005 23:42 Rozik | skóre: 14
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
o par reakci vyse jsem dekoval, ze me na to upozornili :-) => jiz to z IN_FW bylo odstraneno.
-- Zadny uceny z nebe nespad --
1.2.2005 23:58 Rozik | skóre: 14
Rozbalit Rozbalit vše Re: Neroutuje, pokud zapnu firewall
Odpovědět | | Sbalit | Link | Blokovat | Admin
Lidicky, mockrat Vam dekuji, ze jste se zucastnili teto konverzace a pomohli mi najit tu chybicku v IN_FW. Dekuji mnohokrat!!!!!!!!!!!!!!!!!!
-- Zadny uceny z nebe nespad --

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.