Re: IPFW spørgsmål

From: Phil Regnauld <none_at_regnauld--catpipe.net.lh.bsd-dk.dk>
Date: Thu, 31 Jan 2002 18:36:54 +0100
To: bsd-novice_at_bsd-dk.dk

Bjarne Wichmann Petersen (bsddk.nospam) writes:
> Hej
>
> Jeg har lidt svært ved at fange konceptet omkring ipfw/firewall helt, og
> hjælper ikke når eksempler, man-pages og anden hjælp sejler rundt i et dusin
> aliaser. Så her nogle måske ret banale spørgsmål.

    Så skal vi måske starte på IP-niveauet :)

    Først og fremmest, glem alt du har hørt om "Class A, B, C"

> Netmask. Den har jeg svært ved at greje. Hvad er den? Og hvad er Subnet? Er
> det det samme eller er der forskel? 127.0.0.0/8 er det det samme som en
> "range" fra 127.0.0.0 til 127.0.0.255? Og /16 er det x.x.0.0-x.x.255.255? Og
> så frem deles?

    En subnet defineres af en netmask.
    En IP adresse har en netværkdel og en hostdel.

    Eksempel: 192.168.1.2 -> host .2 på net 192.168.1

    Hvordan ved man at net == 192.168.1 (faktisk: 192.168.1.0) ?
    Det ved vi faktisk ikke før vi kender netmask.

    Netmask er et antal bits der definerer hvor meget af din IP adresse
    er netværksdel, og hvad er host-del:

    byte.byte.byte.byte, dvs. 4 x 8bits

    Netmask kan være fra 0 til 32 bits -- en netmask af 8 bits skrives
    som `/8' eller '255.0.0.0' (kun de første 8 bits er til 1).

                    1 2 3
    .......8 .......6 .......4 .......2 mask

    00000000 00000000 00000000 00000000 => 0.0.0.0
    10000000 00000000 00000000 00000000 => 128.0.0.0
    11000000 00000000 00000000 00000000 => 192.0.0.0
    ...
    11111111 00000000 00000000 00000000 => 255.0.0.0
    ...
    11111111 11111111 00000000 00000000 => 255.255.0.0
    ...
    11111111 11111111 11111111 00000000 => 255.255.255.0
    ...
    11111111 11111111 11111111 11111111 => 255.255.255.255

    NB: der må ikke være nogle "huller" i netmask, i.e.:

255.192.255.0 er ikke et gyldigt netmask (det var engang, ikke mere).

    /16 netmask: 255.255.0.0
    /24 netmask: 255.255.255.0 (gammeldags: "C class")

    Hvis man har en 127.0.0.0/8 net, betyder det at 8 bits ud af 32
    er netmask. Du har derfor 24 bits (32-8) bits tilbage til host del.

    24 bits ? 2^24 => 16777216 _mulige_ hosts på din net!
    (faktisk 16777216 - 2, fordi den første og sidste adresse i et net
    kan ikke bruges til hosts).

    I et 192.168.1.0/24 net (samme som: 192.168.1.0 netmask 255.255.255.0),
    har du 24 bits netmask -- der er 8 bits tilbage til hosts: 2^8 => 256.

    Netmask kan selvf. være noget andet som:

255.255.255.128 -> 11111111 11111111 11111111 1000000 -> (3 x 8) + 1 = /25

    Hvis nettet hedder "1.2.3.64/25" betyder det:

    32 - 25 bits = 7 bits til host. 2^7 = 128.

    Din subnet bliver så: 1.2.3.64 -> 1.2.3.64+128 => 1.2.3.64 -> .192/25

> Indtil nu har jeg brugt en meget lukket firewall, som jeg har lidt problemer
> med i forbindelse med icq, irc/dcc o.lign., hvor jeg vil skabe direkte
> kontakt med en anden klient og det er lidt tilfældigt/dynamisk hvilken port
> det sker på. Og når så begge er bag en firewall, kommer jeg tit ikke særligt
> langt.

    Right :(

> Så nu vil jeg lave en semi-åben firewall, som tillader al trafik ud. Lukker
> al trafik ind på porte <1024 og 6000-6063 (X), med visse undtagelser. Og så
> ellers tillade fri trafik på resten.

    Du kan desværre, hvis det net der sidder bag firewall er en "RFC1918"
    type (i.e.: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) ->
    disse adresser kan ikke routes over det åben internet.
    (derfor bruger man NAT -> Network Address/port Translation)...

> Er der umiddelbart nogle problemer i sådan er firewall? Har ikke nogen
> services kørende, så?

    I princippet ikke.

    Men det er afhængig af din konfiguration.

> Jeg har indsat min firewall nedenfor, så hvis nogen har lyst til at hjælpe
> med en dybere forståelse af hvad der sker, bukker jeg og siger tak! ;)

    Jeg vil anbefale du køber "Building Internet Firewalls", O'Reilly ed.,
    (2nd edition) fra Zwicky og Chapman :)

> #Network, netmask, ip
> net="192.168.1.1"

    Forkert -- der skal står "192.168.1.0" (netter er:

    192.168.1.0/24 -> 192.168.1.0-255

> mask="255.255.255.0"
> ip="192.168.1.6"

    Ok.

> ${fwcmd} add allow all from any to any via lo0
> #!Hvad er disse godt for?

    Så at din computer kan få lov til at snakke med sig selv
    via "local loopback interface".

> ${fwcmd} add deny all from any to 127.0.0.0/8
> ${fwcmd} add deny all from 127.0.0.0/8 to any

    ... og derefter lukker man for dem der prøver at snyde og sende pakker til
    den alligevel (du har allerede tilladt det via:

    "allow all from any to any via lo0"

> #Åbne trafik i det interne net
> ${fwcmd} add allow all from ${ip} to ${net}:${mask}
> ${fwcmd} add allow all from ${net}:${mask} to ${ip}

    Bare en ting -- har din maskine 1 eller 2 netkort ?

> #Tillad etableret TCP-trafik
> ${fwcmd} add allow tcp from any to any established
>
> #Tillad etableret trafik
> #!Gør denne regel ikke ovenstående overflødig?
> ${fwcmd} add allow all from any to any frag

    Nope -- den tillader kun fragments af pakker, ikke hele pakker.

> ##############
> ## Egne regler ##
> ##############
>
> #Tillad al trafik ud
> #!Er det "farligt"?
> ${fwcmd} add allow all from ${ip} to any

    Ikke specielt -- ikke til dig selv, men måske til andre
    hvis din maskine bliver misbrugt af andre :)

> ###############
> #Gnomemeeting #
> ###############
> #ILS
> #! Er det nødvendigt at angive port begge gange?
> ${fwcmd} add allow tcp from any 389 to any 389

    Ja, hvis du vil skrive det i 1 linie.

    Ellers skal du skrive:

    allow tcp from any to ${ip} 389
    allow tcp from ${ip} 389 to any

    Langt de fleste TCP/UDP services bruger en source port
>1024 -- som du ikke kender i forvejen.

> #ULS
> ${fwcmd} add allow tcp from any 522 to any 522
> #Følgende skulle sådan set ikke være nødvendige da >1024 er åbne

    Right.

> #T.120, H.323, ACC
> ${fwcmd} add allow tcp from any 1503 to any 1503
> ${fwcmd} add allow tcp from any 1720 to any 1720
> ${fwcmd} add allow tcp from any 1731 to any 1731

    
> #IRC
> #!Er der problemer ved at have port 113 åben for TCP-trafik?
> ${fwcmd} add allow tcp from any to ${ip} 113

    Kun hvis du har noget kørende (ident) på 113 :)
    Se min kommentar omkring "åbne services" sidst i denne mail.

    Hvad bruger du af identd ? Har du set it /etc/inetd.conf :

    auth stream tcp nowait root internal

> #Luk al anden trafik for <1024
> #!Kommer jeg til at lukke for nødvendig trafik?
> #!Er det bedre at benytte 'setup'?
> ${fwcmd} add deny log tcp from any to any 1-1024
> ${fwcmd} add deny log udp from any to any 1-1024

    Hvis du tillader relevant in/out traffik _før_, så er der ikke
    noget problem i det. Men der findes en mere optimal mode at
    gøre det på :)

> #Luk for adgang udefra til X
> ${fwcmd} add deny log tcp from any to ${ip} 6000-6063

    Ok.

> #Tillad al anden trafik
> ${fwcmd} add 65435 allow all from any to any

    Som sikkerhedsperson, vil jeg anbefale en "default deny"
    og derefter åbne op for kun de ting du skal bruge.

Åbne services:

    For at checke hvad for nogle services du har åbnet på din server,
    kan du bruge to kommandoer:

    UNIX generelt:

netstat -an (kig i output for "tcp" og "udp")

    FreeBSD:

sockstat

    Anyway, når jeg får lidt mere tid, vil jeg sende dig en eksempel
    ruleset med IPFW og også IPFILTER.

Mvh,
Phil
Received on Thu 31 Jan 2002 - 18:37:07 CET

This archive was generated by hypermail 2.2.0 : Wed 27 Mar 2013 - 10:40:17 CET