Diskussion:Firewall og deling af internetforbindelse
Vil disse regler sæt for netværks trafik ikke være et beder eksempel?
Normal:
WAN=eth1 ######### Default ######### ### Note: Only change if need ## Flush our current rules iptables -F iptables --flush iptables --flush INPUT iptables --flush OUTPUT iptables --flush FORWARD iptables --flush -t mangle iptables --flush -t nat iptables --delete-chain ## Setup default policies to handle unmatched traffic iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP ######### Add Rules ######### ### Note: Here can you add you rules ## Connects to Debian from the wan ######### ## ## Example ## iptables -A INPUT -p TCP --dport 20 -i ${WAN} -j ACCEPT ## iptables -A INPUT -p TCP --dport 22 -i ${WAN} -s 87.100.100.100 -j ACCEPT ## iptables -A INPUT -p TCP ! --dport 22 -i ${WAN} -s 87.100.100.100 -j ACCEPT ## iptables -A INPUT -p tcp --dport 5900 -i ${WAN} -j DROP ## ######### ######### Default ######### ### Note: Only change if need ## Accept all connect on localhost (loop back) iptables -A INPUT -i lo -j ACCEPT ## Accept all previously established connections iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ## Tell the kernel that ip forwarding is OK echo 1 > /proc/sys/net/ipv4/ip_forward for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
Router:
WAN=eth1 LAN=eth0 rang=10.0.0.0 ######### Default ######### ### Note: Only change if need ## Flush our current rules iptables -F iptables --flush iptables --flush INPUT iptables --flush OUTPUT iptables --flush FORWARD iptables --flush -t mangle iptables --flush -t nat iptables --delete-chain ## Setup default policies to handle unmatched traffic ## Router set up iptables -P INPUT ACCEPT ## Steel router set up #iptables -P INPUT DROP ## Add default OUTPUT and FORWARD rulse iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP ######### Add Rules ######### ### Note: Here can you add you rules ## Connects to Debian from the wan ######### ## ## Example ## iptables -A INPUT -p TCP --dport 20 -i ${WAN} -j ACCEPT ## iptables -A INPUT -p TCP --dport 22 -i ${WAN} -s 87.100.100.100 -j ACCEPT ## iptables -A INPUT -p TCP ! --dport 22 -i ${WAN} -s 87.100.100.100 -j ACCEPT ## iptables -A INPUT -p tcp --dport 5900 -i ${WAN} -j DROP ## ######### ## Forwarding to lan ######### ## ## Example ## iptables -t nat -A PREROUTING -p TCP --dport 34990 -i ${WAN} -j DNAT --to 10.0.0.1 ## iptables -t nat -A PREROUTING -p UDP --dport 34990 -i ${WAN} -j DNAT --to 10.0.0.1 ## ## OR ## ## iptables -A INPUT -p TCP --dport 21 -i ${WAN} -j ACCEPT ## iptables -t nat -A PREROUTING -p TCP --dport 21 -i ${WAN} -j DNAT --to 10.0.0.1 ## iptables -A INPUT -p UDP --dport 21 -i ${WAN} -j ACCEPT ## iptables -t nat -A PREROUTING -p UDP --dport 21 -i ${WAN} -j DNAT --to 10.0.0.1 ## ######### ## Rulse for lan ######### ## ## Example ## iptables -A INPUT -p UDP --dport 5900 -i ${LAN} -j DROP ## iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT ## ######### ## Lock services so they only work from the lan iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT iptables -A INPUT -p UDP --dport domain ! -i ${LAN} -j REJECT ######### Default ######### ### Note: Only change if need ## Router set up ## Accept all connect from lan iptables -A INPUT -i ${LAN} -j ACCEPT ## Drop TCP / UDP packets to privileged ports iptables -A INPUT -p TCP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP iptables -A INPUT -p UDP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP ## Add the rules for nat iptables -I FORWARD -i ${LAN} -d ${rang}/255.255.255.0 -j DROP iptables -A FORWARD -i ${LAN} -s ${rang}/255.255.255.0 -j ACCEPT iptables -A FORWARD -i ${WAN} -d ${rang}/255.255.255.0 -j ACCEPT iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE ## Accept all connect on localhost (loop back) iptables -A INPUT -i lo -j ACCEPT ## Accept all previously established connections iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ## Tell the kernel that ip forwarding is OK echo 1 > /proc/sys/net/ipv4/ip_forward for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
Der kunne evt laves en beskrives af hver punkt i hver af regel sætten. Og have løse eksempler på hvad der kunne sættes ind, for at slutte af med hvad --dport o.l. betyder.
-----------------------------------
Indleding.
Indholdsfortegnelse
Installation af iptables
Installation af iptables er nemt. Programmet iptables hentes via aptitude:
debian:~# aptitude install iptables
Helle regel sæt eksempler
Forklaring.
Normal iptables
Forklaring.
Normal iptables
Regel sæt
Forklaring på Normal iptables
Default (Top)
Forklaring.
Flush our current rules
Forklaring.
Kode
Setup default policies to handle unmatched traffic
Forklaring.
Kode
Add Rules
Forklaring.
Connects to Debian from the wan
Forklaring.
Kode
.. .. ...
Iptables med router
Forklaring.
Iptables med router
Regel sæt
Forklaring på Iptables med router
Default (Top)
Forklaring.
Flush our current rules
Forklaring.
Kode
Setup default policies to handle unmatched traffic
Forklaring.
Kode
Add Rules
Forklaring.
Connects to Debian from the wan
Forklaring.
Kode
.. .. ...
Iptables med PPP
Forklaring.
Iptables med PPP
Regel sæt
Enkel eksempler
Drop ping
Forklaring.
Du kan eksempel indsæt denne regel under "Connects to Debian from the wan"
iptables -A INPUT -i ${WAN} -p icmp -j DROP
Drop port
Forklaring.
Du kan eksempel indsæt denne regel under "Connects to Debian from the wan"
iptables -A INPUT -p UDP --dport 5900 -i ${LAN} -j DROP iptables -A INPUT -p TCP --dport 5900 -i ${LAN} -j DROP
Du kan eksempel indsæt denne regel under "Rulse for lan"
iptables -A INPUT -p UDP --dport 5900 -i ${LAN} -j DROP iptables -A INPUT -p TCP --dport 5900 -i ${LAN} -j DROP
Forward Port
iptables -t nat -A PREROUTING -p TCP --dport 34990 -i ${WAN} -j DNAT --to 10.0.0.1 iptables -t nat -A PREROUTING -p UDP --dport 34990 -i ${WAN} -j DNAT --to 10.0.0.1
OR
iptables -A INPUT -p TCP --dport 21 -i ${WAN} -j ACCEPT iptables -t nat -A PREROUTING -p TCP --dport 21 -i ${WAN} -j DNAT --to 10.0.0.1 iptables -A INPUT -p UDP --dport 21 -i ${WAN} -j ACCEPT iptables -t nat -A PREROUTING -p UDP --dport 21 -i ${WAN} -j DNAT --to 10.0.0.1
Lås port fast på ip'er
.. .. ...
Vis de indlæst regler
Forklaring.
iptables --list -n
De enkel begreber
Her vil vi forsøge at give et grundlag for at kunne komme igang med iptables, så man kan opsætte og vedligeholde en firewall / router som bruger iptables, samt sikre ens egen computer. Til at starte med gennemgåes de forskellige begreber og så gennemgåes nogle basis opsætninger man vil komme til at støde på.
Når man snakker iptables er det nogle få vigtige begreber der er vigtige at man kan skelne fra hinanden. Dem der vil blive gennemgået her er chains/kæder, tabeller og policies. En chain kan sammenlignes med en rute. Som standard har man 3 kæder, INPUT, OUTPUT og FORWARD. Når man snakker om chains skal man altid se på det fra Linux kernens synspunkt. Hvis maskinen som kører firewallen, vil sende en pakke, kommer den igennem OUTPUT-kæden, men modtager maskinen derimod en pakke vil kernen kigge om det er en pakke som kommer fordi en bruger som vi er gateway for, har sendt en pakke og bedt om svar. Hvis pakken er svar pakke til en maskine som vi agerer gateway for, vil pakken komme i vores FORWARD chain, ellers vil kernen antage at det er en bruger som har bedt om at snakke med vores server hvor pakken så kommer til vores INPUT chain. Måden at kernen kan se dette på, er ved at kigge på pakken og se om det f. eks. er en SYN (ny pakke) eller en ACK (svar pakke) og matche dette til NAT tabellen hvori informationer om hvem der har sendt requests til hvilke servere ligger så pakker bliver leveret til de rigtige brugere. På denne måde kan vi så vælge at behandle pakken på forskellige måder.
En tabel kan betegnes som en holder til chains. Den eneste tabel vi pt. er interesseret i er faktisk vores nat tabel. Det er nemlig i vores nat tabel at vi skal skrive alle de regler som vi bruger til at lave destinations- eller source NAT (DNAT & SNAT) med. Hvis man f. eks. har mange klienter siddende på et LAN segment og kun en offentlig IP adresse, kan man bruge SNAT til at ændre afsender adressen på vores pakke. Men alt det vil vi komme ind på senere.
Tilsidst har vi så policies. En policy kan bedst betegnes som en standard regel. Hvis vores pakke ikke bliver "fanget" af nogle af vores andre regler i scriptet, vil man kigge på kædens policy. Der er 3 "targets" man kan bruge, nemlig ACCEPT, REJECT og DROP. Hvis man bruger ACCEPT vil pakken blive tilladt at komme igennem, hvorimod DROP simpelthen bare smider pakken væk. Man kan tilsidst også bruge REJECT som sender en besked til afsenderen om at denne pakke altså ikke er blevet accepteret. Man vil dog oftest være interesseret i at en maskine fra internettet ikke vil få svar på om du har modtaget pakken eller ej, så derfor bruges DROP oftest fremfor REJECT.
Element | Beskrivelse |
-s | Source adressen. Bruges til at checke afsender adressen. Dette
kan bl.a. bruges hvis man ønsker at en bestemt maskines IP adresse ikke skal have adgang til maskinen. Hvis source adressen angives til FORWARD kæden kan man blokere internet adgangen for en bruger, når ens egen maskine fungerer som gateway / firewall. Man kan i stedet for at angive en IP adresse, kigge på hele subnets ved at skrive følgende: 172.16.0.0/16. Her fungere vores / som adskillelsen imellem IP og subnet. Tallet efter /'et angiver hvor mange subnet bits vi ønsker at checke på. I dette tilfælde er det 16, som giver en subnet maske på 255.255.0.0. |
-d | Destinations adressen. Modsvarer -s dog her kigges der på hvem der
skal modtage pakken, fremfor hvem der sender pakken. Bruges til at nægte adgang til f. eks. en hjemmeside / server, eller kan bruges til at tillade adgang til en intern server, hvis denne bruges sammen med SNAT. |
-p | Protocol. Hvis man ønsker at definere hvilken protokol man vil kigge
på, kan vi med -p argumentet vælge imellem f. eks. tcp, udp eller icmp. |
--sport & --dport | Source- og destinations port. Hvis vi ønsker at kigge på hvilken
port vores trafik kommer fra eller sendes til, kan vi bruge --sport og --dport. Man skal dog, for at kunne bruge disse, også angive hvilken protokol trafikken bruger, med -p argumentet. |
-m | Load module. Da iptables er modulbaseret kan man loade flere moduler
ved at bruge -m argumentet. Blandt nyttige moduler kan nævnes multiport, mac og state. Alle disse moduler giver så endnu flere muligheder for at checke pakkerne, hvilket er en af forcerne ved iptables, muligheden for skalering. |
-t | Table. Denne bruges til at definere hvilken tabel vi ønsker at
ændre i. |