Gå til innhold

iptables brannmur regler virker ikkje


xzibiz

Anbefalte innlegg

Sitter her med ein nyinstallasjon av slackware 10.2 med kernel 2.6.18.

Denne maskinen skal brukes som router / brannmur på et lan til ca 50 stk.

Derfor ville eg bruke dette scriptet som et utgangspunkt. Men problemet er at den slepper gjennom all trafikk, selv om den skal sperre alt uten dei portane som er lista nesten heilt øverst. ::

 

#!/bin/sh

# IPT må peke mot der du har iptables installert.

IPT="/sbin/iptables"

LANNET="192.168.1.0/24"

LAN_IFACE="eth1"

WAN_IFACE="eth0"

WAN_IP="din internett ip"

OPEN_PORTS_TCP="21,22,80,1863,5050,6667,6901,8080,27015,64530"

OPEN_PORTS_UDP="53,6901"

 

# Vi starter med å flushe og blokke alt! Og jeg mener alt :)

$IPT -F

$IPT -t nat -F

$IPT -t mangle -F

$IPT -X

 

# Vi legger til noen saker i /proc systemet :)

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects

echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo "1" > /proc/sys/net/ipv4/tcp_syncookies

echo "0" > /proc/sys/net/ipv4/tcp_ecn

 

for i in /proc/sys/net/ipv4/conf/*; do

    echo "1" > $i/rp_filter

done

echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

 

$IPT -P INPUT DROP

$IPT -P FORWARD DROP

$IPT -P OUTPUT DROP

 

# Nå lager vi en rule som deler internett med de andre pc'ene du har.

$IPT -t nat -A POSTROUTING -s $LANNET -d ! $LANNET -o $WAN_IFACE -j SNAT --to $WAN_IP

$IPT -A FORWARD -s $LANNET -d ! $LANNET -j ACCEPT

 

$IPT -A FORWARD -m state --state NEW -i $LAN_IFACE -s $LANNET -d ! $LANNET -j ACCEPT

$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -i $WAN_IFACE -s ! $LANNET -j ACCEPT

 

# Vi dropper noen scans.... som eks. XMAS Scan osv...

$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

$IPT -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP

 

# Vi tillater 4 TCP koblinger pr. sekund, ingen flere!

$IPT -N syn-flood 

$IPT -A INPUT -p tcp --syn -j syn-flood

$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN

$IPT -A syn-flood -j DROP

 

 

# Nå må vi sette opp en state rules :)

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -m state --state NEW -i ! $WAN_IFACE -j ACCEPT

$IPT -A INPUT -m state --state INVALiD -j DROP

 

# NEW state uten syn er sperret!, siden dette er mest sansynlig noe 'ondt'. 

$IPT -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

 

$IPT -A INPUT -p tcp --tcp-option ! 2 -j REJECT --reject-with tcp-reset

 

# Vi lar $LAN_IFACE ha tilgang til alt...

$IPT -A INPUT -i $LAN_IFACE -j ACCEPT

 

# Vi tillater ECHO Requests. Det vil si Ping  :)

$IPT -A INPUT -p icmp --icmp-type 0 -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT

 

# Vi setter opp destination unreachable :)

$IPT -A INPUT -p icmp --icmp-type 3 -j ACCEPT

 

# Vi er hyggelig som tillater 'traceroute' :)

$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type 30 -j ACCEPT

 

# Vi tillater noen TCP porter :)

$IPT -A INPUT -p tcp -m multiport --dport $OPEN_PORTS_TCP -m tcp -j ACCEPT

 

# Vi tiltater noen UDP porter :)

$IPT -A INPUT -p udp -m multiport --dport $OPEN_PORTS_UDP -m udp -j ACCEPT

 

 

# Vi stenger for noen lokale ip'er som ikke er våre.

$IPT -A FORWARD -s 192.168.0.0/16 -j DROP

$IPT -A FORWARD -s 172.16.0.0/12 -j DROP

$IPT -A FORWARD -s 10.0.0.0/8 -j DROP

$IPT -A INPUT -s 192.168.0.0/16 -j DROP

$IPT -A INPUT -s 172.16.0.0/12 -j DROP

$IPT -A INPUT -s 10.0.0.0/8 -j DROP

 

$IPT -A FORWARD -d 192.168.0.0/16 -j DROP

$IPT -A FORWARD -d 172.16.0.0/12 -j DROP

$IPT -A FORWARD -d 10.0.0.0/8 -j DROP

 

# Nå må vi huske å tillate OUTPUT:)

$IPT -A OUTPUT -s $WAN_IP -j ACCEPT

$IPT -A OUTPUT -s $LANNET -j ACCEPT

$IPT -A OUTPUT -s 127.0.0.1 -j ACCEPT

 

# Ferdig :)

 

 

det funka fint med 2.4 kernel..

Lenke til kommentar
Videoannonse
Annonse

WAN_IP="din internett ip"

Hva er dette for noe?

 

Uansett, for en sånn bedrift ville jeg heller gått for FreeBSD/OpenBSD med PF. Slår iptables ganske lett med tanke på autentisering mot bruker, lastbalansering og trafikk-prioritering, noe jeg mistenker vil være svært nyttig i en sånn bedrift. Og selve regel-syntaksen er mye mer lesbar i PF. iptables har ikke slik funksjonalitet, man må bruke eksterne verktøy. Syntaksen i iptables vil jeg mildt sagt kalle griseri.

Endret av stigfjel
Lenke til kommentar

WAN_IP="din internett ip"

Er akkurat det som står..

Ei linje der eg skal skrive inn min wan ip (isp ip).

 

 

Har desverrr ikkje tid til å prøve freeBSD denne gangen..

Lanet skal vere nå til helgen. Og eg har ikkje tilgang til serveren nå, så eg har ikkje tid til å sette meg inn i freeBSD. Så eg må klare meg med slack.

 

Men det må vel ver ein måte eg kan få fiksa dette "scriptet" sånn at det virker med min installasjon ??

Lenke til kommentar
Er akkurat det som står..

Ei linje der eg skal skrive inn min wan ip (isp ip).

Det jeg mener, er at jeg ikke skjønner hvorfor du egentlig skal ha denne linjen i det hele tatt. Den er etter min mening overflødig og helt ulogisk. Dessuten, for meg så ser det ut som at du bruker linjen slik den står nå i selve regelsettet. Selv har jeg en brannmur som kjører OpenBSD med PF, og der har jeg overhodet ikke behov for denne linjen. Forresten så er det enkleste sak av verden å blokkere alt, og så kun slippe igjennom det jeg trenger.

Lenke til kommentar
WAN_IP="din internett ip"
Det jeg mener, er at jeg ikke skjønner hvorfor du egentlig skal ha denne linjen i det hele tatt. Den er etter min mening overflødig og helt ulogisk. Dessuten, for meg så ser det ut som at du bruker linjen slik den står nå i selve regelsettet.

 

Dersom du leser gjennom heila, ser du at den er brukt.. I steden for å leida etter alle plassene som wan ip'en står i scriptet, er det bare å skifte det øverst.. Gjer alt litt lettare..

 

Selv har jeg en brannmur som kjører OpenBSD med PF, og der har jeg overhodet ikke behov for denne linjen. Forresten så er det enkleste sak av verden å blokkere alt, og så kun slippe igjennom det jeg trenger.

 

Ja kan du ikkje hjelpa meg å få det til på min server då ??

Begynner å bli ganske desperat :ermm:

Endret av xzibiz_
Lenke til kommentar
Dersom du leser gjennom heila, ser du at den er brukt.. I steden for å leida etter alle plassene som wan ip'en står i scriptet, er det bare å skifte det øverst.. Gjer alt litt lettare..

Jeg er godt vant med makroer, bruker det masse på min egen brannmur (OpenBSD med PF). Å spesifisere ekstern ip i regelsettet er unødvendig og overflødig. Det holder å lage regler som gjør at tjenester slipper ut gjennom ext_if, og så sette en "keep state" på denne. Keep state betyr at forbindelsen holdes oppe så lenge det er behov for den. Vet ikke hvordan "keep state" uttales i iptables-syntaks.

 

Når det gjelder ditt regelsett, så vil jeg bare si følgende: jeg brukte iptables/ipchains for en del år siden, fikk det aldri til å fungere skikkelig. Har hatt mye større hell med ipfw/pf på FreeBSD/OpenBSD. Likevel vil jeg komme med forslag til en struktur som burde passe ditt bruk. For mer informasjon ville jeg f.eks. søkt på google etter nøkkelordene "iptables + default to deny". Da burde du få noen treff på eksempler som viser hvordan dette kan gjøres. Har ikke så stor oversikt over hvordan iptables-syntaksen fungerer, men noe kan jeg da lese ut. Vil sterkt råde deg til å se litt mer på PF når du får tid, det vil du ikke angre på. Siden du er i stand til å bruke Slackware og sette opp et iptables-regelsett manuelt, burde ikke PF være vanskelig å få til. Men siden du bruker det du bruker nå, skal jeg prøve å hjelpe deg så godt jeg kan med en struktur som burde fungere.

 

# dette er bare brannmur-pseudokode, du må selv oversette til
#  iptables-syntaks, men er sterkt inspirert av syntaksen i PF
# pass på at systemet tillater ip_forwarding

#makroer
iif = eth0 # internal interface
eif = eth1 # external interface
tcp_services = (ulike tcp-porter du vil tillate trafikk på)
udp_services = (ulike udp-porter du vil tillate trafikk på)

# nat/redirect regler

# pakkefilter-regler
block all
pass out on $eif tcp from any to any port $tcp_services keep state
pass out on $eif udp from any to any port $tcp_services keep state

(pluss en del andre tjenester og muligheter, som f.eks. icmp osv)

# dette er bare brannmur-pseudokode, du må selv oversette til
# iptables-syntaks, men er sterkt inspirert av syntaksen i PF

 

Dette er strukturen på mitt regelsett som min brannmur bruker, og det fungerer akkurat som det skal. Det tok meg bare et par timer å sette opp et regelsett med en slik struktur.

Endret av stigfjel
Lenke til kommentar
Jeg er godt vant med makroer, bruker det masse på min egen brannmur (OpenBSD med PF). Å spesifisere ekstern ip i regelsettet er unødvendig og overflødig. Det holder å lage regler som gjør at tjenester slipper ut gjennom ext_if, og så sette en "keep state" på denne. Keep state betyr at forbindelsen holdes oppe så lenge det er behov for den. Vet ikke hvordan "keep state" uttales i iptables-syntaks.

Det vanligste er å bruke modulen state til connection-tracking i iptables. Men syntaksen er helt annerledes fra PF.

 

Eks:

 

iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

 

Dette er en ganske "snill" regel som slipper inn all trafikk på eth0 som er relatert til eksisterende utgående connection.

 

Det fins totalt 4 states:

 

- NEW

- ESTABLISHED

- RELATED

- INVALID

Lenke til kommentar
iptables -F

iptables -A INPUT -i lo -p all -j ACCEPT                      - Allow self access by loopback interface

iptables -A OUTPUT -o lo -p all -j ACCEPT

iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT - Accept established connections

iptables -A INPUT -p tcp --tcp-option ! 2 -j REJECT --reject-with tcp-reset

iptables -A INPUT -p tcp -i eth0 --dport 21 -j ACCEPT          - Open ftp port

iptables -A INPUT -p udp -i eth0 --dport 21 -j ACCEPT

iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT          - Open secure shell port

iptables -A INPUT -p udp -i eth0 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT          - Open HTTP port

iptables -A INPUT -p udp -i eth0 --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --syn -s 192.168.10.0/24 --destination-port 139 -j ACCEPT  - Accept local Samba connection

iptables -A INPUT -p tcp --syn -s trancas --destination-port 139 -j ACCEPT

iptables -P INPUT DROP              - Drop all other connection attempts. Only connections defined above are allowed.

 

Fant dette etter å ha googla litt..

Kan dette bruker til å blokke alt som det står heilt nederst og bare liste opp alle portene ?

Eller er det ein litt lettare måte å liste porter på ??

 

Feks: som det står i mitt regelsett::

 

OPEN_PORTS_TCP="21,22,80,1863,5050,6667,6901,8080,27015,64530"

OPEN_PORTS_UDP="53,6901"

# Vi tillater noen TCP porter

$IPT -A INPUT -p tcp -m multiport --dport $OPEN_PORTS_TCP -m tcp -j ACCEPT

 

# Vi tiltater noen UDP porter

$IPT -A INPUT -p udp -m multiport --dport $OPEN_PORTS_UDP -m udp -j ACCEPT

 

Så blir jo då te slutt::

 

iptables -F

iptables -A INPUT -i lo -p all -j ACCEPT                      - Allow self access by loopback interface

iptables -A OUTPUT -o lo -p all -j ACCEPT

iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT - Accept established connections

iptables -A INPUT -p tcp --tcp-option ! 2 -j REJECT --reject-with tcp-reset

OPEN_PORTS_TCP="21,22,80,1863,5050,6667,6901,8080,27015,64530"

OPEN_PORTS_UDP="53,6901"

# Vi tillater noen TCP porter

$IPT -A INPUT -p tcp -m multiport --dport $OPEN_PORTS_TCP -m tcp -j ACCEPT

 

# Vi tiltater noen UDP porter

$IPT -A INPUT -p udp -m multiport --dport $OPEN_PORTS_UDP -m udp -j ACCEPT

iptables -P INPUT DROP              - Drop all other connection attempts. Only connections defined above are allowed.

 

Eller blir det heilt feil ?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...