09. november 2002 - 12:15Der er
67 kommentarer og 2 løsninger
lukke for visse ipere i gateway
jeg har en gateway, hvor på det ene netkort er internet og på det andet 10.0.0.0 jeg skal så have lavet det så kun fra 10.0.0.1-10.0.0.25 har adgang til internettet.
jeg har søgt på nettet, men jeg har stirret mig blind
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
jeg omformulerer lige spørgsmålet engang. jeg har et iptables script der ser ud som følger
intip=10.0.0.1/24 iptables -F iptables -t nat -F
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -I FORWARD -p udp --dport 27015 -j DROP
iptables -t nat -A POSTROUTING -d ! $intip -j MASQUERADE iptables -A FORWARD -s $intip -j ACCEPT iptables -A FORWARD -d $intip -j ACCEPT iptables -A FORWARD -s ! $intip -j DROP echo 1 > /proc/sys/net/ipv4/ip_forward
det router fra det ene kort til det andet eth1=10.0.0.1 eth0=192.168.1.5
jeg skal have lavet det om sådan at det kun er 10.0.0.1-10.0.0.20 der kan routes igennem, og de andre bare blive dropped. men dem der bliver droppet skal have adgang til serverens interne netkort, da den hoster web, dhcp og andet.
jeg prøver lige at skrive nogle linier senere, men indtil videre
1: Defualt policy bør sættes til DROP for mimimum INPUT & FORWARD 2: Der åbnes kun for de porte på gateway som er nødvendige (httpd+ftp???) 3: Forward ACCEPT på -s 10.0.0.1-24 4 Forward: ACCEPT på -d (iptables -A FORWARD -d $intip -j ACCEPT)
utestet da jeg ikke lige har et setup jeg kan teste det på. og jeg har ikke rigtigt prøvet at lave noget i den retning før.. men jeg mener nok det skulle fungere.
hey det virker jo dank alt bortset fra hvis de ikke har "internet access" har de heller ikke adgang til serveren... kan man ikke lave så alle har adgang til alle porte på serveren? altså i iptables -A INPUT -j ACCEPT -p tcp --dport 21 linjerne
Dank -> Hvorfor bruker du denne ? "iptables -A INPUT -j ACCEPT -i lo" (Hva blir egentlig effekten, er ikke sikker, bruker den ikke selv.)
Har forsøkt på alle måter nå i kveld om det skulle være mulig å spesifisere et intervall av ip adresser i en regel, men finner så langt ingen måte som fungerer. Man kunne tenke seg noe slikt som 192.168.02:192.168.0.25 men det fungerer ikke. Heller ikke 192.168.0.2, 192.168.0.3 og heller ikke to -s etter hverandre. Upraktisk at det skal være nødvendig med 25 regler for å åpne for 25 maskiner, men det ser da slik ut ??!
Det man der i mot kanskje kunne gjøre hvis det er snakk om to forskjellige grupper av maskiner med forskjellig type trafikk, det var å dele opp i to forskjellige nettverkssegmenter der firewall ikke bare får 2 men tre kort, et wan kort og to lan kort. Videre så kunne man da skreddersy regler som setter opp eller begrenser trafikken mellom de to lan segmentene og tilsvarende trafikken mellom de to lan segmentene og wan/internett.
langbien, forstår godt nok ikke særligt meget af hvad du skriver, men jeg kan ikke dele det op i segmenter, da det er maskiner der skal kommunikere internt sammen, men kun nogle må have internet.
dex_dexter -> de ville fortsatt kunne kommunisere med hverandre, men du ville kunne bestemme hvorledes og hvor mye. (Men det ville allikevell kunne bli nesten mer komplisert.)
Dank -> testet denne. Klarte først å stenge meg ute ved å sette output til DROP og fikk også all trafikk til å stanse fordi jeg glemte at jeg kommuniserte via ssh og at jeg hadde dns proxy på firewall. (He, he ..) Denne firewall har derfor fått et par ekstra åpninger, men bare et lite forslag om prinsipper der man i utgangspunktet ikke setter opp regler som ikke er bidireksjonale men som i stedet bare virker en veg (gir bedre kontroll synes jeg):
#!/bin/bash
# Load in extra kernel modules: modprobe ip_nat_ftp modprobe ip_conntrack_ftp
# Sette policies (default rules): iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
# Open for local dns server. iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Open for comunication from LAN to local firewall prosesses iptables -A INPUT -i eth1 -j ACCEPT
# Establishing forwarding filtering rules, direction in from wan: iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Establishing forwarding filtering rules, direction out from lan: iptables -A FORWARD -i eth1 -s 192.168.0.2 -j ACCEPT iptables -A FORWARD -i eth1 -s 192.168.0.3 -j ACCEPT iptables -A FORWARD -i eth1 -s 192.168.0.4 -j ACCEPT
# Establishing mechanism for SNAT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Sakl man ellers ha en høyest mulig grad av sikkerhet så bør man vel sette output til drop og det bør heller ikke finnes noen serverfunksjoner på firewall. (Og da må man (inklusive hackere) jo sitte på console for å få gjort noe med den samme firewall.)
Dreier det seg om et firewall oppsett med 3 eller flere kort (og nettverkssegmenter) så spesifiserer man både -i og -o slik at man på denne måten kan kontrollere trafikken både mellom nettverkssegmentene og mellom lan nettverkssegmenter og wan.
dex_dexter -> Har tenkt på saken. Du har nok helt rett i at en løsning med 3 nettverkskort og 2 lan segmenter er en del mer vanskelig å programmere og vedlikeholde enn en løsning med bare 2 kort. På den annen side så kan man få til en løsning på denne måten som i mange tilfeller teknisk sett fungerer mere optimalt. Hvis man for eksempel på en web cafe har et anntall PC'er som brukes til spill så vil mange nettverksspill kunne generere en ganske stor trafikk på nettverket. Det vil da kunne være en ganske stor fordel "å stenge inne" denne lokale spill trafikken på et "spillsegment" i nettverket. På denne måten så kan man filtere ut den trafikken som er "lokal støy" fra nettverksspillene fra den kommunikasjon man ønsker skal bli transportert videre. En annen måte rent programmerings / konfigreringsmessig for å oppnå funksjonelt sett noenlunde det samme, det er ved å benytte 2 stk linux firewall. Først så plasserer man de tingene som genererer forholdsvis lite trafikk for eksempel ordinære internettmaskiner på lan rett innefor første firewall. "I enden av" det første lan så setter man opp en ny firewall (med ny snat, det fungerer helt fint) og her inne på det innerste segmentet så kjører man spill og slikt som genererer støy eller "spilltrafikk". Har forsøkt begge løsninger. Dobbelt firewall fungerer enklest og greiest synes jeg.
Jeg beklager meget jeg ikke har tænkt klart i denne weekend.. Første julefrokost satte sit tydelige præg med store tømmermænd (Langbeing: Tømmermænd=Giant Hangover :o)
Ovenstående fremgangsmåde er faktisk i princippet forkert. Det benytter Masquarade fremfor Source NAT. Masquarade bør kun benyttes i de tilfælde hvor man ikke kender IP adresser. og er derfor velegnet til f.eks. ISP med dial-in på flere net eller lign, men som skal routes ud gennem et specifikt netkort.
Istedet bør man benytte SNAT. Jeg har fremstillet et lille nyt script, som benytter Source NAT. Det vil i princippet sige, at der gives "fri FORWARD" for alle på LAN, men kun adresser 10.0.0.1-10.0.0.25 kan benytte SNAT hvis de forsøger at "snakke" gennem eth0.
Desuden har jeg åbnet for input til gatewar på alle porte og alle protokoller som ønsket.. Men det kan jeg ikke anbefale.
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
# FORWARD - tillader fuld forwarding på LAN siden iptables -A FORWARD -s $intip -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Source NAT - Tillader NAT på 10.0.0.1-10.0.0.25 # Lav løkke istedet for at køre linien 25 gange # Syntax: iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to $extip -s 10.0.0.[x]
X="1" && Y="26" while [ ! "$X" = "$Y" ]; do iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to $extip -s 10.0.0.$X && X=$[X=X+1] done
# INPUT
# Tillad "lan" at tilgå router på alle porte iptables -A INPUT -j ACCEPT -s 10.0.0.0/24 -d 10.0.0.1
# Tillad trafik fra til lo/loopback/127.0.0.1 iptables -A INPUT -j ACCEPT -i lo
# Tillad "outside" world at tilgår web, ftp, o.s.v. iptables -A INPUT -j ACCEPT -p tcp --dport 21 iptables -A INPUT -j ACCEPT -p tcp --dport 80 iptables -A INPUT -j ACCEPT -p tcp --dport 110 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Forøkte å teste scriptet ditt, men fikk det foreløpig ikke til å kjøre her av ukjent grunn. Vil forsøke å få det til å kjøre.
Dette med å kjøre løkke for å få til en serie med ip adresser, det var da utrolig fikst hvis det bare fungerer.
Når det gjelder bruken av snat / masquerade og dnat, så vet jeg ikke om jeg er 100 % enig med deg.
Man kan vel sammenlikne snat / masquerade og dnat kommandoene med en "pumpe" som setter i gang eller initierer en datastrøm, altså et slags "aktivt element" i data flowen. Disse kan i utgangspunktet "pumpe" data gjennom firewallen.
Input chain og output chain og forward chain fungerer som rene filtere eller passive elementer i firewall.
Når man benytter snat eller dnat, så er det i prinsipp to måter man kan gjøre det på. Enten så kan man sette opp snat eller dnat regler som virker over et bredt spekter av porter eller alle sammen som i utgangspunktet "pumper gjennom" hele datastrømmen. Der etter så setter man på et filter, typisk en forwarding rule som filterer vekk den datastrømmen som man ikke ønsker. Alternativt så kan man utforme "pumperegelen" slik at den kontrollerer og bare tar tak i de riktige ip pakkene slik som du har gjort i ditt script.
Det som er mest vanlig det er vel at man bruker prinsippet med å "pumpe" alle data for dataflowen ut, dvs i forbindelse med bruk av snat og masquerade, og så der etter i tillegg så setter man på en filteringsmekanisme etter behov ved hjelp av forward chains. Ved å spesifisere en eller to nettverksadaptere i disse reglemne så kan man spesifisere hvilken vei filterregelen skal virke.
Når det der i mot gjelder dnat, altså "pumping" av data inn gjennom firewall, så er det vel mere vanlig at man lar disse "pumpereglene" virke selektivt slik at man bare sender gjennom visse porter, de som skal inn på lan. Alternativt så kunne man vel rent teknisk ha "pumpet inn" samtlige porter og så brukt forwarding filtering rules som "passivt element" for å begrense dataflowen.
Når det gjelder snat og masquerade, så er det vel rett at masquerade i utgangspunkter er ment til dial up forbindelser og slikt. Rent funksjonelt så er det vel ikke den store forskjell på hvordan disse reglene fungerer i praksis, bortsett fra at masquerade gir enklere konfigurering. (Mener jeg etter å ha forsøkt å teste litt på akkurat dette.)
Synes det er et greit og oversiktelig prinsipp å bruke et regelsett der man i utgangspunktet dnatter en og en port inn mens man snatter eller masquerader hele datastrømmen ut, med etterfølgende filtrering etter behov. Vanligvis så er jo filtreingsbehovet større for inngående enn utgående trafikk. Ønsker man å bruke flere "snatteregler" som "pumper" data for en og en maskin eller en og en port så kan man vel saktens også det, hvis man foretrekker det.
Hva er forskjellen på Windows 2000 server og Linux ? Jo, hos Windows 2000 så kan man få lov til å sette et kryss i en boks, og så er det hemmeligheten til Bill Gates og Steeve Balmer å vite hva som skjer etter dette. I linux så lager man det hele selv.
Årsagen til denne er at mange services oftest er bundet til 127.0.0.1. eksempler på disse er f.eks. en SMTP server som kun må benyttes fra localhost. Så kan man faktisk have lukket port 25 på routeren og ovenstående iptables lilie vil gøre, at denne stadig fungerer fra f.eks. PHP scripts eller lign. Det kunne også være MySQL servere eller lign.
Denne udgør ikke den store sikkerhedsrisiko, så jeg mener den er "som oftest god at have med i sit script.
Med hensyn til: løkke funktion i script. Løkken virker fint på min computer. har du prøvet at teste om den opretter regelserne? Husk at ekstern ip adresse er din *globale ip* adresse.. hvis du har dobbelt firewall er det den ip adressen som firewall1 har fået af din isp.. ellers vil sourca nat ikke fungere.
# iptables -L -t nat
Hvad si'r denne, efter du har kørt løkken?
Mht til at benytte Masquarade eller SNAT - så er der absolut intet smart ved at benytte Masquarade. Problemet er at når man snakker firewall/router så gælder det i princippet om at forhindre/minimalisere misbrugs muligheder.
Dex_Dexter skriver jo: "eg skal så have lavet det så kun fra 10.0.0.1-10.0.0.25 har adgang til internettet."
Ved at benytte Masquarade så for alle maskiner der kan tilgå eth0 lov til at gå på nettet. Dette er forkert.
Hvis Dex's spørgsmål havde været "Alle maskiner skal på nettet" så havde Masquarade været ok.. Men så skal man være opmærksom på at alle maskiner menes der *alle*
Scriptet over er lagt ut eksakt slik som det er testkjørt uten endringer. Man må korrigere for at man benytter 10.0 serien med ip adresser internt i stedet for 192.168 serien slik som det er brukt i scriptet. Likeledes så kan man ta bort eller endre på de tingene som har med min lokale dns proxy å gjøre.
Designmessig og funksjonelt så bygger dette scriptet på det nær motsatte prinsippet i forhold til Dank sitt script. I dank sitt script så "snatter" man i prinsipp en og en datamaskin via et sett med snat rules. I mitt script så snatter man i utgangspunktet samtlige maskiner ved hjelp av en enkelt masquerading setning og så filtrerer man ut den uønskede trafikken, eller rettere sagt man åpner faktisk for den ønskede trafikken via et sett med forward filtering rules. Det er ikke slik at den ene måten kan fungere og den annen ikke. Begge deler kan fungere, slik at det blir nærmest en smakssak hva man synes gir den beste oversikt og logikk. Skulle det være noen forskjell i ytelse så skulle man kanskje tro at Dank sin løsning ville være den beste, men jeg tviler vel på om denne forskjellen kan måles eller merkes. (?)
Prinsippet om å lage firewaling eller filtering rules ved å kjøre en løkke slik at man kan få dekket inn for eksempel en serie med ip addresser, det har jeg aldri sett før.
Dank -> Hvordan i alle dager klarte du å finne på dette ?? Ligger det noen beskrivelse på nettet eller .. ??!!
Ja hvis man har input accept så gør det vel.. men ellers ikke.. input DROP lukker vel i princippet for alt. derfor også denne veien.. ellers skulle jeg mene det var en fejl i iptables.
"Dank -> Hvordan i alle dager klarte du å finne på dette ?? Ligger det noen beskrivelse på nettet eller .. ??!!"
- Efter den gang hvor du forklarede omkring iptables grundprincippet med de forskellige kæder, så forstod jeg det og siden da har jeg læst lidt på www.netfilter.org :o)
Har lige kommet i tanke om en sikkerheds risiko ved disse scripts.. Hvis f.eks. en bruger med 10.0.0.200 skifter ip til f.eks. 192.168.0.20 så har vedkommende faktisk adgang til internettet....
Dette må kunne løses med modprobe ipt_mac og så tilføje noget MAC adresse testing...
jeg vender lige tilbage om lidt.. skal lige finde en løsning.
Dank -> Fuksjonelt og utad så skal de to firevall scriptene virke likt, selv om den "innvendige virkemåten" faktis er nesten motsatt. Jeg har heller ikke satt opp åpninger til eventuelle lokale web servere og slikt, fordi jeg regner dette som "rutine" og fordi jeg la ut scriptet slik som testkjørt.
Begge scripten skal imidlertid virke likt "utad" slik at de bare tillater trafikk ut fra en bestemt ip adresse serie. Måten dette skjer på er som sagt forskjellig. Hos meg så skjer det ut fra et sett med forward filtering rules som setter opp denne begrensningen og hos deg ved hjelp av et sett med snat rules som virker selektivt for den enkelte avsender ip.
Smak og behag ... Begge deler kan fungere.
Omkring den siste .. MAC adresse, jo det går vel ann å teste på fysisk kort adresse, men blir ikke det "vel kraftig" med mindre kravet til sikkerhet er meget stort ? Det vil vel ellers være slik at den som "tar" en lovlig adresse vil komme ut på nettet. Man kan jo ellers også sette restriksjoner på klientene slik at de ikke kan skifte adresse.
Langbein.. dit sidste script vil ikke virke. Fordi du har kun forward på 10.0.0.1-25 og ikke resten af 10.0.0.* Derfor vil disse maskiner ikke kunne se hindanden på LAN
Mht til MAC: Jo det giver stor sikkerhed.. Men jeg troede at dex_dexers script var til f.eks. en skole eller institiion.. hvis dette er tilfældet vil det ikke tagle lang tid for en 12 årig skolelev at "hacke" sig igennmem til internettet :o)
"Langbein.. dit sidste script vil ikke virke. Fordi du har kun forward på 10.0.0.1-25 og ikke resten af 10.0.0.* Derfor vil disse maskiner ikke kunne se hindanden på LAN"
Feil mener jeg. Forwarding filtering rules virker bare inn på trafikken mellom lan og wan. De vil ikke ha noen effekt for den interne trafikken på lan. Alle maskinene på 10.0.0.* vil kunne se hverandre.
Deler man der i mot opp nettverket i flere nettverkssegmenter slik at man router trafikken mellom segmentene via Linux firewall/router da vil der i mot forwarding filtering rules ha effekt. Dette er ikke tilfellet her.
"Feil mener jeg. Forwarding filtering rules virker bare inn på trafikken mellom lan og wan. De vil ikke ha noen effekt for den interne trafikken på lan. Alle maskinene på 10.0.0.* vil kunne se hverandre."
- Hvordan skal de kunne se hindanden hvis ikke der er forwarding tilladt? Som udgangspunkt er FORWARD DROP - derefter åbnes for 10.0.0.1-25, men ikke mere end det.. det vil sige at 10.0.0.25-255 ikke vil kunne FORWADE gennem routeren..
Lan Trafik ---> router/eth1 | | Skal trafikken holdes på eth1 (LAN) så ---> iptables -A FORWARD -i eth1 -j ACCEPT | | Skal trafikken videre "ud" på nettet | | echo "iptables -A FORWARD -i eth0 -m mac --mac-source $VAR -j ACCEPT" (match mod mac adresse - accept hvis mac adresse kører)
Ja, dank, du er en av de her på eksperten Linux det virkelig går an å diskutere med. Mange andre forstår jo hverken norsk ..
Akkurat i dette enkle tilfellet så mener jeg at du tar litt feil.
"- Hvordan skal de kunne se hindanden hvis ikke der er forwarding tilladt? "
Fordi en firewall mellom lan og wan vanligvis ikke foretar noen firewalling eller filtrering i forhold til den trafikk som skjer inne på lan. Firewall blir overhodet ikke spurt, derfor behøves ingen regler som tar vare på dette.
Tenk deg en praktisk virkelighet. Man har en firewall maskin som på den ene siden er knyttet opp mot internett. På den annen side så er den knyttet opp mot en hub eller en switch. Til denne hubben eller switchen er lan koplet opp. Firewall vil ikke ha noen inflytelse over den trafikken som skjer over denne innvendige hub eller switch. Denne trafikken vil flyte fritt mellom de innvendige maskinene på lan uten at firewall kan gjøre noe fra eller til i forhold til dette.
"Skal trafikken holdes på eth1 (LAN) så ---> iptables -A FORWARD -i eth1 -j ACCEPT"
Nei, dette blir firewall mellom lan og wan i prinsipp aldri spurt om, så den vil hverken ha noen mulighet til å godkjenne eller stanse en slik trafikk. De innvendige lan maskinene som er koplet opp mot en felles switch eller en felles hub vil kunne kommunisere fritt med hverandre uten at dette involverer firewall til den utvendige verden på noen måte.
Når det gjelder MAC adresser, så mener jeg å vite at dette i prinsipp er mulig, men jeg har aldri prøvd.
ja det kan jeg da egentligt godt se nu.. jeg er måske blevet så fokusert på selve routeren, at jeg glemmer switch/hub - selvfølgelig vil dette kunne lade sig gøre.. Jeg tog feil.
Svarer lidt til at hvis jeg helt fjerne min gateway, så vil maskinerne jo stadig kommunikere, bare det ellers har samme net/mask
Jeg har i mellemtiden testet på MAC adresser.. dette virker fint.. dog skal det så laves på en lidt anden måde end jeg forslog tidligere, idet jeg lidt havde glemt det med FORWARDING på lokalt net.
Trafikk på lan sin ipserie og lan sitt nettverkssegment blir ikke filtrert via firewall, med mindre det da dreier seg om flere separate nettverkssegmenter, med hver sin ip adresse serie, der disse lan segmentene blir bundet sammen komunikasjonsmessig via lokale firewall/routere. Dette er ikke tilfellet her. (Jeg foreslo faktisk akkurat dette et sted oppe i her, men fant ut at det ville bli for komplisert, så jeg gikk bort fra denne muligheten.)
Ja i lige måde .. Det der med å kjøre en loop for å generere regler det hadde jeg aldri tenkt på, (fordi det var jeg helt sikker på ikke kunne gjøres), men der tok jeg feil (heldig vis :-)
Når det gjelder denne MAC muligheten, gidder du å legge ut lit info hvis det kjører. Har som sagt aldri prøvd.
scriptet skal bruges til en ungdomsklub, hvor vi tit og ofte holder netparty, det er så kun dem som "står for partyet" der har internet adgang, eller hvis der er nogen der mangler drivere osv. jeg har modificeret dit script lidt, isteder for løkken har jeg lavet et lille perl interface til at adde og remove adgang til internet, men har tænkt på det samme som dig med mac også. jeg har i alt fald også fået lært noget iptables, jeg har lidt basis kundskab, men jeg fik ikke lige sovet de sidste par dage så den logiske tankegang var lige gået fløjten, også derfor jeg kom til at flame lanbien lidt, det må du undskylde ;) jeg smider scriptet samt det perl script herind engang når jeg får det hele lavet som jeg vil have det ;) takker for hjælpen btw det er en 66 mhx med 16 mb ram der står som gateway, og den klarer det just fine.
iptables -A FORWARD -i eth1 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
For en Linux så kan man jo finne MAC adressen ved å kjøre ifconfig, men en Windows ?? Det kunne selvfølgelig være mulig å sette kortene midlertidig inn i Linuxen for sjekk. Andre måter ??
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.