Izradite vlastiti vatrozid pomoću iptables pomoću ove jednostavne skripte

Neko sam vrijeme razmišljao o dvjema stvarima o iptablesima: većina onih koji traže ove vodiče početnici su, a drugo, mnogi već traže nešto prilično jednostavno i već razrađeno.

Ovaj je primjer za web poslužitelj, ali lako možete dodati više pravila i prilagoditi ga svojim potrebama.

Kad vidite da se "x" mijenja za vaše ip-ove


#!/bin/bash

# Čistimo iptables tablice -F iptables -X # Čistimo NAT iptables -t nat -F iptables -t nat -X # mangle table za stvari poput PPPoE, PPP i ATM iptables -t mangle -F iptables -t mangle -X # Pravila Mislim da je ovo najbolji način za početnike i # još uvijek nije loše, objasnit ću izlaz sve jer su to odlazne veze #, unosom odbacujemo sve, a nijedan poslužitelj ne smije prosljeđivati. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P NAPRIJED DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Zadrži stanje. Sve što je već povezano (uspostavljeno) ostaje ovako: iptables -A INPUT -m state --state USTANOVLJENO, POVEZANO -j PRIHVAĆAJ # Loop uređaj. iptables -A INPUT -i lo -j PRIHVAĆAM # http, https, ne specificiramo sučelje jer # želimo da to bude za sve iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh samo interno i iz ovog raspona ip-ovih iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # nadzor na primjer ako imaju zabbix ili neke druge snmp usluge iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j PRIHVATI # icmp, ping dobro, na vama je iptables -A INPUT -p icmp -s 192.168. xx / 24 - i $ intranet -j ACCEPT #mysql s postgres je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh ako želite poslati neku poštu #iptables -A OUTPUT -p tcp --dport 25 -j PRIHVATITE # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # IP poslužitelja - pravi wan ip vašeg servera LAN_RANGE = "192.168.xx / 21 "# LAN domet vaše mreže ili vašeg vlan # Ip-a koji nikada ne bi trebali ući u ekstranet,je koristiti malo logike ako imamo isključivo WAN sučelje, ono nikada ne bi trebalo unositi promet # LAN vrste kroz to sučelje 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 "# Zadana radnja - izvršava se kada se bilo koje pravilo podudara s ACTION =" DROP "# Paketi sa istim ip-om mog poslužitelja kroz wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paketi s LAN dometom za wan, stavim to ovako u slučaju da imate # bilo koju određenu mrežu, ali ovo je suvišno sa sljedećim # pravilom unutar petlja "za" iptables -A ULAZ -i $ ekstranet -i $ LAN_RANGE -j $ AKCIJA iptables -A IZLAZ -o $ ekstranet -i $ LAN_RANGE -j $ AKCIJA ## Sve SPOOF mreže nisu dopuštene wan-om za ip u $ SPOOF_IPS radi iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A IZLAZ -o $ extranet -s $ ip -j $ ACTION gotova

Kao i uvijek čekam vaše komentare, pratite ovaj blog, hvala


12 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   HO2Gi dijo

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

    1.    brodydalle dijo

      nema na čemu, drago mi je što smo vam od pomoći

  2.   Xavier dijo

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

    Biste li stigli s ovom konfiguracijom da Apache pokrene i zatvori ostale osim SSH-a?

    # Č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 raspona ip-ova

    iptables -A ULAZ -p tcp -s 192.168.xx / 24 -i $ intranet -port 7659 -j PRIHVATI

    Drugo pitanje: Je li 7659 port koji se koristi u SSH u ovom primjeru?

    I treće i posljednje: u koju datoteku treba spremiti ovu konfiguraciju?

    Puno vam hvala na tutorijalu, šteta je što ste takav newbie i ne možete ga dobro iskoristiti.

    1.    brodydalle dijo

      ovo je pravilo potrebno za http iz apachea
      iptables -A ULAZ -p tcp –port 80 -j PRIHVATI

      ali također trebate proglasiti zadane politike pada (to je u skripti)
      iptables -P ULAZNA KAP
      iptables -P IZLAZNI PRIHVAT
      iptables -P NAPRIJED DROP

      i to jer ako ste udaljeni, bacit će vas.
      iptables -A ULAZ -m stanje -država USTANOVLJENA, POVEZANA -j PRIHVAĆA

      ako je 7659 luka tog ssh-a u primjeru, prema zadanim je postavkama 22, iako preporučujem da promijenite u port "nije dobro poznat"
      čovječe ne znam, kako želite ... firewall.sh i stavite ga u rc.local (sh firewall.sh) tako da se automatski pokreće, ovisi o tome koji operativni sustav imate, postoje datoteke u koje možete izravno staviti pravila.

  3.   jge dijo

    Eii vrlo dobro, brate skriptu, analizirajući je ... Znate li kako bih mogao odbiti sve zahtjeve svojih korisnika na određeno web mjesto? ... ali ovo web mjesto ima puno poslužitelja….

    1.    brodydalle dijo

      Preporučujem druge mogućnosti:
      1) Možete stvoriti lažnu zonu u svom dns-u ...
      2) Možete postaviti proxy s acl
      grijeh embargo
      Za iptables možete ovo voljeti ... nije uvijek najbolja opcija (postoji više načina)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

      Reci mi je li uspjelo

  4.   Xavier dijo

    Hvala na odgovoru, sve se razbistrilo. Pitao sam za luku jer sam bio iznenađen korištenjem 7659, budući da privatne luke počinju na 49152, a mogao bi ometati neke usluge ili nešto slično.
    Opet, hvala na svemu, to je lijepo!

    Pozdrav.

  5.   tako svugdje dijo

    BrodyDalle, kako mogu stupiti u kontakt s tobom? Vrlo zanimljiv vaš scenarij.

  6.   Carlos dijo

    Je li prije zadnjeg retka "iptables -A IZLAZ -o $ ekstranet -s $ ip -j $ AKCIJA" kako biste spriječili da vaš vlastiti stroj lažira? Ili je moguće da neki otrovani paket uđe i može izaći s tim otrovanim izvorom i zato je pravilo također uključeno u IZLAZ?
    Puno hvala na pojašnjenju !!!

  7.   Fran dijo

    ovo je moja vlastita skripta iptables, vrlo je kompletna:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables za naslijeđene i za nft
    #
    # priključci vatrozida
    #############################
    #! / bin / bash
    #
    # očistite zaslon
    ################################ početak /etc/f-iptables/default.cfg |||||
    jasno
    # ostavite prazan redak
    odjek
    izvoz da = »» ne = »echo off»
    # varijabli koje možete promijeniti da biste omogućili pristup
    ####################### varijable za izmjenu s $ yes ili $ no
    izvoz hayexcepciones = »$ ne»
    # postoje iznimke: $ yes da omogući iznimne hostove i $ no da onemogući
    izvoz sijena = »$ ne»
    # hayping: $ da dopustiti pingove treće strane, a $ ne zabraniti
    izvoz haylogserver = »$ ne»
    # haylogeosserver: $ yes da mogu prijaviti tcp $ ne da ne mogu prijaviti tcp
    ######
    ####################### varijable za izmjenu dodavanjem "," ili s rasponima od ":"
    izuzeci za izvoz = »baldras.wesnoth.org»
    # iznimke dopuštaju jedan ili više hostova iz vatrozida ili nemaju vrijednost
    izvoz logserver = odbaci, ipp, dict, ssh
    # priključci tcp poslužitelja koji se bilježe kad paketi uđu
    izvozi redserver = 0/0
    # redserver: mreža za poslužiteljske priključke poželjna lokalna mreža ili nekoliko ips-a
    izvoz klijenta crveno = 0/0
    #clientnet: mreža za klijentske portove poželjnija od svih mreža
    izvoz servidortcp = odbaci, ipp, dict, 6771
    # servidortcp: navedeni priključci tcp poslužitelja
    izvoz serverudp = odbaci
    #udpserver: navedeni priključci udp poslužitelja
    izvoz clientudp = domena, bootpc, bootps, ntp, 20000: 45000
    #udp klijent: navedeni priključci udp klijenta
    izvoz clienttcp = domena, http, https, ipp, git, dict, 14999: 15002
    # tcp klijent: navedeni priključci tcp klijenta
    ############################### kraj /etc/f-iptables/default.cfg |||||
    ################################# kraj varijabli za izmjenu
    izvoz vatrozida = $ 1 varijable = $ 2
    if ["$ variables" = "$ NULL"]; zatim izvor /etc/f-iptables/default.cfg;
    else izvor / etc / f-iptables / $ 2; fi
    ################################ ili će prebrisati varijable datotekom .cfg
    #################################################### ############################################
    izvoz vatrozida = 1 USD varijable izvoza = 2 USD
    ############################################ automatske sistemske varijable
    if ["$ firewall" = "disconnected"]; zatim jeka OTKAZAN ZIDOV;
    izvoz activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; zatim eho KLIJENT ZATVORA;
    izvoz activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; zatim odjekni SERVER ZATVORA;
    izvoz activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klijent i poslužitelj"]; zatim odjeknite KLIJENT I SERVER ZATVORNOG ZIDA;
    izvoz aktiviraj poslužitelj = »»; izvoz activateclient = »»; izvoz mokri = »$ ne»;
    elif ["$ firewall" = "permissive"]; zatim odjeknite DOZVOLJENI ZATVOR;
    izvoz activateserver = »$ no» activateclient = »$ no» wet = »»;
    drugo
    $ check sudo echo iptables-legacy:
    $ provjeri sudo iptables-legacy -v -L ULAZ
    $ provjeri sudo iptables-legacy -v -L IZLAZ
    $ check sudo echo iptables-nft:
    $ provjeri sudo iptables-nft -v -L ULAZ
    $ provjeri sudo iptables-nft -v -L IZLAZ
    eho _____parametri____ $ 0 $ 1 $ 2
    echo "cast bez parametara je na popisu iptables."
    echo "Prvi parametar (omogućiti iptables): odspojen ili klijent ili poslužitelj ili klijent i poslužitelj ili dopušteno."
    echo "Drugi parametar: (nije obavezno): zadana.cfg datoteka odabire /etc/f-iptables/default.cfg"
    echo "Postavke varijable:" $ (ls / etc / f-iptables /)
    izlaz 0; fi
    ##################
    odjek
    echo Baci 0 $ isključeno ili klijent ili poslužitelj ili klijent i poslužitelj ili permisivne varijable ili bez upotrebe parametra za popis iptables.
    echo $ 0 datoteka sadrži neke promjenjive varijable.
    ################################## gore aktivirane varijable
    ##################################
    eho postavljanje varijabli iptables
    eho aktivirane varijable
    odjek
    ############################# pravila iptables
    jeka Postavljanje 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 IZLAZ -j PAD
    sudo / usr / sbin / ip6tables-legacy -A NAPRIJED -j PAD
    sudo / usr / sbin / iptables-legacy -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / 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 ULAZI -s $ iznimke -j PRIHVATITE> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j PRIHVAĆAM> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATITE> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A ULAZ -p udp -m multiport –sports $ clientudp -m stanje -država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A ULAZ -p tcp -m multiport –sports $ clienttcp -m stanje –država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j PRIHVATI> / 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 PRIHVATI> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A IZLAZ -d $ iznimke -j PRIHVAĆAM> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A IZLAZ -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A IZLAZ -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A IZLAZ -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j PRIHVATITE> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A IZLAZ -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A IZLAZ -p icmp –icmp-type echo-request -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-legacy -A IZLAZ -j PAD
    sudo / usr / sbin / iptables-legacy -NASPRED -J DROP
    echo iptables-legacy omogućen
    odjek
    jeka Postavljanje 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 ULAZ -j PAD
    sudo / usr / sbin / ip6tables-nft -A IZLAZ -j PAD
    sudo / usr / sbin / ip6tables-nft -A NAPRIJED -j PAD
    sudo / usr / sbin / iptables-nft -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A ULAZ -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A ULAZI -s $ iznimke -j PRIHVAĆAJ> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j PRIHVATITE> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A ULAZ -p udp -m multiport –sports $ clientudp -m stanje –država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A ULAZ -p tcp -m multiport –sports $ clienttcp -m stanje –država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A IZLAZ -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A IZLAZ -d $ iznimke -j PRIHVATI> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A IZLAZ -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A IZLAZ -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A IZLAZ -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j PRIHVATITE> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A IZLAZ -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A IZLAZ -p icmp –icmp-type echo-request -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-nft -A IZLAZ -j PAD
    sudo / usr / sbin / iptables-nft -APRIJED -J PAD
    echo iptables-nft omogućen
    odjek
    $ mokro 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 PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m stanje -država uspostavljena -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A IZLAZ -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -NASPRED -j DROP> / dev / null
    $ mokro sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A ULAZ -m stanje -država uspostavljena -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A IZLAZ -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -APRIJED -J DROP> / dev / null
    ############################
    odjek ste bacili 0 $ 1 $ 2 $
    # izlazi iz skripte
    izlaz 0

  8.   louis duran dijo

    Kako bih postavio pravilo da ga ovaj vatrozid koristi za moj pristupnik i da ima lignju unutar LAN-a ???