Diskussion:Firewall og deling af internetforbindelse

Fra Debianguiden
Skift til: Navigation, Søgning

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.

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.

Iptables basis elementer
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.

Se også