"Peter Andersen" <peterandersen@e-box.dk> wrote:
>Jeg har lidt poroblemer med hvad jeg skal blokere mht. -dport og -sport.
Et godt udgangspunkt er:
Bloker alt, åbn derefter for det, du har brug for, og log det, du ikke
har åbnet for.
Det er lettere at overskue end en lukning af bestemte porte, og hvis
du glemmer noget, opdager du hurtigt, at eller andet ikke virker, og
så kan du bare kigge i loggen og finde de pakker, der burde have været
lukket igennem.
Et meget kort ipchains script, der gør præcis det, kunne se således
ud:
# Default policy er "afvis indgående pakker på alle interfaces":
ipchains -P input DENY; ipchains -F input
ipchains -P forward DENY; ipchains -F forward
ipchains -P output ACCEPT; ipchains -F output
# Åbn for alt fra lo-interfacet:
ipchains -A input -p all -j ACCEPT -i lo
# Åbn for alt fra eth0 (kun hvis det er et rent lokalnets-interface):
# ipchains -A input -p all -j ACCEPT -i eth0
# Åbn for øvrige tcp-pakker, som ikke er SYN-pakker:
ipchains -A input -p tcp -j ACCEPT \! -y
# (Den er meget generel, og kan evt. begrænses yderligere til bestemte
# source porte som f.eks. 25, 80 og 110, og til bestemte destination
# porte i det område, du bruger til udgående forbindelser, se
# nedenfor.)
# Log resten:
ipchains -A input --log
Scriptet åbner groft sagt for alt indefra, men kun for pakker udefra,
som ikke vil kunne bruges til at etablere en forbindelse. Det er dog
ikke færdigt, for du skal også have åbnet for nogle typer icmp- og
udp-pakker udefra, før alt (f.eks. dns) virker.
Et mere omfattende script (hvorfra jeg har stjålet ovenstående) kan
ses på
http://www.sslug.dk/sikkerhed/
>Jeg kan blokere de services (ftp osv) der kører på min box med -dport, men
>det nytter heller ikke noget jeg blokere 1-65535 med -dport..
Næ, du skal jo nødvendigvis give plads til svar på den trafik, du selv
etablerer.
Et godt trick er at tvinge alle dine egne udgående forbindelser til at
bruge et begrænset område af source porte.
Det gøres med kommandoen:
echo "32768 40960" >/proc/sys/net/ipv4/ip_local_port_range
Nu ved du næsten med sikkerhed, at alt indgående trafik til andre
porte end 32768-40960 er af en type, du ikke ønsker.
>Hvordan er det nu det hænger sammen? hvad skal jeg blokere med henholdsis d
>og sport....´
>
>Hvilke porte skal jeg la være åbne for KUN at kunne køre HTTP
Altså adgang udefra til en webserver på din maskine, som ikke kører
https eller andet sjov?
Så har du som udgangspunkt kun brug for at tillade pakker udefra med
port 80 som destination port.
>og hvordan
>bliver forbindelsen oprettet, her tænker jeg også på hvad der sker mht.
>førnævnte source og destination porte....
Sådan lige ud af hovedet med forbehold for fejl:
Maskinen udefra sender en pakke til dig med en såkaldt SYN-pakke, som
har SYN-flaget sat, for at åbne forbindelsen. Source port vil være
tilfældig, og destination port vil være port 80.
Din maskine kvitterer med en såkaldt SYN/ACK-pakke, som har SYN- og
ACK-flagene sat, for at fortælle, at forbindelsen er åben. Portene er
de samme, men da denne pakke går den anden vej, er der naturligvis
byttet rundt på source og destination port.
Derefter kommer den almindelige trafik, som består af pakker uden
SYN-flag, men både med og uden ACK-flag, stadig mellem de to
ovennævnte porte.
Til sidst afsluttes forbindelsen ved at en af maskinerne sender en
pakke med FIN-flag og modtager en pakke med FIN- og ACK-flag.
Alle pakker nævnt her er tcp-pakker.
Som du kan se, er tcp-pakker generelt ret lette at have med at gøre,
for man kan se på dem, om de er "farlige" i den forstand, at de
forsøger at forhandle en forbindelse.
Udp-pakker er værre, da der ikke finder nogen forhandling sted for at
åbne for udp-trafik. Pakkerne sendes bare frem og tilbage. Du kan
derfor ikke umiddelbart se på en udp-pakke udefra, om den er svar på
en pakke, du selv har sendt. Der kan derfor være ide i kun at åbne for
udp-pakker fra nogle helt enkelte maskiner, du stoler på. Ofte vil det
være tilstrækkeligt at åbne for de dns- og ntp-servere, man benytter.
Hvis du vil have bedre styr på udp-pakker, kommer ipchains til kort.
I stedet bliver du nødt til at køre stateful inspection, hvor der
populært sagt holdes regnskab med, hvad man har sendt, og hvad man
forventer at modtage. Iptables til kerne 2.4 bruger stateful
inspection.
Vi kan jo forøvrigt lige så godt tage denne fra din anden tråd med det
samme:
>En anden ting: er der nogen grund til at sætte regler op for forward?
>hvorfor ikke bare gøre det hele på input... alle pakke løber jo igennem
>input alligevel!
Regler for forward kan være gode, hvis maskinen er gateway for dit
lokalnet. Så kan du bruge forward-regler til at undgå, at bestemte
typer trafik fra lokalnettet ryger ud på Internettet, mens du samtidig
beholder muligheden for at samme type trafik kan nå frem maskinen
selv.
Jeg kører f.eks. en smtp-server på min gateway. Hvis der kommer trafik
fra en af de andre lokale maskiner til port 25 på en maskine ude på
Internettet, skyldes det fejlopsætning eller virus/orme. Jeg har
derfor lavet en forward-regel, der lukker for trafik til port 25. En
input-regel ville også have spærret for trafik til maskinens egen
smtp-server.
(Jeg må nok bryde sammen og tilstå, at jeg først lavede port
25-reglen, da min 1-årige datter _havde_ installeret SirCam-ormen.)
--
Allan Olesen, Lunderskov
"UNIX er overflødigt." - Lars P. Fischer