Opret din egen firewall med iptables ved hjælp af dette enkle script

Jeg brugte lidt tid på at tænke på to ting om denne iptables: de fleste af dem, der leder efter disse tutorials, er begyndere, og for det andet er mange allerede på udkig efter noget ret simpelt og allerede uddybet.

Dette eksempel gælder for en webserver, men du kan nemt tilføje flere regler og tilpasse det til dine behov.

Når du ser "x" skifte til dine ip'er


#!/bin/bash

# Vi renser iptables-tabeller -F iptables -X # Vi renser NAT iptables -t nat -F iptables -t nat -X # mangelbord til ting som PPPoE, PPP og ATM iptables -t mangle -F iptables -t mangle -X # Politikker Jeg synes, det er den bedste måde for begyndere og # stadig ikke dårlig, jeg forklarer output (output) alt, fordi de er udgående forbindelser #, input, vi kasserer 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 # Hold tilstand. Alt, hvad der allerede er tilsluttet (etableret), efterlades således: iptables -A INPUT -m-tilstand --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, vi specificerer ikke grænsefladen, fordi # vi vil have, 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 kun internt og fra dette interval af ip's iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # overvågning for eksempel hvis de har zabbix eller nogle andre snmp-tjeneste-iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping godt, det er op til dig iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -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 noget 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 på din server LAN_RANGE = "192.168.xx / 21 "# LAN-rækkevidde for dit netværk eller dine vlan # Ip'er, der aldrig skal komme ind i ekstranettet,er at bruge lidt # logik, hvis vi har en rent WAN-grænseflade, bør den aldrig komme ind i # LAN-type trafik gennem den grænseflade 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 / XNUMX "# Standardhandling - skal udføres, når en regel matcher ACTION =" DROP "# Pakker med den samme ip på min server gennem wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Pakker med LAN-området til wan, jeg sætter det sådan, hvis du har # et bestemt netværk, men dette er overflødigt med følgende # regel indeni sløjfen "for" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Alle SPOOF-netværk er ikke tilladt af wan til ip i $ SPOOF_IPS gør iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION udført

Som altid afventer jeg dine kommentarer, hold øje med denne blog, tak


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   HO2Gi sagde han

    Det hjælper mig med at fortsætte med at lære lidt mere tak kopieret.

    1.    brodydalle sagde han

      du er velkommen, glad for at være til hjælp

  2.   Xavier sagde han

    Jeg er virkelig ked af det, men jeg har to spørgsmål (og et i gave 😉):

    Vil du ankomme med denne konfiguration for at få Apache til at køre og lukke resten undtagen SSH?

    #Vi renser borde
    iptables-F
    iptables-X

    Vi renser NAT

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

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

    ssh kun internt og fra dette udvalg af ip'er

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

    Andet spørgsmål: Er 7659 porten brugt i SSH i dette eksempel?

    Og tredje og sidste: i hvilken fil skal denne konfiguration gemmes?

    Mange tak for vejledningen, det er en skam, at du er sådan en nybegynder og ikke kan udnytte den godt.

    1.    brodydalle sagde han

      dette er den regel, du har brug for til http fra apache
      iptables -A INPUT -p tcp –port 80 -j ACCEPT

      men du skal også erklære drop-standardpolitikker (det er i scriptet)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P FREM DROP

      og dette fordi hvis du er fjern, vil det kaste dig væk.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT

      hvis 7659 er porten for den ssh i eksemplet, er den som standard 22, selvom jeg anbefaler at skifte til en port "ikke kendt"
      mand jeg ved ikke, som du vil ... firewall.sh og du lægger det i rc.local (sh firewall.sh), så det kører automatisk, det afhænger af hvilket operativsystem du har, der er filer, hvor du kan sætte reglerne direkte.

  3.   jge sagde han

    Eii meget godt bro dit script, analyserer det .... Ved du, hvordan jeg kunne nægte alle mine brugeres anmodninger til et bestemt websted?…. men dette websted har mange servere….

    1.    brodydalle sagde han

      Jeg anbefaler andre muligheder:
      1) Du kan oprette en falsk zone i din dns ...
      2) Du kan placere en proxy med acl
      syndembargo
      For iptables kan du lide dette ... det er ikke altid den bedste mulighed (der er flere måder)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

      Fortæl mig, om det fungerede

  4.   Xavier sagde han

    Tak for svaret, alt ryddet op. Jeg spurgte om havnen, fordi jeg var overrasket over at bruge 7659, da de private havne startede ved 49152, og det kunne forstyrre nogle tjenester eller noget.
    Igen tak for alt, det er rart!

    Greetings.

  5.   sic sagde han

    BrodyDalle, hvordan kan jeg komme i kontakt med dig? Meget interessant dit script.

    1.    brodydalle sagde han
  6.   Carlos sagde han

    Er den sidste sidste linje "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" for at forhindre din egen maskine i at falskere? Eller er det muligt, at en eller anden forgiftet pakke kommer ind og kan rejse med den forgiftede kilde, og det er derfor, at reglen også er inkluderet i OUTPUT?
    Mange tak for afklaringen !!!

  7.   fran sagde han

    dette er mit eget iptables-script, det er meget komplet:

    # franes.iptables.luftige
    # doc.iptables.airoso: iptables til arv og til nft
    #
    # firewall-porte
    ##################################
    #! / Bin / bash
    #
    # ryd skærmen
    ################################## start af /etc/f-iptables/default.cfg |||||
    klar
    # efterlad en tom linje
    ekko
    eksport ja = »» nej = »ekko fra»
    # de variabler, du kan ændre for at give adgang
    ####################### variabler til at ændre med $ ja eller $ nej
    eksport hayexcepciones = »$ no»
    # der er undtagelser: $ ja for at tillade ekstraordinære værter og $ nej til at deaktivere
    eksport hayping = »$ no»
    # hayping: $ ja for at tillade tredjeparts ping og $ nej at benægte
    eksport haylogserver = »$ no»
    # haylogeosserver: $ ja for at kunne logge tcp $ nej for ikke at kunne logge tcp
    ######
    ####################### variabler til ændring af tilføjelse "," eller med intervaller på ":"
    eksportundtagelser = »baldras.wesnoth.org»
    # undtagelser tillader enkelt- eller flere værter fra firewall eller ingen værdi
    eksport logserver = kassér, ipp, dict, ssh
    # tcp serverporte, der er logget, når pakker kommer ind
    eksport redserver = 0/0
    # redserver: netværket til serverporte, der foretrækkes lokalt netværk eller flere ips
    eksport klient rød = 0/0
    #clientnet: netværket til klientporte, der foretrækkes frem for alle netværk
    eksport servidortcp = kassér, ipp, dict, 6771
    # servidortcp: de angivne TCP-serverporte
    eksport serverudp = kassér
    #udpserver: de angivne udp-serverporte
    eksport clientudp = domæne, bootpc, bootps, ntp, 20000: 45000
    #udp-klient: de angivne udp-klientporte
    eksporter klienttcp = domæne, http, https, ipp, git, dict, 14999: 15002
    # tcp-klient: de angivne tcp-klientporte
    ################################ slutning af /etc/f-iptables/default.cfg |||||
    ################################## slutning af variabler, der skal ændres
    eksport firewall = $ 1 variabler = $ 2
    hvis ["$ variables" = "$ NULL"]; derefter kilde /etc/f-iptables/default.cfg;
    ellers kilde / etc / f-iptables / $ 2; fi
    ######################################## eller vil overskrive variablerne med en .cfg-fil
    ################################################################# #####################################################
    eksport firewall = $ 1 eksportvariabler = $ 2
    ################################################ automatisk automatisk systemvariabel
    hvis ["$ firewall" = "afbrudt"]; derefter ekko FIREWALL FRAKOBLET;
    eksport activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient"]; derefter ekko FIREWALL CLIENT;
    eksport activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; derefter ekko FIREWALL SERVER;
    eksport activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient og server"]; derefter ekko FIREWALL CLIENT AND SERVER;
    eksport aktiver server = »»; eksport aktivateclient = »»; eksport våd = »$ no»;
    elif ["$ firewall" = "tilladelig"]; derefter ekko PERMISSIVE FIREWALL;
    eksport activateserver = »$ no» activateclient = »$ no» wet = »»;
    andet
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L OUTPUT
    ekko _____parametre____ $ 0 $ 1 $ 2
    ekko "cast uden parametre er at liste iptables."
    ekko "Den første parameter (aktiver iptables): afbrudt eller klient eller server eller klient og server eller tilladelig."
    ekko "Den anden parameter: (valgfri): standard.cfg-filen vælger /etc/f-iptables/default.cfg"
    ekko "Variabelindstillinger:" $ (ls / etc / f-iptables /)
    afkørsel 0; fi
    ####################
    ekko
    ekko Kast $ 0 afbrudt eller klient eller server eller klient og server eller tilladelig eller variabler eller uden brug af parameter til at liste iptables.
    echo $ 0-filen indeholder nogle redigerbare variabler indeni.
    #################################### ovenstående variabler aktiveret
    #########################################
    ekko indstilling af iptables variabler
    ekko-aktiverede variabler
    ekko
    ################################ reglerne til iptables
    ekko Indstilling af 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-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -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 LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ undtagelser -j ACCEPT> / dev / null
    $ aktiver sudo server / 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-legacy -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-legacy -A INPUT -p icmp –icmp-type echo-svar -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 $ undtagelser -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-anmodning -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    ekko iptables-arv aktiveret
    ekko
    ekko Indstilling af 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 OUTPUT -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 LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ undtagelser -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 INPUT -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
    $ hayundtagelser sudo / usr / sbin / iptables-nft -A OUTPUT -d $ undtagelser -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktiver server sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type ekko-anmodning -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft aktiveret
    ekko
    $ wet 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
    $ wet 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
    # afslutter scriptet
    Afslut 0

  8.   louis duran sagde han

    Hvordan ville jeg indstille en regel, hvis denne firewall brugte den til min gateway og havde en blæksprutte inde i LAN ???