Egentlig trenger du ikke engang å vite Iptables syntaks for å bruke den, du har grafiske verktøy som Firewall Builder som kan gjøre læringsprosessen unødvendig, men hvis ønsket er å øke Linux-administrasjonskunnskap, er Iptables det første trinnet for å lære å praktisk administrere sikkerhet under Linux og til og med lette administrering av CISCO eller Fortigate sikkerhetsenheter og lignende.
Iptables lar deg i utgangspunktet instruere systemet ditt om å godta, avvise eller videresende en forbindelse, avhengig av valgte parametere, for eksempel å omdirigere alle tilkoblinger til X-port til en annen IP-adresse, for å blokkere alle tilkoblinger som kommer fra et spesifikt IP-, IP-område eller til godta alle tilkoblinger som kommer fra godkjente IP-adresser blant mange andre funksjoner.
I denne opplæringen lærer vi hvordan du beskytter en webserver, hvordan du videresender tilkoblinger til interne IP-adresser fra vårt LAN og hvordan du bare tilbyr spesifikke tjenester til godkjente IP-adresser.
Installere Iptables
For å installere iptables på Debian / Ubuntu-systemer, kjør bare "apt update && apt install iptables" som root eller med "sudo" som prefiks som i følgende bilde.
Åpner HTTP- og HTTPS-porter
Først av alt kan vi legge til alle ACCEPT-policyer som starter på webserveren.
iptables -A INNGANG -p tcp --dport 80 -j ACCEPTiptables -A INNGANG -p tcp --dport 443 -j AKSEPT
For å se våre regler lagt til, kjør “iptables -L”
Hvor:
Iptables = kaller programmet
-EN = legger til en regel
INNGANG = innkommende trafikk
-s = protokoll
-ddport = destinasjonsport
-j = spesifiser “målet”, målet er typen policy: ACCEPT, DROP, KUE eller RETURN.
Så på eksemplet på bildet ovenfor forteller vi Iptables å legge til en regel for innkommende trafikk gjennom TCP-protokoll og porter 80 og 443 for å bli akseptert.
Vi kan endre kommandoen for å akseptere forbindelsen bare fra en bestemt IP ved å legge til parameteren “-s”:
iptables -A INPUT -s 127.0.0.1-p tcp --dport 80 -j AKSEPT
Hvor:
s = kilde
Iptables -L = viser alle iptables lastede regler
Iptables -L -v = det samme med ordlighetsgrad.
Vi kan også teste brannmuren vår med nmap:
Som vi kan se er port 80 åpen både i henhold til “iptables -L” og Nmap.
Merk: For mer informasjon om Nmap-bruk kan du lese veiledningen vår om den
Beskytter serveren din
# Åpne HTTP- og HTTPS-tjenester.iptables -A INNGANG -p tcp --dport 80 -j ACCEPT
iptables -A INNGANG -p tcp --dport 443 -j AKSEPT
#Open SSH Port Service
iptables -A INNGANG -p tcp --port 22 -m forbindelseslinje --ctstate NY, OPPRETTET -j ACCEPT
Hvor de nye parametrene er:
-m = betyr "match" og brukes til å kalle Iptables utvidelser som conntrack som ikke er en del av iptables kjernefunksjoner.
konnektor = Gjør det mulig å spore informasjon om forbindelser som spesifikke adresser eller i dette tilfellet tilkoblingens tilstand. Dette må brukes forsiktig, siden mange regler for å forsvare servere mot noen angrep bruker conntrack mens bruken er begrenset av maskinvaren, og slik begrensning kan brukes til å overbelaste serverens ressurser.
-ctstate = bestemmer tilstanden til regelen som skal matche, de mulige tilstandene er: NY, ESTABLISERT, RELATERT og ugyldig.
#Beskytt SSH-tjenesten din mot brute force-angrep ved å bare tillate en spesifikk IPfor å få tilgang til iptables -A INNGANG -p tcp -s X.X.X.X --dport 22 -m forbindelsesbane --statstat NYTT,
OPPRETTET -j ACCEPT
#Beskytt SSH-tjenesten din mot brute force-angrep ved å begrense forbindelsesforsøk
Iptables -A INNGANG -p tcp -m tcp --port 22 -m tilkobling --ctstate NY -j 22-test
Iptables -A 22-test -m recent --name CONNECTIONS --set --mask 255.255.255.255 - kilde
Iptables -A 22-test -m nylig --navn FORBINDELSER --kontroll --maske 255.255.255.255
--rkilde --sekunder 30 --hitcount 3 -j 22-beskyttelse
Iptables -A 22-test -j ACCEPT
Iptables -A 22-beskyttelse -j DROP
Hvor:
I den første linjen sier vår regel “-m forbindelsesbane -stat staten NY ” som betyr at hvis forbindelsen er ny, så gå til regelen "22-test".
Den andre linjen sier pakker nettmaske 255.255.255.255 er navngitt som FORBINDELSER .
Den tredje linjen sier om en FORBINDELSER er virker mer enn 3 ganger i løpet av 30 sekunder, fortsetter brannmuren å bruke kjeden 22-beskyttelse. Den fjerde linjen sier om FORBINDELSER ikke virket over 3 ganger i løpet av 30 sekunder, det kan godtas.
Femte linje, som tilhører 22-beskyttelse kjede sier å slippe FORBINDELSER hvis virker over 3 ganger innen 30 sekunder.
Nå til slutt, kan vi nekte alle ikke-aksepterte forbindelser, og la oss tillate all utgående trafikk:
iptables -P OUTPUT ACCEPTiptables -P INNGANG DROP
Hvor -P betyr målets kjede, husk at målet er policyen, ACCEPT, DROP, KUE eller RETURN. I dette tilfellet sier vi at standardpolicyen for utgående trafikk er å akseptere, og standardpolicyen 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 legger jeg til en brannmur jeg brukte for produksjon på en server, den har kommentarer som forklarer hver regel.
Videresending av en forbindelse til en spesifikk havn til en spesifikk IP-adresse
Dette er veldig nyttig også for stasjonære brukere som ønsker å opprette en tilkobling gjennom en bestemt enhet, det kan være nyttig selv for spillere, vanligvis gjør vi det fra ruterenes innstillinger, men la oss anta at rutingenheten kjører Iptables.
iptables -A PREROUTING -t nat -p tcp -d X.X.X.X --dport 8080 -j DNAT - til destinasjonenY.Y.Y.Y: 80
iptables -E POSTROUTING -t nat -p tcp -j SNAT --til kilde X.X.X.X
Reglene ovenfor påkaller NAT (Network Address Translation) for å spesifisere tilkoblinger via protokoll TCP, til adressen X.X.X.X og port 8080 blir omdirigert til adresse Y.Y.Y.Y, port 80. Den andre regelen angir at svarene må sendes til kildeadressen (X.X.X.X). Vi kan bruke disse reglene for å gi tilgang til et IP-kamera, for å aktivere online spill med eksterne nettverk osv.
Denne opplæringen var ment å introdusere nybegynnere til Iptables og forklarer bare et begrenset antall grunnleggende funksjoner. Nedenfor kan du se et utvalg av en godt planlagt brannmur som ble brukt til en produksjonsserver. Den inkluderer fra noen av reglene vi allerede så til mer komplekse regler for å forhindre DDoS-angrep blant andre.
Neste opplæring vil være på snusing i lokale nettverk, men på en neste opplæring forklarer jeg noen av reglene som brukes på brannmuren nedenfor. Takk for at du fulgte LinuxHint.com, fortsett å følge oss for fremtidige oppdateringer om Iptables og Linux generelt.
Bonus: Eksempel på produksjonsbrannmur
iptables -F# ---- Aktiver dårlig feilmelding
aktiver / proc / sys / net / ipv4 / icmp_ignore_bogus_error_responses
# ---- Slå på filtrering av omvendt sti. Tryggere, men bryter asymetrisk ruting og / eller IPSEC
aktiver / proc / sys / net / ipv4 / conf / * / rp_filter
# ---- Ikke godta kildesirkulerte pakker. Kildesending brukes sjelden til legitim
deaktivere / proc / sys / net / ipv4 / conf / * / accept_source_route
# ---- Deaktiver aksept av ICMP-omdirigering som kan brukes til å endre rutetabellene dine
deaktiver / proc / sys / net / ipv4 / conf / * / accept_redirects
# ---- Da vi ikke godtar viderekoblinger, må du ikke sende 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 innpakning av sekvensnumre og hjelp til å måle rundturstiden
aktiver / proc / sys / net / ipv4 / tcp_timestamps
# ---- Hjelp mot syn-flood DoS- eller DDoS-angrep ved bruk av spesielle valg av initial
TCP-sekvensnumre aktiverer / proc / sys / net / ipv4 / tcp_syncookies
# ---- Bruk Selective ACK som kan brukes til å indikere 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å kan vi begynne å legge til utvalgte tjenester i brannmurfilteret vårt. Den første slike ting
er et localhost-grensesnitt iptables -A INNGANG -i lo -j ACCEPT
# Vi ba brannmuren ta alle innkommende pakker med tcp-flagg INGEN og bare DROP dem.
iptables -A INNGANG -p tcp ! -m forbindelse --ctstate NY -j DROP
#Vi ber iptables om å legge til (-A) en regel for innkommende (INPUT) - SSH fungerer på port 50683
i stedet for 22.
iptables -A INNGANG -p tcp -m tcp --dport 50683 -j ACCEPT
iptables -A INNGANG -p tcp -m tcp -s spesifikk ip --dport 50683 -j ACCEPT
iptables -A INNGANG -p tcp -m tcp -s spesifikk ip --dport 50683 -j ACCEPT
iptables -A INNGANG -p tcp -m tcp -s spesifikk ip --dport 50683 -j ACCEPT
iptables -A INNGANG -p tcp --dport 50683 -m tilkobling --ctstate NY -m nylig - sett
--navn SSH -j ACCEPT
iptables -A INNGANG -p tcp --dport 50683 -m nylig --oppdatering - sekunder 60 --hitcount 4
--rttl --navn SSH -j LOG --logg-prefiks "SSH_brute_force"
iptables -A INNGANG -p tcp --port 50683 -m nylig --oppdatering - sekunder 60 --hitcount 4
--rttl --navn SSH -j DROP
iptables -A INNGANG -p tcp --dport 50683 -m tilkobling --ctstate NY -m nylig - sett
--navn SSH
iptables -A INNGANG -p tcp --dport 50683 -m forbindelseslinje --ctstate NY -j SSH_WHITELIST
iptables -A INNGANG -p tcp --dport 50683 -m tilkobling --ctstate NY -m nylig --oppdatering
--sekunder 60 --hitcount 4 --rttl --navn SSH -j ULOG --ulog-prefiks SSH_bru
iptables -A INNGANG -p tcp --dport 50683 -m konneksjon --ctstate NY -m nylig --oppdatering
--sekunder 60 --hitcount 4 --rttl --navn SSH -j DROP
# Nå tillater jeg imap, og smtp.
-EN INNGANG -p tcp --port 25 -j ACCEPT
# Tillater pop- og pop-tilkoblinger
-EN INNGANG -p tcp --dport 110 -j ACCEPT
-EN INNGANG -p tcp --dport 995 -j ACCEPT
############ IMAP & IMAPS #############
-EN INNGANG -p tcp --port 143 -j AKSEPT
-EN INNGANG -p tcp --dport 993 -j ACCEPT
########### MYSQL #######################
iptables -A INNGANG -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
########## R1soft CDP System ##################
iptables -A INNGANG -p tcp -m tcp -s spesifikk ip --dport 1167 -j ACCEPT
############### utgående ###################
iptables -JEG INNGANG -m konnektor --ctstate ESTABLISHED, RELATED -j ACCEPT
### Tillat pågående, blokkering av innkommende ikke definert ###
iptables -P OUTPUT ACCEPT
iptables -P INNGANG DROP
iptables -L -n
iptables-save | tee / etc / iptables.test.regler
iptables-gjenoppretting < /etc/iptables.test.rules
#service iptables starter på nytt