Foto av ezioman.
Om iptables
iptables er et kommandolinje-brannmurverktøy som bruker policykjeder for å tillate eller blokkere trafikk. Når en tilkobling prøver å etablere seg på systemet ditt, ser iptables etter en regel i listen for å matche den til. Hvis den ikke finner en, skiller den seg til standardhandlingen.
iptables kommer nesten alltid forhåndsinstallert på en hvilken som helst Linux-distribusjon. For å oppdatere / installere det, hent bare iptables-pakken:
sudo apt-get install iptables
Det er GUI alternativer til iptables som Firestarter, men iptables er egentlig ikke så vanskelig når du har noen kommandoer ned. Du vil være ekstremt forsiktig når du konfigurerer iptables-regler, spesielt hvis du er SSH'd inn i en server, fordi en feil kommando kan permanent låse deg ut til den er manuelt festet på den fysiske maskinen.
Typer av kjeder
iptables bruker tre forskjellige kjeder: input, forward og output.
Input - Denne kjeden brukes til å kontrollere oppførselen for innkommende tilkoblinger. For eksempel, hvis en bruker forsøker å SSH inn i din PC / server, vil iptables forsøke å matche IP-adressen og porten til en regel i inngangskjeden.
Framover - Denne kjeden brukes til innkommende tilkoblinger som ikke blir levert lokalt. Tenk på en ruter - data blir alltid sendt til det, men sjelden faktisk bestemt for ruteren selv; dataene er bare videresendt til målet sitt. Med mindre du gjør noen form for ruting, NATing eller noe annet på systemet ditt som krever videresending, vil du ikke engang bruke denne kjeden.
Det er en sikker brann måte å kontrollere om systemet ditt bruker eller trenger fremoverkjeden.
iptables -L -v
Produksjon - Denne kjeden brukes til utgående tilkoblinger. For eksempel, hvis du prøver å pinge howtogeek.com, vil iptables sjekke utgangskjeden for å se hva reglene gjelder for ping og howtogeek.com før du tar en beslutning om å tillate eller nekte tilkoblingsforsøk.
Advarsel
Selv om pinging av en ekstern vert virker som noe som bare trenger å krysse utgangskjeden, må du huske at for å returnere dataene, vil inngangskjeden også bli brukt. Når du bruker iptables for å låse systemet, husk at mange protokoller krever toveiskommunikasjon, så både inngangs- og utgangskjeder må konfigureres riktig. SSH er en felles protokoll som folk glemmer å tillate på begge kjedene.
Policy Chain Standard Oppførsel
Før du går inn og konfigurerer bestemte regler, vil du ønske å bestemme hva du vil at de tre kjedene skal ha som standard. Med andre ord, hva vil iptables gjøre hvis forbindelsen ikke samsvarer med eksisterende regler?
For å se hvilke policykjeder du for øyeblikket er konfigurert til å gjøre med uovertruffen trafikk, kjør du
iptables -L
kommando.
Flere ganger enn ikke, vil du at systemet ditt skal godta tilkoblinger som standard. Med mindre du har endret retningslinjene for policykjeden tidligere, bør denne innstillingen allerede være konfigurert. Uansett, her er kommandoen for å godta tilkoblinger som standard:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Ved å standardisere til aksepteringsregelen, kan du deretter bruke iptables til å nekte bestemte IP-adresser eller portnumre, mens du fortsetter å godta alle andre tilkoblinger. Vi kommer til disse kommandoene om et minutt.
Hvis du hellere vil nekte alle tilkoblinger og angi manuelt hvilke som du vil tillate å koble til, bør du endre standardpolitikken for kjedene dine for å slippe. Å gjøre dette ville trolig bare være nyttig for servere som inneholder sensitiv informasjon og bare noen gang har de samme IP-adressene koble til dem.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Tilkoblingsspesifikke svar
Med standardkjedepolicyen din konfigurert, kan du begynne å legge til regler for iptables, slik at den vet hva de skal gjøre når den møter en forbindelse fra eller til en bestemt IP-adresse eller -port. I denne veiledningen skal vi gå over de tre mest grunnleggende og brukte "responsene".
Aksepterer - Tillat tilkoblingen.
Miste - Slett forbindelsen, opptre som det aldri skjedde. Dette er best hvis du ikke vil at kilden skal innse at systemet ditt eksisterer.
Avvis - Ikke tillat tilkoblingen, men send en feilmelding tilbake. Dette er best hvis du ikke vil at en bestemt kilde skal koble til systemet ditt, men du vil at de skal vite at brannmuren blokkerte dem.
Den beste måten å vise forskjellen mellom disse tre reglene på er å vise hvordan det ser ut når en PC prøver å pinge en Linux-maskin med iptables konfigurert for hver av disse innstillingene.
Tillat tilkoblingen:
Tillat eller blokkering av bestemte tilkoblinger
Når konfigurasjonskjedene er konfigurert, kan du nå konfigurere iptables for å tillate eller blokkere bestemte adresser, adresser og porter. I disse eksemplene vil vi sette sammenkoblingene til
DROP
men du kan bytte dem til
ACCEPT
eller
REJECT
avhengig av dine behov og hvordan du har konfigurert dine policykjeder.
Merk: I disse eksemplene skal vi bruke
iptables -A
å legge til regler i den eksisterende kjeden. iptables starter øverst på listen og går gjennom hver regel til den finner en som den samsvarer med. Hvis du trenger å sette inn en regel over en annen, kan du bruke
iptables -I [chain] [number]
å spesifisere nummeret det skal være i listen.
Tilkoblinger fra en enkelt IP-adresse
Dette eksemplet viser hvordan du blokkerer alle tilkoblinger fra IP-adressen 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Tilkoblinger fra en rekke IP-adresser
Dette eksemplet viser hvordan du blokkerer alle IP-adressene i 10.10.10.0/24-nettverket. Du kan bruke en nettmaske eller standard slash notation for å angi rekkevidden av IP-adresser.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
eller
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Tilkoblinger til en bestemt port
Dette eksemplet viser hvordan du blokkerer SSH-tilkoblinger fra 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Du kan erstatte "ssh" med hvilken som helst protokoll eller portnummer. De
-p tcp
En del av koden forteller iptables hvilken type tilkobling protokollen bruker. Hvis du blokkerte en protokoll som bruker UDP i stedet for TCP, så
-p udp
ville være nødvendig i stedet.
Dette eksemplet viser hvordan du blokkerer SSH-tilkoblinger fra en hvilken som helst IP-adresse.
iptables -A INPUT -p tcp --dport ssh -j DROP
Tilkoblingsstater
Som nevnt tidligere, vil mange protokoller kreve toveiskommunikasjon. Hvis du for eksempel vil tillate SSH-tilkoblinger til systemet ditt, vil inn- og utgangskjeder trenge en regel som er lagt til dem. Men, hva hvis du bare vil at SSH kommer inn i systemet ditt for å få lov? Vil ikke legge til en regel i utgangskjeden også tillate utgående SSH-forsøk?
Det er her forbindelsestilstandene kommer inn, noe som gir deg muligheten du trenger for å tillate toveiskommunikasjon, men bare tillate enveisforbindelser å bli etablert. Ta en titt på dette eksemplet, hvor SSH-tilkoblinger FRA 10.10.10.10 er tillatt, men SSH-tilkoblinger til 10.10.10.10 er ikke. Systemet har imidlertid lov til å sende tilbake informasjon over SSH så lenge sesjonen allerede er etablert, noe som gjør SSH-kommunikasjon mulig mellom disse to vertene.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Lagrer endringer
Endringene du gjør i iptables-reglene dine, vil bli slettet neste gang iptables-tjenesten starter på nytt med mindre du utfører en kommando for å lagre endringene. Denne kommandoen kan variere avhengig av distribusjonen din:
Ubuntu:
sudo /sbin/iptables-save
Red Hat / CentOS:
/sbin/service iptables save
Eller
/etc/init.d/iptables save
Andre kommandoer
Oppgi de gjeldende konfigurerte iptables-reglene:
iptables -L
Legge til
-v
alternativet vil gi deg pakke og byte informasjon, og legge til
-n
vil liste alt numerisk. Med andre ord - vertsnavn, protokoller og nettverk er oppført som tall.
For å slette alle gjeldende konfigurerte regler, kan du utstede flush-kommandoen.
iptables -F