Lag din egen brannmur med iptables ved hjelp av dette enkle skriptet

Jeg tenkte på to ting om iptables en stund: de fleste av dem som leter etter disse opplæringene, er nybegynnere, og for det andre er mange allerede ute etter noe ganske enkelt og allerede utdypet.

Dette eksemplet gjelder en webserver, men du kan enkelt legge til flere regler og tilpasse det til dine behov.

Når du ser "x" endre for IP-ene


#!/bin/bash

# Vi renser iptables-tabeller -F iptables -X # Vi renser NAT iptables -t nat -F iptables -t nat -X # mangelbord for ting som PPPoE, PPP og ATM iptables -t mangle -F iptables -t mangle -X # Politikk Jeg tror dette er den beste måten for nybegynnere og # fortsatt ikke dårlig, jeg skal forklare output (output) alt fordi de er utgående tilkoblinger #, input vi forkaster alt, og ingen server skal videresende. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 # Extranet wan extranet = eth1 # Keep state. Alt som allerede er tilkoblet (etablert) blir liggende slik: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, vi spesifiserer ikke grensesnittet fordi # vi vil at det skal være alle iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh bare internt og fra dette spekteret av ip's iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranett --dport 7659 -j ACCEPT # overvåking for eksempel hvis de har zabbix eller noe annet snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranett --dport 10050 -j ACCEPT # icmp, ping vel det er opp til deg iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranett -j ACCEPT #mysql med postgres er port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh hvis du vil sende litt mail #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - den virkelige wan ip til serveren din LAN_RANGE = "192.168.xx / 21" # LAN-rekkevidde av nettverket ditt eller dine vlan # Ip-er som aldri skal komme inn i ekstranettet,er å bruke litt # logikk hvis vi har et rent WAN-grensesnitt, bør det aldri gå inn i # LAN-type trafikk gjennom det grensesnittet SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 / 16 "# Standardhandling - skal utføres når en hvilken som helst regel samsvarer med ACTION =" DROP "# Pakker med samme IP på serveren min gjennom wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A UTGANG -o $ ekstranett -s $ SERVER_IP -j $ HANDLING # Pakker med LAN Range for wan, jeg setter det slik i tilfelle du har # noe bestemt nettverk, men dette er overflødig med følgende # regel inne i sløyfen " for "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Alle SPOOF-nettverk er ikke tillatt av wan for ip i $ SPOOF_IPS gjør iptables -A INNGANG -i $ ekstranett -s $ ip -j $ HANDLING iptables -A UTGANG -o $ ekstranett -s $ ip -j $ HANDLING utført

Som alltid venter jeg på kommentarene dine, følg med i denne bloggen, takk


12 kommentarer, legg igjen dine

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   HO2Gi sa

    Det hjelper meg å fortsette å lære litt mer takk kopiert.

    1.    brodydalle sa

      du er velkommen, glad for å være til hjelp

  2.   Xavier sa

    Beklager, men jeg har to spørsmål (og ett i gave 😉):

    Vil du komme med denne konfigurasjonen for å ha Apache i gang og lukke resten bortsett fra SSH?

    #Vi renser bord
    iptables-F
    iptables-X

    Vi rengjør NAT

    iptables -t nat -F
    iptables -t nat -X

    iptables -A INNGANG -p tcp –port 80 -j ACCEPT

    ssh bare internt og fra dette spekteret av ip-er

    iptables -A INNGANG -p tcp -s 192.168.xx / 24 -i $ intranett –port 7659 -j ACCEPT

    Andre spørsmål: Er 7659 porten brukt i SSH i dette eksemplet?

    Og tredje og siste: i hvilken fil skal denne konfigurasjonen lagres?

    Tusen takk for opplæringen, det er synd at du er en slik nybegynner og ikke kan dra nytte av den godt.

    1.    brodydalle sa

      dette er regelen du trenger for http fra apache
      iptables -A INNGANG -p tcp –port 80 -j ACCEPT

      men du må også erklære at standard standardpolicyer (det er i skriptet)
      iptables -P INNGANG DROP
      iptables -P OUTPUT ACCEPT
      iptables -P FORDARD DROP

      og dette fordi hvis du er fjern, vil det kaste deg bort.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT

      hvis 7659 er porten til ssh i eksemplet, er den som standard 22, selv om jeg anbefaler at du bytter til en port "ikke kjent"
      Mann, jeg vet ikke, slik du vil ... firewall.sh og du plasserer den i rc.local (sh firewall.sh) slik at den kjører automatisk, det kommer an på hvilket operativsystem du har, det er filer der du kan plassere reglene direkte.

  3.   jge sa

    Eii veldig bra skriptet ditt, analyserer det .... Vet du hvordan jeg kunne nekte alle brukernes forespørsler til et bestemt nettsted?…. men dette nettstedet har mange servere….

    1.    brodydalle sa

      Jeg anbefaler andre alternativer:
      1) Du kan opprette en falsk sone i dns ...
      2) Du kan plassere en fullmektig med acl
      syndembargo
      For iptables kan du like dette ... det er ikke alltid det beste alternativet (det er flere måter)
      iptables -A INPUT -s blogg.desdelinux.ne -j DROPPE
      iptables -A OUTPUT -d blogg.desdelinux.net -j DROPPE

      Fortell meg om det fungerte

  4.   Xavier sa

    Takk for svaret, alt ryddet opp. Jeg spurte om porten fordi jeg var overrasket over å bruke 7659, siden de private havnene startet i 49152, og det kan forstyrre noen tjenester eller noe.
    Igjen, takk for alt, det er hyggelig!

    Hilsener.

  5.   sic sa

    BrodyDalle, hvordan kan jeg komme i kontakt med deg? Veldig interessant manuset ditt.

  6.   Carlos sa

    Før siste linje "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" er det for å forhindre at din egen maskin spoofing? Eller er det mulig at noen forgiftede pakker kommer inn og kan gå med den forgiftede kilden, og det er derfor regelen også er inkludert i UTGANG?
    Tusen takk for avklaringen !!!

  7.   fran sa

    dette er mitt eget iptables-skript, det er veldig komplett:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables for arv og for nft
    #
    # brannmurporter
    #################################
    #! / Bin / bash
    #
    # tøm skjermen
    ################################# start av /etc/f-iptables/default.cfg |||||
    fjerne
    # legg igjen en tom linje
    savner
    eksport ja = »» nei = »ekko av»
    # variablene du kan endre for å gi tilgang
    ###################### variabler for å endre med $ ja eller $ nei
    eksport hayexcepciones = »$ no»
    # det er unntak: $ ja for å tillate eksepsjonelle verter og $ nei for å deaktivere
    eksport hayping = »$ no»
    # hayping: $ ja for å tillate tredjeparts ping og $ nei å nekte
    eksport haylogserver = »$ no»
    # haylogeosserver: $ ja for å kunne logge tcp $ nei for å ikke kunne logge tcp
    ######
    ####################### variabler å endre ved å legge til "," eller med områder av ":"
    eksport unntak = »baldras.wesnoth.org»
    # unntak tillater enkelt- eller flere verter fra brannmur eller ingen verdi
    eksporter loggserver = kast, ipp, dict, ssh
    # tcp serverporter som er logget når pakker kommer inn
    eksport redserver = 0/0
    # redserver: nettverket for serverporter foretrukket lokalt nettverk eller flere ips
    eksportklient rød = 0/0
    # clientnet: nettverket for klientporter som er bedre enn alle nettverk
    eksport servidortcp = kast, ipp, dict, 6771
    # servidortcp: de angitte tcp-serverportene
    eksport serverudp = kast
    #udpserver: de angitte udp-serverportene
    eksporter klientudp = domene, bootpc, bootps, ntp, 20000: 45000
    #udp-klient: de spesifiserte udp-klientportene
    eksporter klienttcp = domene, http, https, ipp, git, dict, 14999: 15002
    # tcp client: de angitte tcp-klientportene
    ############################### slutten av /etc/f-iptables/default.cfg |||||
    ################################### slutten av variablene for å endre
    eksporter brannmur = $ 1 variabler = $ 2
    hvis ["$ variables" = "$ NULL"]; deretter kilde /etc/f-iptables/default.cfg;
    ellers kilde / etc / f-iptables / $ 2; fi
    ################################### eller vil overskrive variablene med en .cfg-fil
    ################################################################## ####################################################
    eksport brannmur = $ 1 eksportvariabler = $ 2
    ################################################## automatisk automatisk systemvariabel
    hvis ["$ firewall" = "frakoblet"]; deretter ekko FIREWALL KOBLET TIL;
    eksport activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; deretter ekko FIREWALL CLIENT;
    eksport activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; deretter ekko FIREWALL SERVER;
    eksport activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient og server"]; så ekko FIREWALL CLIENT AND SERVER;
    eksport aktiver server = »»; eksportaktivatklient = »»; eksport våt = »$ nei»;
    elif ["$ firewall" = "tillatelig"]; deretter ekko PERMISSIVE FIREWALL;
    eksport activateserver = »$ no» activateclient = »$ no» wet = »»;
    ellers
    $ sjekk sudo echo iptables-arv:
    $ sjekk sudo iptables-legacy -v -L INNGANG
    $ sjekk sudo iptables-legacy -v -L OUTPUT
    $ sjekk sudo echo iptables-nft:
    $ sjekk sudo iptables-nft -v -L INNGANG
    $ sjekk sudo iptables-nft -v -L UTGANG
    ekko _____parameters____ $ 0 $ 1 $ 2
    ekko "cast uten parametere er å liste iptables."
    ekko "Den første parameteren (aktiver iptables): frakoblet eller klient eller server eller klient og server eller tillatende."
    ekko "Den andre parameteren: (valgfritt): standard.cfg-filen velger /etc/f-iptables/default.cfg"
    ekko "Variable settings:" $ (ls / etc / f-iptables /)
    avkjørsel 0; fi
    ###################
    savner
    ekko Kaster $ 0 frakoblet eller klient eller server eller klient og server eller tillatende eller variabler eller uten å bruke parameter for å liste iptables.
    echo $ 0-filen inneholder noen redigerbare variabler inne.
    ###################################### ovenstående variabler aktivert
    #############################################
    ekkoinnstilling av iptables-variablene
    ekkoaktiverte variabler
    savner
    ############################### Reglene for iptables
    ekko Innstilling av iptables-arv
    sudo / usr / sbin / iptables-arv -t filter -F
    sudo / usr / sbin / iptables-arv -t nat -F
    sudo / usr / sbin / iptables-arv -t mangel -F
    sudo / usr / sbin / ip6tables-arv -t filter -F
    sudo / usr / sbin / ip6tables-arv -t nat -F
    sudo / usr / sbin / ip6tables-arv -t mangel -F
    sudo / usr / sbin / ip6tables-arv -A INNGANG -j DROP
    sudo / usr / sbin / ip6tables-arv -A UTGANG -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -dports $ logserver -j LOGG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ unntak -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -sports $ clientudp -m state –state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-arv -A INNGANG -p tcp -m multiport –sporter $ clienttcp -m tilstand –stat etablert -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ unntak -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport -sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktiver klient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type ekko-forespørsel -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-arv -A UTGANG -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-arv aktivert
    savner
    ekko Innstilling av iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangel -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangel -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A UTGANG -j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOGG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ unntak -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-nft -A INNGANG -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state –state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state –state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-svar -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ unntak -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-nft -A UTGANG -p udp -m multiport - sport $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-nft -A UTGANG -p tcp -m multiport - sport $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A UTGANG -p udp -m multiport –port $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A UTGANG -p tcp -m multiport –port $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type ekko-forespørsel -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A UTGANG -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft aktivert
    savner
    $ våt sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state –state established -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ våt sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m state –state established -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    ################################
    ekko du har kastet $ 0 $ 1 $ 2
    # går ut av skriptet
    avkjørsel 0

  8.   louis duran sa

    Hvordan ville jeg satt en regel hvis denne brannmuren brukte den til gatewayen min og hadde en blekksprut i LAN ???