Som almindelig opstart til denne guide, vil jeg betragte at man kender de normale begreber indenfor Linux, og har installeret en funktionsdygtig ArchLinux installation - elllers kan den ses her
Da IPTABLES/Firewall er et enormt område at bevæge sig ind på, vil jeg i denne artikel kun tage diverse hovedemner op, og derefter vise et par enkelte scripts til forskellige muligheder.
Dette er ikke en absolut guide til IPTABLES, men den giver et indblik i hvad man skal kigge nærmere efter og hvad man skal være opmærksom på indenfor dette område - dog vil jeg under alle omstændigheder bede folk om at læse netfilters egen dokumentation omkring IPTABLES/netfilter HOWTO.
I denne artikel vil der også kun være taget hensyn til IPV4 og IKKE IPV6 - Men principperne er det samme.
Da jeg startede med Linux for 2år siden, anede jeg ikke de muligheder der var her - og kan til dd stadig blive overrasket over de mange utrolige ting som man kan udføre - Dette skriver jeg gerne selv om på min egen linuxside (Som er generelle ting hvad jeg syntes er spændene)
Hvis nogen skulle være i tvivl så er jeg meget interesseret i feddback af enhver art. Er der noget der er uklart, noget der mangler, sider jeg burde linke til, noget der er direkte forkert, døde links, manglende installationskilder eller andre kommentarer. Skriv til udbytossen@gmail.com
Hvis man står med det brændende ønske omkring at ville have have fuld kontrol over sit netværk eller hvem der har adgang til en maskine, vil jeg stærk anbefale IPTABLES som er et modul i kernel som filtrerer de pakker som bliver sendt på netværket. Dette kan bruges til beskyttelse af enkeltstående maskiner, eller som firewall for et helt netværk. Derfor vil jeg anbefale folk at starte med at læse netfilter´s dokumentation igennem (Specielt hvis man vil ud i flere detaljer) som kan findes her: Netfilter Dokumentation
Denne guide kan være til extrem stor hjælp i tilfælde af du skal administrere større netværk, da jeg ikke kommer ind på alle detaljer i denne howto - dog vil den grundlæggende viden komme
Selve installationen af IPTABLES på; Archlinux er det nemmeste i hele denne sammenhæng, men dog vil jeg stærkt pointere at det er en selv der opsætter reglerne for hvordan og hvilken trafik der kommer videre eller ind på maskinen.
Derefter ville IPTABLES være installeret på din maskine og du kan nu starte/stoppe/reloade den med den normale kommando:
Selve scriptet kan man nu gøre på mange forskellige måder - enten ved at bruge de indbyggede kommandoer og script og taste reglerne ind løbende eller man kan lave et script selv direkte i hånden. Det er helt op til en selv men grundlæggende er alt det samme uanset hvilken metode man vælger.
Da jeg personligt bedst kan lide at lave scriptet selv fra bunden af - vil jeg derfor gøre dette i denne forklaring.
For at kunne opsætte regelsæt, må man nok starte med at have en forklaring på hvilke ting og hvorfor det hele er som det er. Det vil jeg komme ind på her - men igen kun de vigtigste kommandoer - da man iptables har de korrekte oplysninger om resten. Dog vil jeg prøve at forklare løbende hvorfor - hvad og hvordan.
For at starte et sted :
Der vil altid være 3 kæder i IPTABLES, som man ikke kan slette --> INPUT - OUTPUT - FORWARD. Til gengæld kan man lave alle de kæder ekstra man vil og skal bruge i sit script.
Enhver pakke der modtages på et netkort vil have en masse oplysninger vedhæftet omkring afsender, modtager porte osv. Det er de oplysninger som vi bruger i IPTABLES til at filtrere vores pakker - efter VORES ønsker.
En firewall, baseret på pakke-filtrering , består egentlig af en masse kæder med påhæftede tabeller indeholdende accept og benægtelse regler. Disse regler kan man sætte efter hvilke ønsker man har til sit netværk.
Først og fremmest kræver det en masse viden omkring OSI-modellen, som jeg ikke vil komme ind på her, men det er frit tilgængelige informationer på internettet: wikipedia´s version
INPUT - Pakker der modtages af et netkort og som har en af den lokale host´s IPadresser som destination, vil blive routet af INPUT kæden først. Her er det vigtigt at det er KUN de pakker vi have til vores lokale host - bliver accepteret.
OUTPUT - Pakker der sendes fra localhost (processor - programmer) går gennem denne kæde ud fra maskinen. I de fleste tilfælde accepterer man trafikken i dennen kæde.
Forward - Pakker der modtages og skal videre til en anden maskine - NAT(Network Area Translation) foregår via denne kæde. Her er det man bestemmer hvilke pakker der modtages inde på vores lille netværk! På en enkelt maskine vil dette ikke være nødvendigt - da vi ikke skal sende pakker videre til andre maskiner. Til FORWARD kæden er der dog flere underkæder - nemlig PREROUTING (som er routing af pakkerne inden de aktuelle regler tjekker dem) og POSTROUTING (som er efter de aktuelle regler har tjekket dem).
Porte - Man skal vide hvilke programmer der bruger hvilke porte og hvilken slags transportmetode der bruges. Her findes der mange - men de 3 vi vil bruge her er TCP, UDP og ICMP. Listen over hvilke porte der bruges af hvad er forudbestemt og kan ses i filen /etc/services. Dog skal man vide forskellen på typerne:
TCP - (Transmission Control Protocol) Dette er en forbindelsesorienteret protokol, der mest af alt bekræfter alt data modtages frem og tilbage. Det er samtidigt også den mest benyttede protokol.
UDP - (User Datagram Protocol) Dette er en forbindelsesløs protokol, der ikke bekræftiger modtaget data. Den sender det den skal og ikke andet.
ICMP - (Internet Control Message Protocol) som bruges til bla. ping osv. Denne kan man faktisk ikke betegne som en transportmetode, men det er en vigtig del af at sætte en firewall op.
Policies - Det er hvilken standart politik man vælger til at starte med. Enten kan man acceptere alt (ACCEPT) eller benægte alt (Deny) Her skal man tænke lidt over hvad man vil og hvilken maskine det script man vil lave er til. Dog er det mest anbefalede benægt. Her sætter man regler efter hvilke ting man vil acceptere, og ALT andet bliver smidt væk. Man kan også vælge det modsatte, men jeg vil ikke anbefale dette.
Man kan også afvise pakkerne(REJECT), hvilket vil give en ICMP-meddelse til afsenderen.
Muligheder under en filtrering - Idet man laver en regel kan man sætte visse krav til disse regler som f.eks afsender/modtager, hvilke port det skal være osv. Disse muligheder har jeg defineret de mest almindelige her nedenunder - dog er der mange flere muligheder - se man IPTABLES:
Grundlæggende:
Hvilke muligheder man har med de enkelte objekter/kæder
Til detaljer af TCP protokol:
Til beskrivelse af UDP protokol:
Til beskrivelse af ICMP:
Udover disse muligheder, er der en række udvidelser tilgængelige i IPTABLES
Hvis man f.eks vil gøre sit script nemmere, kan man i starten angive en variabel, som man senere kan kalde igen --> derfor $IPTABLES - men mere om det senere.
Vi beder her iptables og at bruge en tabel = NAT og tilføjer den til kæden = FORWARD HVIS:
* den kommer fra IPadressen 143.65.243.21og
* er adresseret til IP-adressen 29.34.56.78 og
* kommer på port 22. hvis dette passer så
* destinationsNATter vi den til destinationen
192.168.0.10 port 22 (læg mærke til det lille kolon MEGET VIGTIGT!!!!!
Hvis ikke den pakke der kommer ind passer til disse regler - vil den følge de default policies der er sat.
Derfor er det meget vigtigt at man først og fremmest forstår OSI-modellen, derefter har gennemgået Netfilter´s Howto og dermed har en forståelse hvorfor og hvordan pakkerne går igennem vores system - og hvordan pakkernes header bliver læst. Nok om det - Nu til det alvorlige i hele dette cirkus:
Jeg vil nu starte med at lave en enkelt script til en enkelt maskine der står f.eks på et LAN-netværk og modtager pakker. Denne kunne i princippet ligeså godt være en maskine der sidder direkte på netværket!
Forudsætninger:
Maskinen har kun et netværkskort med IPadressen 192.168.0.10
Vi ønsker åbent for FTP - SSH - HTTP - POP3
Derfor starter vi med at lave et script som ligger i /etc/iptables/ og kalder det test_firewall
Det var egentligt det hele for opsætningen på en enkelt maskine - dog skal vi lige sikre os at den starter op med det script ved hver opstart. Dette gøres i /etc/conf.d/iptables:
Nu kan vi så starte vores firewall og dermed skulle der ikke komme nogle fejl her:
Og således har vi nu en firewall kørende for vores enkelte maskine - man kan nu bagefter se vores "kørende regler" med kommandoen:
Det ovennævnte script er kun beregnet som firewall til en enkelt maskine, og vi har slet ikke været inde på vores NAT tabel og alle de andre ting man nu kan i IPTABLES. Det næste eksembel skal bruges til en Router, hvr vi har en webserver kørende på det interne net, som omverdenen skal have adgang til - samtidigt med vil vi gerne have andre maskiner på nettet samtidigt. Det skal hertil siges, at man dertil skal have en switch stående + en kørende DHCP-server hvis man ønsker DHCP adresser.
Til dette eksembel, tager vi følgende forudsætninger:
* Vores offentlige IP-adresse er 12.34.56.78 og vores WAN kommer ind på eth0
* Vores LAN netværk hedder 192.168.0.0/24 og sidder på eth1
* Vores webserver har følgende adresse: 192.168.0.10
* Vi ønsker åbent fra omverdenen til FTP - SSH - HTTP - POP3
Dette er lidt alá 1 script - dog kommer der lidt flere ting ind i perspektivet, men prøver at forklare det så godt som jeg kan. Vi starter med at lave et nyt script i /etc/iptables som vi kalder router_firewall:
Igen skal vi sikre os at det er det rigtige script der hentes - så tjek det lige i /etc/conf.d/iptables
Tilsidst sikrer os at det starter efter reboot mm - så ind i /etc/rc.conf
Og derefter kan vi starte vores script
Da der kan være flere ting der driller omkring det at tilgå egen servere internt - Specielt i forbindelse med DMZ - er der flere løsninger til dette problem.
* Natte interne kald direkte til serverens IP
* Opsætning af intern DNS - da dette giver den rigtige IP til det kald man laver
Dog vil jeg sige at den nemmeste måde at finde ud af dette er at google efter løsningen.
Netfilters egen dokumentation er et aldeles godt sted at starte hvis man leder efter den slags informationer
Kilder:
Hvis der skulle være kommentarer eller spørgsmål til dette indlæg - så hold jer ikke tilbage for at skrive til udbytossen@gmail.com
Denne artikel er skrevet af Per Jørgensen - Peque
Alt indhold er skrevet af Per Jørgensen
Dette værk er licensieret under en
Creative Commons Navngivelse-Del på samme vilkår 2.5 Danmark Licens.