Stvorite svoj vlastiti vatrozid pomoću iptables koristeći ovu jednostavnu skriptu

Proveo sam neko vrijeme razmišljajući o dvije stvari u vezi sa ovom iptables stvari: većina onih koji traže ove tutorijale su početnici i drugo, mnogi već traže nešto prilično jednostavno i već razrađeno.

Ovaj primjer je za web server, ali lako možete dodati još pravila i prilagoditi ih svojim potrebama.

Kada vidite "x" promijenite svoje IP adrese


#!/bin/bash

#Čistimo iptables tablice -F iptables -X # Čistimo NAT iptables -t nat -F iptables -t nat -X # mangle tablicu za stvari kao što su PPPoE, PPP i ATM iptables -t mangle -F iptables -t mangle -X # Politika Mislim da je ovo najbolji način za početnike i # i dalje nije loš, objašnjavam sve izlazne veze jer su to # odlazne konekcije, unos odbacujemo sve, i nijedan server ne bi trebao raditi naprijed. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P PROSLJEDITI DROP #Intranet LAN intranet=eth0 #Extranet wan extranet=eth1 # Zadrži stanje. Sve što je već povezano (uspostavljeno) ostavlja se ovako: iptables -A INPUT -m stanje --state ESTABLISHED,RELATED -j ACCEPT # Loop uređaj. iptables -A INPUT -i lo -j PRIHVATI # http, https, ne specificiramo interfejs jer # želimo da bude za sve iptables -A INPUT -p tcp --dport 80 -j PRIHVATI iptables -A INPUT -p tcp -- dport 443 -j PRIHVATI # ssh samo interno i iz ovog opsega iptables IP-a -A INPUT -p tcp -s 192.168.xx/24 -i $intranet --dport 7659 -j PRIHVATI # nadgledanje na primjer ako imaju zabbix ili nešto drugo snmp servis iptables -A INPUT -p tcp -s 192.168.xx/24 -i $intranet --dport 10050 -j PRIHVATI # icmp, ping pa to je tvoja odluka iptables -A INPUT -p icmp -s 192.168. xx/24 - i $intranet -j PRIHVATI #mysql sa postgres je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $intranet -j PRIHVATI #sendmail bueeeh ako želite poslati neku poštu #iptables -A OUTPUT -p tcp --dport 25 -j PRIHVATI #Anti-SPOOFING 09. # SERVER_IP="07.xxx" # IP servera - pravi wan IP vašeg servera LAN_RANGE="2014.xx/ 190" # LAN opseg vaše mreže ili vaše vlan # IP adrese koje nikada ne bi trebale ulaziti preko ekstraneta, treba koristiti malo # logike ako imamo čisto WAN sučelje nikada ne bi trebalo ulaziti u promet # LAN tipa preko tog interfejsa SPOOF_IPS=" 192.168/21 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12" # Podrazumevana radnja - koja će se izvršiti kada uskladim bilo koje pravilo ACTION="DROP" # Paketi sa istim IP-om mog servera za wan iptables -A INPUT -i $extranet -s $SERVER_IP -j $ACTION #iptables -A OUTPUT -o $extranet -s $SERVER_IP -j $ACTION # Paketi sa LAN opsegom kroz wan, ja postavite to ovako u slučaju da imate # određenu mrežu, ali ovo je suvišno sa sljedećim # pravilom unutar "for" petlje iptables -A INPUT -i $extranet -s $LAN_RANGE -j $ACTION iptables -A IZLAZ -o $extranet -s $LAN_RANGE -j $ACTION ## Sve SPOOF mreže nisu dozvoljene od strane wan za ip u $SPOOF_IPS rade iptables -A INPUT -i $extranet -s $ip -j $ACTION iptables -A OUTPUT -o $extranet -s $ip -j $ AKCIJA obavljena

Kao i uvijek, radujem se vašim komentarima, ostanite sa nama na ovom blogu, hvala


12 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   HO2Gi rekao je

    Pomaže mi da nastavim da učim još malo, hvala kopirano.

    1.    brodydalle rekao je

      Nema na čemu, drago mi je da sam od pomoći.

  2.   Javier rekao je

    Jako mi je žao, ali imam dva pitanja (i jedno na poklon 😉):

    Da li bi ova konfiguracija bila dovoljna da pokrene Apache i zatvori sve ostalo osim SSH?

    #Čistimo stolove
    iptables -F
    iptables -X

    Čistimo NAT

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

    iptables -A ULAZ -p tcp –port 80 -j PRIHVATI

    ssh samo interno i iz ovog IP raspona

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

    Drugo pitanje: Da li se 7659 port koristi u SSH-u u ovom primjeru?

    I treće i posljednje: u koji fajl treba sačuvati ovu konfiguraciju?

    Hvala vam puno na tutorijalu, šteta što sam tako novajlija i ne mogu to iskoristiti.

    1.    brodydalle rekao je

      ovo je pravilo koje vam je potrebno za apache http
      iptables -A ULAZ -p tcp –port 80 -j PRIHVATI

      ali također morate deklarirati zadane politike ispuštanja (to je u skripti)
      iptables -P INPUT DROP
      iptables -P IZLAZ PRIHVAT
      iptables -P NAPRIJED DROP

      A to je zato što ako ste udaljeni, to će vas odbaciti.
      iptables -A ULAZ -m stanje –stanje UTVRĐENO, POVEZANO -j PRIHVATI

      Ako je 7659 port tog ssh-a u primjeru, po defaultu je 22, iako preporučujem promjenu na "nepoznati" port
      Čovječe ne znam šta hoćeš... firewall.sh i stavi u rc.local (sh firewall.sh) da radi automatski, zavisi koji operativni sistem imaš, ima fajlova gdje si može direktno postaviti pravila.

  3.   jge rekao je

    Hej brate, tvoja skripta je jako dobra, analiziraš je….znaš li kako bih mogao odbiti sve zahtjeve svojih korisnika prema određenoj web stranici?…. ali ova web stranica ima mnogo servera...

    1.    brodydalle rekao je

      Preporučujem druge opcije:
      1) Možete kreirati lažnu zonu u svom DNS-u…
      2) Možete postaviti proxy sa acl
      greh embargo
      Preko iptablesa to možete učiniti... nije uvijek najbolja opcija (ima više načina)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

      Reci mi da li radi

  4.   Javier rekao je

    Hvala na odgovoru, sve je razjašnjeno. Pitao sam za port jer sam se iznenadio kada sam koristio 7659, pošto privatni portovi počinju na 49152, i to bi moglo ometati uslugu ili nešto slično.
    Još jednom, hvala na svemu, tako je lijepo!

    Pozdrav.

  5.   Sic rekao je

    BrodyDalle kako mogu da vas kontaktiram? Tvoj scenario je veoma zanimljiv.

  6.   Carlos rekao je

    Poslednji red "iptables -A OUTPUT -o $extranet -s $ip -j $ACTION" je tu da spreči lažiranje vaše mašine? Ili je moguće da zatrovani paket ulazi i može izaći sa tim zatrovanim izvorom i zato je pravilo uključeno i u IZLAZ?
    Hvala puno na pojašnjenju!!!

  7.   fran rekao je

    Ovo je moja vlastita iptables skripta, vrlo je kompletna:

    # frenes.iptables.airoso
    # doc.iptables.airoso: iptables za naslijeđe i za nft
    #
    # portova zaštitnog zida
    ###########################
    #! / bin / bash
    #
    # obrišite ekran
    ################################# start /etc/f-iptables/default.cfg |||||
    jasno
    # ostavite prazan red
    odjek
    izvoz da=»» ne=»echo off»
    # varijable koje možete promijeniti da biste dozvolili pristup
    ##################### varijable koje treba modificirati sa $yes ili $no
    izvoz postoje izuzeci=»$ne»
    # postoje izuzeci: $yes za dozvoljavanje izuzetaka hosta i $no za onemogućavanje
    izvoz hayping=»$ne»
    # hayping: $yes za dozvoljavanje pingova trećim stranama i $no za odbijanje
    izvoz haylogserver=»$ne»
    # haylogeosserver: $yes da biste mogli prijaviti tcp $ne da ne možete prijaviti tcp
    ######
    ##################### varijable koje treba modificirati dodavanjem "," ili s rasponima ":"
    izvoz izuzetaka=»baldras.wesnoth.org»
    # izuzetaka dozvoljavaju jedan ili više hostova iz zaštitnog zida ili bez vrijednosti
    izvoz logserver=odbaci,ipp,dict,ssh
    # portovi tcp servera na koje se čuva evidencija kada paketi stignu
    izvoz redserver=0/0
    # redserver: mreža za serverske portove, po mogućnosti lokalnu mrežu ili nekoliko ips-ova
    izvoz clientnet=0/0
    # clientnet: mreža za klijentske portove, po mogućnosti sve mreže
    izvoz tcpserver=odbaci,ipp,dict,6771
    # tcpserver: navedeni portovi tcp servera
    izvoz udpserver=odbaci
    # udpserver: specificirani portovi udp servera
    izvoz clientudp=domena,bootpc,bootps,ntp,20000:45000
    #udpclient: specificirani portovi udp klijenta
    izvoz clienttcp=domain,http,https,ipp,git,dict,14999:15002
    # tcpclient: navedeni portovi tcp klijenta
    ################################ kraj /etc/f-iptables/default.cfg |||||
    ################################ kraj varijabli za izmjenu
    izvoz firewall=$1 varijable=$2
    if [ «$varijable» = «$NULL» ]; zatim izvor /etc/f-iptables/default.cfg;
    else izvor /etc/f-iptables/$2; fi
    ############################### ili ćete prepisati varijable sa .cfg datotekom
    ################################################### ##########################################
    izvoz firewall=$1 izvoz varijable=$2
    ########################################## automatske sistemske varijable
    if [ "$firewall" = "isključeno" ]; zatim echo FIREWALL OFF;
    export activateserver=»$no» activateclient=»$no» wet=»$ne»;
    elif [ «$firewall» = «klijent» ]; zatim echo FIREWALL CLIENT;
    export activateserver=»$no» activateclient=»» wet=»$no»;
    elif [ "$firewall" = "server" ]; zatim echo FIREWALL SERVER;
    export activateserver=»» activateclient=»$no» wet=»$no»;
    elif [ «$firewall» = «clientandserver» ]; zatim echo FIREWALL KLIJENT I SERVER;
    export activateserver=»»; export activateclient=»»;export wet=»$no»;
    elif [ "$firewall" = "dozvoljen" ]; zatim echo PERMISSIVE FIREWALL;
    export activateserver=»$no» activateclient=»$no» wet=»»;
    drugo
    $check sudo echo iptables-legacy:
    $check sudo iptables-legacy -v -L INPUT
    $check sudo iptables-legacy -v -L IZLAZ
    $check sudo echo iptables-nft:
    $check sudo iptables-nft -v -L INPUT
    $check sudo iptables-nft -v -L IZLAZ
    echo _____parametri____ $0 $1 $2
    echo "pokretanje bez parametara je listanje iptables."
    echo "Prvi parametar (omogući iptables): prekinut ili klijent ili server ili klijent i server ili dopušten."
    echo "Drugi parametar: (opciono): default.cfg datoteka bira /etc/f-iptables/default.cfg"
    echo «Varijabilne konfiguracije: » $(ls /etc/f-iptables/)
    izlaz 0; fi
    #################
    odjek
    echo Izbacuje $0 isključeno o klijent o server o klijent i server o dozvoljeno o varijable o bez korištenja parametra za popis iptables.
    echo Datoteka $0 sadrži neke varijable koje se mogu uređivati.
    ################################ prethodne varijable su aktivirane
    #################################
    echo podešavanje iptables varijable
    eho aktivirane varijable
    odjek
    ############################ iptables pravila
    echo Konfiguriranje iptables-legacy
    sudo /usr/sbin/iptables-legacy -t filter -F
    sudo /usr/sbin/iptables-legacy -t nat -F
    sudo /usr/sbin/iptables-legacy -t mangle -F
    sudo /usr/sbin/ip6tables-legacy -t filter -F
    sudo /usr/sbin/ip6tables-legacy -t nat -F
    sudo /usr/sbin/ip6tables-legacy -t mangle -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 NAPRIJED -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
    $postoje izuzeci sudo /usr/sbin/iptables-legacy -A INPUT -s $exceptions -j ACCEPT > /dev/null
    $activateserver sudo /usr/sbin/iptables-legacy -A INPUT -p udp -m multiport –dports $udpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
    $activateserver sudo /usr/sbin/iptables-legacy -A INPUT -p tcp -m multiport –dports $tcpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
    $activarcliente sudo /usr/sbin/iptables-legacy -A INPUT -p udp -m multiport –sport $clienteudp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j PRIHVATI > /dev/null
    $activarcliente sudo /usr/sbin/iptables-legacy -A INPUT -p tcp -m multiport –sport $clientetcp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j PRIHVATI > /dev/null
    $hayping sudo /usr/sbin/iptables-legacy -A INPUT -p icmp –icmp-tip echo-reply -j ACCEPT > /dev/null
    sudo /usr/sbin/iptables-legacy -A INPUT -j DROP > /dev/null
    sudo /usr/sbin/iptables-legacy -A IZLAZ -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT > /dev/null
    $postoje izuzeci sudo /usr/sbin/iptables-legacy -A OUTPUT -d $exceptions -j ACCEPT > /dev/null
    $activateserver sudo /usr/sbin/iptables-legacy -A OUTPUT -p udp -m multiport –sports $udpserver -s $redserver -d $redserver -j PRIHVATI > /dev/null
    $activateserver sudo /usr/sbin/iptables-legacy -A OUTPUT -p tcp -m multiport –sport $tcpserver -s $redserver -d $redserver -j PRIHVATI > /dev/null
    $activateclient sudo /usr/sbin/iptables-legacy -A IZLAZ -p udp -m multiport –dports $clientudp -s $redclient -d $redclient -j ACCEPT > /dev/null
    $activateclient sudo /usr/sbin/iptables-legacy -A IZLAZ -p tcp -m multiport –dports $clientetcp -s $redcliente -d $redcliente -j ACCEPT > /dev/null
    $hayping sudo /usr/sbin/iptables-legacy -A IZLAZ -p icmp –icmp-tip echo-request -j ACCEPT > /dev/null
    sudo /usr/sbin/iptables-legacy -A OUTPUT -j DROP
    sudo /usr/sbin/iptables-legacy -A NAPRIJED -j DROP
    echo iptables-legacy omogućen
    odjek
    echo Konfiguriranje iptables-nft
    sudo /usr/sbin/iptables-nft -t filter -F
    sudo /usr/sbin/iptables-nft -t nat -F
    sudo /usr/sbin/iptables-nft -t mangle -F
    sudo /usr/sbin/ip6tables-nft -t filter -F
    sudo /usr/sbin/ip6tables-nft -t nat -F
    sudo /usr/sbin/ip6tables-nft -t mangle -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
    $postoje izuzeci sudo /usr/sbin/iptables-nft -A INPUT -s $exceptions -j ACCEPT > /dev/null
    $activateserver sudo /usr/sbin/iptables-nft -A INPUT -p udp -m multiport –dports $udpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
    $activateserver sudo /usr/sbin/iptables-nft -A INPUT -p tcp -m multiport –dports $tcpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
    $activarcliente sudo /usr/sbin/iptables-nft -A INPUT -p udp -m multiport –sport $clienteudp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j ACCEPT > /dev/null
    $activarcliente sudo /usr/sbin/iptables-nft -A INPUT -p tcp -m multiport –sport $clientetcp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j PRIHVATI > /dev/null
    $hayping sudo /usr/sbin/iptables-nft -A INPUT -p icmp –icmp-tip echo-reply -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
    $postoje izuzeci sudo /usr/sbin/iptables-nft -A OUTPUT -d $exceptions -j ACCEPT > /dev/null
    $activateserver sudo /usr/sbin/iptables-nft -A OUTPUT -p udp -m multiport –sports $udpserver -s $redserver -d $redserver -j PRIHVATI > /dev/null
    $activateserver sudo /usr/sbin/iptables-nft -A IZLAZ -p tcp -m multiport –sport $tcpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
    $activateclient sudo /usr/sbin/iptables-nft -A IZLAZ -p udp -m multiport –dports $clientudp -s $redclient -d $redclient -j ACCEPT > /dev/null
    $activateclient sudo /usr/sbin/iptables-nft -A IZLAZ -p tcp -m multiport –dports $clientetcp -s $redclient -d $redclient -j ACCEPT > /dev/null
    $hayping sudo /usr/sbin/iptables-nft -A IZLAZ -p icmp –icmp-tip echo-request -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 omogućen
    odjek
    $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 stanje –uspostavljeno stanje -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 NAPRIJED -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 stanje – stanje uspostavljeno -j PRIHVATI > /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
    ##########################
    eho ste bacili $0 $1 $2
    # izađite iz skripte
    izlaz 0

  8.   Luis Duran rekao je

    Kako da postavim pravilo ako koristim ovaj firewall za svoj gateway i imam squid unutar LAN-a???