Gå til innhold

iptables-regler til en kombinert firewall og server.


Anbefalte innlegg

Har en headless server med to nettverkskort som skal fungere som en personlig brannmur og server under The Gathering, og har kommet frem til et regelsett som jeg tror vil fungere. Har ikke noe særlig erfaring med iptables, annet enn å ha brukt det for å dele nettet tidligere.

 

# iptables executable
$IPTABLES=/usr/sbin/iptables

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

# eth1: nettverkskortet som er koblet til internett/eksternt nettverk
# eth0: nettverkskortet som er koblet til lokalnettverket

# Porter som skal være åpne utenfra og inn på serveren:
# 21 	- ftp
# 22 	- ssh
# 15151 - rtorrent

# reset all rules
$IPTABLES --flush
$IPTABLES --delete-chain

# blokkere alt inn til serveren
$IPTABLES --table filter --append INPUT --in-interface eth1 --jump DROP

# blokkere alt gjennom serveren
$IPTABLES --table filter --append FORWARD --in-interface eth1 --jump DROP

# slippe igjennom tjenester på serveren på portene under
$IPTABLES --table filter --append INPUT --in-interface eth1 --protocol tcp --ports 21,22,15151 --jump ACCEPT

# route gjennom serveren
# riktig interface på --out-interface-paramteren?
$IPTABLES --table nat --append POSTROUTING --out-interface eth1 -jump MASQUERADE

 

Hvordan ser dette regelsettet ut? Forslag til forbedringer? Har ikke testet regelsettet enda, da det å blokkere ssh ved en feil vil gjøre at man ikke kommer inn på serveren.

Lenke til kommentar
Videoannonse
Annonse
Netfilter er bygget opp som tre tabeller, hver med sin tiltenkte funksjon. Disse tre heter «filter», «nat» og «mangle». Hver enkelt tabell har et sett med «kjeder». Hvert kjede inneholder et sett med brukerspesifiserte regler som pakkene blir sammenlignet med i rekkefølge. Dersom pakken samsvarer med regelen kan en operasjon som er gitt i samme regel utføres. I de fleste tilfeller betyr dette at pakken ikke vil sammenlignes med de reglene som kommer etterpå i kjedet.

Stemmer fint det kpolberg. Takk :)

 

Oppdatert regelsett:

# iptables executable
$IPTABLES=/usr/sbin/iptables

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

# eth1: nettverkskortet som er koblet til internett/eksternt nettverk
# eth0: nettverkskortet som er koblet til lokalnettverket

# Porter som skal være åpne utenfra og inn på serveren:
# 21 - ftp
# 22 - ssh
# 15151 - rtorrent

# reset all rules
$IPTABLES --flush
$IPTABLES --delete-chain

# slippe igjennom tjenester på serveren på portene under
$IPTABLES --table filter --append INPUT --in-interface eth1 --protocol tcp --ports 21,22,15151 --jump ACCEPT

# blokkere alt inn til serveren om ingen av de tidligere reglene passet
$IPTABLES --table filter --append INPUT --in-interface eth1 --jump DROP

# blokkere forwarding fra det eksterne nettet og til det interne. Er denne nødvendig?
$IPTABLES --table filter --append FORWARD --in-interface eth1 --jump DROP

# route gjennom serveren
# riktig interface på --out-interface-paramteren?
$IPTABLES --table nat --append POSTROUTING --out-interface eth1 -jump MASQUERADE

Ser dette bedre ut?

Endret av clvñ
Lenke til kommentar

Du kan jo legge inn en regel som blokker trafikk mot ssh hvis man prøver å koble til oftere enn 4x innen 1 min.

 

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

Lenke til kommentar

# iptables executable
$IPTABLES=/usr/sbin/iptables

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

# eth1: nettverkskortet som er koblet til internett/eksternt nettverk
# eth0: nettverkskortet som er koblet til lokalnettverket

$INTERNAL_INTERFACE=eth0
$EXTERNAL_INTERFACE=eth1

# Porter som skal være åpne utenfra og inn på serveren:
# 21 - ftp
# 22 - ssh
# 15151 - rtorrent

# reset all rules
$IPTABLES --flush
$IPTABLES --delete-chain

# blokkerer så det ikke går ann å koble til nye forespørsler mot ssh mer enn 4 ganger i minuttet:
$IPTABLES --table filter --insert INPUT -p tcp --dport 22 -i $EXTERNAL_INTERFACE -m state --state NEW -m recent --set
$IPTABLES --table filter --insert INPUT -p tcp --dport 22 -i $EXTERNAL_INTERFACE -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

# slippe igjennom tjenester på serveren på portene under
$IPTABLES --table filter --append INPUT --in-interface $EXTERNAL_INTERFACE --protocol tcp --ports 21,22,15151 --jump ACCEPT

# blokkere alt inn til serveren om ingen av de tidligere reglene passet
$IPTABLES --table filter --append INPUT --in-interface $EXTERNAL_INTERFACE --jump DROP

# blokkere forwarding fra det eksterne nettet og til det interne. Er denne nødvendig?
# $IPTABLES --table filter --append FORWARD --in-interface $EXTERNAL_INTERFACE --jump DROP

# route gjennom serveren
# riktig interface på --out-interface-paramteren?
$IPTABLES --table nat --append POSTROUTING --out-interface $EXTERNAL_INTERFACE -jump MASQUERADE

Ingen feil ved dette regelsettet her nå? Det vil ikke bli noe problem for maskinene på innsiden av firewallen å kommunisere fritt med maskiner på utsiden?, så lenge det er maskinen på innsiden som "tar kontakt" med utsiden?

 

Takker for alle innspill :)

Lenke til kommentar

Hvis jeg ikke husker helt feil (en stund siden jeg hadde iptables som router), så må du vel ha regler for å tillatte pakkene du ønsker å passere gjennom FORWARD (dvs. til/fra nat tabellen) ?

Ser i mitt gamle script for å definere reglene at jeg hadde et par FORWARD regler for å tillate pakker utenfra å passere inn og motsatt (etter bestemte kriterier), uten at jeg helt husker hva som minimum er nødvendig...

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...