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