Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Domácí firewall  (Přečteno 5262 krát)

jeryk

  • Návštěvník
  • Příspěvků: 8
Domácí firewall
« kdy: 28 Července 2006, 19:36:50 »
Zdravím UbuLidi

 všude se mluví o bezpečnosti a tak jsem si chtěl nastavit firewall. Jenže všude je popis, jak nastavit firewall na síťových prvcích. Jenže Ubu se používá předpokládám hlavně na domácích pc. Proto jsem se pokusil napsat script pro iptables pro domácí podmínky.
 Lokální služby jsou pouze pro lokální uživatele. Takže by třeba lokální apache neměl být vidět z venku.

 Prosím, jestli byste se podívali na script a řekli mi, jestli je dobře, či má někde chybu.

Díky


# ------------------------------------------------------------------------------
# nastaveni
# ------------------------------------------------------------------------------

# ip adresa a vnejsi rozhrani
INET_IP="1.2.3.4"
INET_IFACE="ppp0"

# dns servery providera
INET_IP_DNS_1="x.x.x.x"
INET_IP_DNS_2="x.x.x.x"

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

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

# ------------------------------------------------------------------------------
# zakladni akce
# ------------------------------------------------------------------------------

# zakazani routovani paketu
echo "0" > /proc/sys/net/ipv4/ip_forward

# implicitne jsou zakazany vsechny pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# ------------------------------------------------------------------------------
# INPUT - prichozi pakety
# ------------------------------------------------------------------------------

# spojeni na lokalnim pocitaci
$IPTABLES -A INPUT -p ALL -s $LO_IP -j ACCEPT

# spojeni s dns servery providera
$IPTABLES -A INPUT -p ALL -s $INET_IP_DNS_1 -j ACCEPT
$IPTABLES -A INPUT -p ALL -s $INET_IP_DNS_2 -j ACCEPT

# povoleni sluzeb z internetu
# $IPTABLES -A INPUT -p ALL -i $INET_IFACE -j ACCEPT         # vsechno
$IPTABLES -A INPUT -p tcp --dport 21 -i $INET_IFACE -j ACCEPT   # ftp
# $IPTABLES -A INPUT -p tcp --dport 22 -i $INET_IFACE -j ACCEPT   # ssh
# $IPTABLES -A INPUT -p tcp --dport 23 -i $INET_IFACE -j ACCEPT   # telnet
$IPTABLES -A INPUT -p tcp --dport 25 -i $INET_IFACE -j ACCEPT   # smtp
$IPTABLES -A INPUT -p tcp --dport 80 -i $INET_IFACE -j ACCEPT   # http
$IPTABLES -A INPUT -p tcp --dport 110 -i $INET_IFACE -j ACCEPT   # pop3
$IPTABLES -A INPUT -p tcp --dport 143 -i $INET_IFACE -j ACCEPT   # imap
$IPTABLES -A INPUT -p tcp --dport 443 -i $INET_IFACE -j ACCEPT   # https
# $IPTABLES -A INPUT -p tcp --dport 989 -i $INET_IFACE -j ACCEPT   # ftps-data
# $IPTABLES -A INPUT -p tcp --dport 990 -i $INET_IFACE -j ACCEPT   # ftps
$IPTABLES -A INPUT -p tcp --dport 993 -i $INET_IFACE -j ACCEPT   # imaps
$IPTABLES -A INPUT -p tcp --dport 995 -i $INET_IFACE -j ACCEPT   # pop3s

# servisni pakety
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 11 -j ACCEPT

# odfiltrovat pokusy o zahlceni icmp
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT

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

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

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

# ------------------------------------------------------------------------------
# OUTPUT - lokalne generovane pakety
# ------------------------------------------------------------------------------

# spojeni na lokalnim pocitaci
$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT

# spojeni s dns servery providera
$IPTABLES -A OUTPUT -s $INET_IP_DNS_1 -j ACCEPT
$IPTABLES -A OUTPUT -s $INET_IP_DNS_2 -j ACCEPT

# moje verejna adresa
$IPTABLES -A OUTPUT -o $INET_IFACE -j ACCEPT

# vse ostatni logovat
$IPTABLES -A OUTPUT -j LOG

Jendall

  • Aktivní člen
  • *
  • Příspěvků: 189
Domácí firewall
« Odpověď #1 kdy: 28 Července 2006, 22:58:50 »
Jen bych dodal takovou zakladni uvahu. Za prve co se tyka INPUT, pokud mame verejnou IP, tak by mel byt rozhodne input zakazany, coz mate. Dale by mely byt povolene jen porty(pro input), ktere budete potrebovat, jako "server" ...cili, pokud se budete chtit na ten pocitac dostat pres SSH odkudkoli, musime povolit port 22(to mate zakomentovane- zrejme momentalne nechcete vyuzivat a planujete do budoucnosti). Ovsem nechapu povoleni http,pop3,smtp,ftp a jeste neceho. Pokud planujete provozovat http server,ftp a mailovy server, tak to mate dobre(ale to uz neni moc domaci PC). Pro brouzdani po netu, vybirani posty toto nema vliv.... co se tyka icmp(nazval jste servisni packety), tak bych povolil jen odpoved na echo(ping):

 
Kód: [Vybrat]
# Allow incoming ICMP echo request and errors
    iptables -A INPUT --protocol icmp --icmp-type echo-request -j ACCEPT
    iptables -A INPUT --protocol icmp --icmp-type destination-unreachable -j ACCEPT
Co se tyka nastaveni OUTPUT, tak ja jej mam cele povolene a to z duvodu toho, ze na linuxu pokud vim nejsou zadne malware,spyware, adware a kdovijake potvurky jako u windows.
Hlavne nemate v OUTPUT povolene porty http,pop3,smtp,ftp ....s takto nastavenym outputem se dostanete maximalne na vas lokalni PC, na dns providera, na vasi verejnou IP ....a to je asi tak vse ....pokud jsem neprehledl, ze OUTPUT mate povolovany jeste nekde jinde

Pokud mohu doporucit a vas domaci pc bude pouze jako stanice, (nebudou na nem bezet serverove aplikace):

-povolit vse na lokalu(to mate)
-zakazat veskery provoz input a povolit maximalne nejaky port pro lepsi stahovani z bittorrent klientu(ani DNS nepotrebuji mit povoleno INPUT)
-output cely povolit
-icmp to co jsem napsal vyse a to na zahlceni icmp taky asi neni marne, ale to jsem nezkousel

jeryk

  • Návštěvník
  • Příspěvků: 8
Domácí firewall
« Odpověď #2 kdy: 29 Července 2006, 09:02:51 »
Aha, tak to jsem spatne pochopil INPUT parametr. Nechci nabízet světu http, pop3, smtp a další služby. Měl jsem za to povolit pristupove pakety těchto protokolů.

OUTPUT předpokládám jsem měl povolené tímto:
$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT

Takže po revizi by to mohlo vypadat následovně?
Děkuji

--------------------------------------------------------------------------------------------------------------------------

#!/bin/sh

# fwhome.sh - pravidla pro domaci firewall
#

# ------------------------------------------------------------------------------
# nastaveni
# ------------------------------------------------------------------------------

# lokalni loopback rozhrani
LO_IP="127.0.0.1/32"

# vnejsi rozhrani (eth0, ppp0)
INET_IFACE="ppp0"

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

# logovani datagramu, ktere nejsou propusteny
LOGGING=1

# ------------------------------------------------------------------------------
# zakladni akce
# ------------------------------------------------------------------------------

# odstraneni pravidel
$IPTABLES -F
$IPTABLES -X

# implicitne jsou zakazany vsechny pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP

# zakazani routovani paketu
echo "0" > /proc/sys/net/ipv4/ip_forward

# ------------------------------------------------------------------------------
# INPUT - prichozi pakety
# ------------------------------------------------------------------------------

# spojeni na lokalnim pocitaci
$IPTABLES -A INPUT -p ALL -s $LO_IP -j ACCEPT

# servisni pakety
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type destination-unreachable -j ACCEPT

# ochrana proti ping of death, odfiltrovat pokusy o zahlceni icmp
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT

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

# odmitnuti auth serveru
$IPTABLES -A INPUT -p TCP --dport 113 -j REJECT --reject-with tcp-reset

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

# ochrana pred ip spoofingem
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
   echo "1" > ${interface}
done  

$IPTABLES -N spoofing
$IPTABLES -A spoofing -s 192.168.0.0/16 -j DROP
$IPTABLES -A spoofing -s 172.16.0.0/12 -j DROP
$IPTABLES -A spoofing -s 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -j spoofing

# ochrana proti syn flooding, DoS utoku
$IPTABLES -N syn_flood
$IPTABLES -A INPUT -i $INET_IFACE -p tcp --syn -j syn_flood
$IPTABLES -A syn_flood -m limit --limit 1/s --limit-burst 5 -j RETURN
$IPTABLES -A syn_flood -j DROP

# ------------------------------------------------------------------------------
# logovani
# ------------------------------------------------------------------------------

if [ "$LOGGING" ]
then
   $IPTABLES -A INPUT -m limit --limit 12/h --limit-burst 5 -j LOG --log-prefix "INPUT DROP: " --log-level 6
   $IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "
fi

Jendall

  • Aktivní člen
  • *
  • Příspěvků: 189
Domácí firewall
« Odpověď #3 kdy: 29 Července 2006, 19:39:43 »
No, momentálně se iptalbes učím, takže všechno vám zkontrolovat nemohu, zvlášť ty sekce se spoofingem a DoS útokem ...tak daleko jsem ještě nedošel. Do té základní sekce si ještě přidejte
Kód: [Vybrat]
iptables -P OUTPUT  ACCEPT, aby jste se mohl dostat na internet. Cestu k programu IPtables já u svého scriptu nemám, ale asi to není na škodu.
Možná je zbytečné zakazovat autorizaci na portu 113, když všechny INPUT navazující pakety na jakýkoli port jsou zahozené.
Kód: [Vybrat]
# odmitnuti auth serveru
$IPTABLES -A INPUT -p TCP --dport 113 -j REJECT --reject-with tcp-reset
pokud v ostatním nemáte nějakou syntaktickou chybu, tak by to mělo šlapat :) a jestli máte nějaké PC ještě ve vaší lokální síti, tak si můžete přidat povolující INPUT pravidla jen pro jejich IP adresy, aby jste se mohl připojovat třeba přes sambu, ssh, atd ...

radeczech

  • Aktivní člen
  • *
  • Příspěvků: 165
Domácí firewall
« Odpověď #4 kdy: 01 Srpna 2006, 10:14:17 »
Mám taky dotaz, snažím se povolit jen některé porty např. pouze 80 a nedaří se mi to. Když do skriptu přidám ještě následující řádky, tak se mi inet odřízne úplně :-/
A ještě bych se zeptal, jak zjistím která aplikace si otevírá jaký port?
Díky

$IPTABLES -P OUTPUT DROP

$IPTABLES -A OUTPUT -o $INET_IFACE -p TCP --dport 80 -j ACCEPT #WWW server
THE ONLY WAY FORWARD IS TO GROW.
THE ONLY WAY TO GROW IS TO EXPAND BEYOND THE BOUNDARIES OF WHAT WE KNOW INTO UNCHARTED AREAS OF THE UNKNOWN.
THE UNKNOWN BEING THE ONLY SOURCE OF NEW KNOWLEDGE.

calcumat

  • Aktivní člen
  • *
  • Příspěvků: 124
Domácí firewall
« Odpověď #5 kdy: 02 Srpna 2006, 09:12:20 »
Citace: radeczech
Mám taky dotaz, snažím se povolit jen některé porty např. pouze 80 a nedaří se mi to. Když do skriptu přidám ještě následující řádky, tak se mi inet odřízne úplně :-/
A ještě bych se zeptal, jak zjistím která aplikace si otevírá jaký port?
Díky

$IPTABLES -P OUTPUT DROP

$IPTABLES -A OUTPUT -o $INET_IFACE -p TCP --dport 80 -j ACCEPT #WWW server
No ak nepovolis ine porty, tak ti "bezne" browsovanie urcite nepojde, lebo si zabudol na sluzbu DNS (ktora sa "von" nedostane a teda browser nevie, na aku ip sa dostat).
Skus teda aj porty TCP aj UDP 53.

Aby ti prisla odpoved, je nutne mat povolene v INPORTe vsetky "established":
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Notebook maniak (3 roky na Compaq Armada 1700, 3 roky na Compaq Presario 3070us, teraz Asus M6800VA ...)
Ubuntu registered user 3500, Linux registered user 423474.

radeczech

  • Aktivní člen
  • *
  • Příspěvků: 165
Domácí firewall
« Odpověď #6 kdy: 02 Srpna 2006, 22:07:20 »
Díky DNS pomohly :-) Nastavil jsme si porty, které jsem chtěl. Mám však ještě dotaz a to jak zjistím jaký port si otevírá některá aplikace? Jedná se mi např. o netové rádio a žádné porty jsem k tomu na netu nenašel :-(
THE ONLY WAY FORWARD IS TO GROW.
THE ONLY WAY TO GROW IS TO EXPAND BEYOND THE BOUNDARIES OF WHAT WE KNOW INTO UNCHARTED AREAS OF THE UNKNOWN.
THE UNKNOWN BEING THE ONLY SOURCE OF NEW KNOWLEDGE.

radeczech

  • Aktivní člen
  • *
  • Příspěvků: 165
Domácí firewall
« Odpověď #7 kdy: 07 Srpna 2006, 16:31:38 »
Firewall pro jedno zařízení jsem už vyřešil (porty zjistím příkazem netstat --numeric-port |more), ale teď mám ještě problém s více zařízeními, na které bych chtěl tento skript aplikovat. Standardně mám INET_IFACE="eth0", ale když bych se chtěl připojovat přes eth1, tak na toto zařízení skript aplikovám není :-( Nevíte jak jednoduše zapsat do INET_IFACE obě zařízení? Eth* ani =eth0,eth1 nefungují, jestli by to tam šlo...
THE ONLY WAY FORWARD IS TO GROW.
THE ONLY WAY TO GROW IS TO EXPAND BEYOND THE BOUNDARIES OF WHAT WE KNOW INTO UNCHARTED AREAS OF THE UNKNOWN.
THE UNKNOWN BEING THE ONLY SOURCE OF NEW KNOWLEDGE.

Ji31

  • Aktivní člen
  • *
  • Příspěvků: 182
Domácí firewall
« Odpověď #8 kdy: 07 Srpna 2006, 22:14:17 »
Ahoj,
o co se jedná jsem jakž takž pochopil, i když kódu nerozumím ani za mák. Ale jelikož by mě to zajímalo, můžete mi někdo říct, o jaký jde jazyk, případně co mám hledat na netu nebo v knihkupectví za dokumentaci (čeho konkrétně se to týká a v čem je to napsáno)?

Díky moc
Linux is like a teepee. No Windows, no Gates, Apache inside

Ji31

  • Aktivní člen
  • *
  • Příspěvků: 182
Domácí firewall
« Odpověď #9 kdy: 08 Srpna 2006, 17:46:26 »
Nikdo prosím?
Linux is like a teepee. No Windows, no Gates, Apache inside

radeczech

  • Aktivní člen
  • *
  • Příspěvků: 165
Domácí firewall
« Odpověď #10 kdy: 09 Srpna 2006, 22:13:17 »
celkově je linux postaven na jazyku C, ale tady se spíše jedná o příkazy pro nastavení firewalu, můžeš je zadávat přímo nebo vše zkopírovat do skriptu a spouštět skript, který ti vykoná všechny řádky. Pokud se chceš dostat částečně do problematiky, tak tady jsem našel na root.cz dobrý články http://www.root.cz/serialy/stavime-firewall/ http://www.root.cz/serialy/linux-jako-internetova-gateway/ ale vše tam taky není, jinak bychom to tady neřešili :-) nebo zagooglovat na téma iptables...
THE ONLY WAY FORWARD IS TO GROW.
THE ONLY WAY TO GROW IS TO EXPAND BEYOND THE BOUNDARIES OF WHAT WE KNOW INTO UNCHARTED AREAS OF THE UNKNOWN.
THE UNKNOWN BEING THE ONLY SOURCE OF NEW KNOWLEDGE.

 

Provoz zaštiťuje spolek OpenAlt.