Iptables for nybegynnere

Iptables for nybegynnere
Iptables regnes som en av de viktigste defensive ressursene for mange systemadministratorer til tross for at de er erstattet av Nftables. Topp nettverksprodusenter innlemmet iptables til maskinvare fremdeles i produksjonsmiljøer.

Iptables er svært allsidig og godtar direkte kommandoer fra brukeren som kan laste og losse regler i henhold til behovet.

Denne opplæringen viser Hvordan beskytte en webserver, Videresend tilkoblinger til interne IP -adresser fra vårt LAN, og tilbyr spesifikke tjenester til hviteliste IP -adresser.

Merk: Denne opplæringen i Iptables ble først utgitt for to år siden og oppdatert 23/05/2021 med forbedrede eksempler og skjermbilder av bedre kvalitet.

Hvordan installere

Iptables er utelatt som standard i distribusjoner som inneholder NFTables.

Hvis du vil installere iptables på Debian -baserte Linux -distribusjoner, kjører du følgende kommando:

sudo apt update && apt installer iptables

Åpne HTTP- og HTTPS -porter

Først av alt, la oss legge til alle akseptere retningslinjer som starter med webserveren.

Merk: Hvis du oppretter et skript med regler, trenger du ikke bruke sudo.

sudo iptables -a input -p tcp - -dport 80 -j aksepterer
sudo iptables -a input -p tcp - -dport 443 -j aksepterer

For å se ekstra regler kjøres “iptables -l

Hvor:

Iptables = Ringer programmet

-EN = Legger til en regel

Inngang = Innkommende trafikk

-p = protokoll

-ddport = destinasjonsport

-j = spesifiser “målet”; Målet er typen policy: akseptere, slippe, avvise (innebygd) ..

Iptables -l = lister alle iptables lastede regler (Iptables -l -v = det samme med verbositet.)

I eksemplet over instruerer vi iptables om å legge til en regel for innkommende trafikk gjennom TCP -protokoll og porter 80 (HTTP) og 443 (HTTPS) for å bli akseptert.

Vi kan endre kommandoen for å godta forbindelsen bare fra en spesifikk IP ved å legge til parameteren "-s”:

sudo iptables -a inngang -s 127.0.0.1 -P TCP - -DPORT 80 -J aksepterer

Hvor:

s = kilde

Du kan også teste brannmuren din med NMAP:

Merk: I eksemplet over er ikke port 443 vist fordi serveren ikke har et SSL -sertifikat tilstrekkelig konfigurert.

Merk: For mer informasjon om NMAP, kan du lese dette.

Beskytte serveren din med iptables:

#Åpne HTTP- og HTTPS -tjenester.
iptables -a input -p tcp - -dport 80 -j aksepterer
iptables -a input -p tcp - -dport 443 -j aksepterer
#Open SSH Port Service
iptables -a input -p tcp - -dport 22 -m conntrack - -ctstate new, etablert -j aksepterer

Der de nye parametrene er:

-m betyr “Match” og brukes til å kalle iptables utvidelser som Conntrack, som ikke er en del av Iptables Core -funksjoner.

Conntrack = Tillater sporingsinformasjon om tilkoblinger som spesifikke adresser eller, i dette tilfellet, tilstanden til forbindelsen. Dette må brukes nøye siden mange regler for å forsvare servere fra noen angrep bruker ConnTrack mens maskinvaren begrenser bruken av den, og slik begrensning kan brukes til å overbelaste serverens ressurser.

-CTSTATE = bestemmer tilstanden til regelen å matche; De mulige statene er: NY, Etablert, I SLEKT og UGYLDIG.

#Protect din SSH -tjeneste mot brute force -angrep ved å tillate bare en spesifikk IP
for å få tilgang til iptables -a input -p tcp -s x.X.X.X - -DPORT 22 -M ConnTrack - - - -Ctstate Ny,
Etablert -j aksepterer
#Protect din SSH -tjeneste mot brute force -angrep ved å begrense tilkoblingsforsøk
Iptables -a input -p tcp -m tcp - -dport 22 -m conntrack - -ctstate new -j 22 -test
Iptables -a 22 -test -M Nyere -Navn Tilkoblinger -Sett -Mask 255.255.255.255 -Rsource
Iptables -a 22 -test -m Nyere -Navn Tilkoblinger - -Rcheck -Mask 255.255.255.255
--rsource -sekunder 30 -hitcount 3 -j 22 -beskyttelse
Iptables -a 22 -test -j aksepterer
Iptables -a 22 -beskyttelse -j dråpe

Hvor:

I den første linjen sier vår regel “-m Conntrack -ctstate New, ” Noe som betyr at hvis tilkoblingen er ny, passerer du til regelen “22-test”.

Den andre linjen sier pakker NetMask 255.255.255.255 er navngitt som Tilkoblinger.

Den tredje linjen sier om en Tilkoblinger er over 3 ganger innen 30 sekunder, brannmuren fortsetter å bruke kjeden 22-beskyttelse. Den fjerde linjen sier om Tilkoblinger ble ikke sett over 3 ganger i løpet av 30 sekunder, de kunne aksepteres.

Den femte linjen, som tilhører 22-beskyttelse kjede, sier å slippe Tilkoblinger Hvis de ser ut til å være over 3 ganger i løpet av 30 sekunder.

Nå for å avslutte, la oss nekte alle uovertrufne innkommende tilkoblinger og la oss tillate all utgående trafikk:

iptables -p output godta
iptables -p inngangsfall

P refererer til kjedepolitikken; Husk at målet er politikken, aksepterer, slipp, avviser. I dette tilfellet sier vi at standardpolitikken for utgående trafikk er å akseptere, og standardpolitikken for innkommende trafikk er å nekte med mindre vi spesifiserte noe annet i tidligere regler. Dette er en veldig grunnleggende brannmur som ikke inkluderer regler for mange angrep, for læringsformål og ikke for produksjon; På slutten av artikkelen knytter jeg en brannmur jeg brukte til produksjon på en server; den har kommentarer som forklarer hver regel.

Videresende en tilkobling til en bestemt port til en bestemt IP -adresse

Dette er også veldig nyttig for stasjonære brukere som ønsker å innlede en tilkobling gjennom en bestemt enhet; Det kan være nyttig selv for spillere; Vanligvis gjør vi det fra ruterinnstillingene, men la oss anta at rutingsenheten kjører iptables.

iptables -a preouting -t nat -p tcp -d x.X.X.X -DPORT 8080 -J Dnat -til destinasjon y.Y.Y.Y: 80
iptables -a postrouting -t nat -p tcp -j snat - -to -source x.X.X.X

Reglene over påkaller NAT (nettverksadresseoversettelse) for å spesifisere tilkoblinger gjennom protokoll TCP til adressen x.X.X.X, og port 8080 vil bli omdirigert for å adressere y.Y.Y.Y, port 80. Den andre regelen spesifiserer svar må sendes til kildeadressen (x.X.X.X). Vi kan bruke disse reglene for å gi tilgang til et IP -kamera, aktivere online spill med eksterne nettverk osv.

Denne opplæringen var ment å introdusere nybegynnere til iptables og forklarer bare et begrenset antall grunnleggende. Nedenfor kan du se et utvalg av en godt planlagt brannmur som brukes til en produksjonsserver; Det inkluderer noen av reglene vi allerede har sett til mer komplekse regler for å forhindre DDO -er, blant andre typer angrep.

Bonus: Eksempel på produksjonsbrannmur

iptables -f
#---- Aktiver beskyttelse mot dårlig feilmelding
Aktiver/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#---- Slå på omvendt banfiltrering. Tryggere, men bryter asymmetrisk ruting og/eller ipsec
Aktiver/proc/sys/net/ipv4/conf/*/rp_filter
#---- ikke godta kildedirte pakker. Kildruting brukes sjelden til legitim
Formål deaktiver/proc/sys/net/ipv4/conf/*/aksept_source_route
#---- Deaktiver ICMP Redirect-aksept som kan brukes til å endre rutetabellene dine
deaktiver/proc/sys/net/ipv4/conf/*/aksepterer_redirects
#---- Siden vi ikke godtar viderekoblinger, ikke send viderekoblingsmeldinger heller
deaktiver/proc/sys/net/ipv4/conf/*/send_redirects
#---- Ignorer pakker med umulige adresser
deaktiver/proc/sys/net/ipv4/conf/*/log_martians
#---- Beskytt mot innpakningssekvensnumre og hjelp av tur / retur-tid
Aktiver/proc/sys/net/ipv4/tcp_timestamps
#---- Hjelp mot syn-flom DOS eller DDoS-angrep ved å bruke spesielle valg av initial
TCP -sekvensnumre Aktiver/Proc/SYS/NET/IPV4/TCP_SYNCOOKIES
#---- Bruk selektiv ack som kan brukes til å betegne at spesifikke pakker mangler
deaktiver/proc/sys/net/ipv4/tcp_sack
MODPROBE NF_CONNTRACK_IPV4
modprobe nf_nat
# MODPROBE NF_CONNTRACK_IPV6
# MODPROBE NF_CONNTRACK_AMANDA
# modprobe nf_nat_amanda
MODPROBE NF_CONNTRACK_H323
MODPROBE NF_NAT_H323
MODPROBE NF_CONNTRACK_FTP
MODPROBE NF_NAT_FTP
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# MODPROBE NF_CONNTRACK_PROTO_DCCP
# modprobe nf_nat_proto_dccp
MODPROBE NF_CONNTRACK_NETLINK
# MODPROBE NF_CONNTRACK_PPTP
# modprobe nf_nat_pptp
# MODPROBE NF_CONNTRACK_PROTO_UDPLITE
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# MODPROBE NF_CONNTRACK_PROTO_SCTP
# MODPROBE NF_NAT_PROTO_SCTP
# modprobe nf_conntrack_sane
MODPROBE NF_CONNTRACK_SIP
modprobe nf_nat_sip
# MODPROBE NF_CONNTRACK_TFTP
# modprobe nf_nat_tftp
# modprobe nf_nat_snmp_basic
#Nå vi kan begynne å legge til utvalgte tjenester til brannmurfilteret vårt. Det første slikt
er et localhost -grensesnitt iptables -a input -i lo -j aksepterer
#Vi ba brannmuren ta alle innkommende pakker med TCP -flagg ingen og bare slippe dem.
iptables -a input -p tcp ! -M Conntrack - -Ctstate New -J Drop
#Vi ber iptables å legge til (-a) en regel til innkommende (input)- SSH fungerer på port 50683
i stedet 22.
iptables -a input -p tcp -m tcp - -dport 50683 -j aksepterer
iptables -a input -p tcp -m tcp -s spesifikk ip - -dport 50683 -j aksepterer
iptables -a input -p tcp -m tcp -s spesifikk ip - -dport 50683 -j aksepterer
iptables -a input -p tcp -m tcp -s spesifikk ip - -dport 50683 -j aksepterer
Iptables -a Input -P TCP - -DPORT 50683 -M ConnTrack - -Ctstate New -M Nylig -Sett
--Navn Ssh -J godta
Iptables -a Input -P TCP - -DPORT 50683 -M Nylig -Update -Sekunder 60 -HitCount 4
--RTTL -NAME SSH -J LOG -LOG -PREFIX "SSH_BRUTE_FORCE"
Iptables -a Input -P TCP - -DPORT 50683 -M Nylig -Update -Sekunder 60 -HitCount 4
--RTTL -Navn Ssh -j Drop
Iptables -a Input -P TCP - -DPORT 50683 -M ConnTrack - -Ctstate New -M Nylig -Sett
--Navn SSH
Iptables -a Input -P TCP - -DPORT 50683 -M ConnTrack - -Ctstate Ny -j SSH_WHITELIST
iptables -a input -P TCP - -DPORT 50683 -M ConnTrack - -Ctstate New -M Nylig -Update
--Sekunder 60 -HitCount 4 -RTTL -Navn SSH -J ULOG --ulog -Prefix SSH_BRU
iptables -a input -P TCP - -DPORT 50683 -M ConnTrack - -Ctstate New -M Nylig -Update
--Sekunder 60 -HitCount 4 -RTTL -Navn Ssh -J Drop
#Nå jeg tillater IMAP, og SMTP.
-En input -p tcp - -dport 25 -j aksepterer
# Tillater pop- og pops -tilkoblinger
-En input -P TCP - -DPORT 110 -J Aksepter
-En input -p tcp - -dport 995 -j aksepterer
########## i Imap & Imaps ###########
-En input -p tcp - -dport 143 -j aksepterer
-En input -p tcp - -dport 993 -j aksepterer
########## MySQL #################
iptables -a input -i eth0 -p tcp -m tcp - -dport 3306 -j aksepterer
######### R1Soft CDP System #############
iptables -a input -p tcp -m tcp -s spesifikk ip - -dport 1167 -j aksepterer
############### utgående ###################
iptables -i input -m conntrack - - - -ctstate etablert, relatert -j aksepterer
### Tillat pågående, blokker innkommende ikke definert ###
iptables -p output godta
iptables -p inngangsfall
iptables -l -n
Iptables-Lave | tee /etc /iptables.test.regler
Iptables-Restore < /etc/iptables.test.rules
#Service Iptables omstart