Buat firewall anda sendiri dengan iptables menggunakan skrip ringkas ini

Saya meluangkan masa untuk memikirkan dua perkara mengenai iptables ini: kebanyakan mereka yang mencari tutorial ini adalah pemula dan kedua, banyak yang sudah mencari sesuatu yang cukup sederhana dan sudah dihuraikan.

Contoh ini adalah untuk pelayan web, tetapi anda boleh menambahkan lebih banyak peraturan dengan mudah dan menyesuaikannya dengan keperluan anda.

Apabila anda melihat "x" ubah untuk ip anda


#!/bin/bash

#Kami membersihkan jadual iptables -F iptables -X # Kami membersihkan NAT iptables -t nat -F iptables -t nat -X # mangle table untuk perkara seperti PPPoE, PPP, dan ATM iptables -t mangle -F iptables -t mangle -X # Polies Saya fikir ini adalah cara terbaik untuk pemula dan # masih tidak buruk, saya akan menerangkan output kerana semuanya adalah sambungan keluar #, input kami membuang semuanya, dan tidak ada pelayan yang harus meneruskan. iptables -P INPUT DROP iptables -P OUTPUT MENERIMA iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Keep state. Segala-galanya yang telah disambungkan (dibentuk) dibiarkan seperti ini: iptables -SATU INPUT -m -state DITETAPKAN, BERKAITAN -j MENERIMA # Peranti gelung. iptables -A INPUT -i lo -j MENERIMA # http, https, kami tidak menentukan antara muka kerana # kami mahu ia untuk semua iptables -A INPUT -p tcp --dport 80 -j MENERIMA iptables -A INPUT -p tcp - dport 443 -j MENERIMA # ssh hanya secara dalaman dan dari rangkaian iptables ip ini -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j MENERIMA # pemantauan misalnya jika mereka mempunyai zabbix atau yang lain perkhidmatan snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping baik terpulang kepada anda iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j MENERIMA #mysql dengan postgres adalah port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j MENERIMA #sendmail bueeeh jika anda ingin menghantar beberapa surat #iptables -A OUTPUT -p tcp --dport 25 -j MENERIMA # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # IP pelayan - ip sebenar pelayan anda LAN_RANGE = "192.168.xx / 21" # rangkaian LAN rangkaian atau vlan # Ip anda yang tidak boleh memasuki extranet,adalah menggunakan sedikit logik # jika kita mempunyai antara muka WAN semata-mata ia tidak boleh memasuki # jenis lalu lintas LAN melalui antara muka itu 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 "# Tindakan lalai - untuk dilaksanakan apabila mana-mana peraturan sepadan dengan TINDAKAN =" DROP "# Paket dengan ip pelayan saya yang sama melalui wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paket dengan Julat LAN untuk wan, saya meletakkannya seperti ini sekiranya anda mempunyai # rangkaian tertentu, tetapi ini berlebihan dengan # peraturan berikut di dalam gelung " untuk "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Semua Rangkaian SPOOF tidak dibenarkan oleh wan untuk ip dalam $ SPOOF_IPS lakukan iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ TINDAKAN selesai

Seperti biasa saya menunggu komen anda, nantikan blog ini, Terima kasih


Kandungan artikel mematuhi prinsip kami etika editorial. Untuk melaporkan ralat, klik di sini.

12 komen, tinggalkan komen anda

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   HO2Gi kata

    Ini membantu saya untuk terus belajar sedikit lagi terima kasih disalin.

    1.    BrodyDalle kata

      anda dialu-alukan, gembira dapat membantu

  2.   Xavier kata

    Saya benar-benar minta maaf, tetapi saya mempunyai dua soalan (dan satu sebagai hadiah 😉):

    Adakah anda akan tiba dengan konfigurasi ini untuk menjalankan Apache dan menutup yang lain kecuali SSH?

    #Kami membersihkan meja
    iptables -F
    iptables -X

    Kami membersihkan NAT

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

    iptables -A INPUT -p tcp –dport 80 -j TERIMA

    ssh hanya secara dalaman dan dari rangkaian ip ini

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

    Soalan kedua: Adakah 7659 port yang digunakan dalam SSH dalam contoh ini?

    Dan ketiga dan terakhir: dalam fail mana konfigurasi ini harus disimpan?

    Terima kasih banyak untuk tutorial ini, memalukan bahawa anda seorang pemula dan tidak dapat memanfaatkannya dengan baik.

    1.    BrodyDalle kata

      ini adalah peraturan yang anda perlukan untuk http dari apache
      iptables -A INPUT -p tcp –dport 80 -j TERIMA

      tetapi anda juga perlu menyatakan dasar penurunan lalai (ada dalam skrip)
      iptables -P INPUT DROP
      iptables-P OUTPUT ACCEPT
      iptables -P KEHADIRAN HUJUNG

      dan ini kerana jika anda jauh, ia akan membuang anda.
      iptables -A INPUT -m state -state DILAYAN, BERKAITAN -j MENERIMA

      jika 7659 adalah port ssh dalam contoh, secara lalai ia adalah 22, walaupun saya mengesyorkan anda menukar ke port "tidak terkenal"
      Man, saya tidak tahu, seperti yang anda mahukan ... firewall.sh dan anda meletakkannya di rc.local (sh firewall.sh) supaya ia berjalan secara automatik, ia bergantung pada sistem operasi yang anda miliki, ada fail di mana anda boleh meletakkan peraturan secara langsung.

  3.   Jge kata

    Hei, skrip anda sangat bagus, menganalisisnya .... Adakah anda tahu bagaimana saya boleh menolak semua permintaan pengguna saya ke laman web tertentu?…. tetapi laman web ini mempunyai banyak pelayan….

    1.    BrodyDalle kata

      Saya mengesyorkan pilihan lain:
      1) Anda boleh membuat zon palsu di dns anda ...
      2) Anda boleh meletakkan proksi dengan acl
      embargo dosa
      Untuk iptables, anda boleh menyukai ini ... bukan selalu pilihan terbaik (ada lebih banyak cara)
      iptables -A INPUT -s blog.desdelinux.ne -j HENTIKAN
      iptables -A OUTPUT -d blog.fromlinux.net -j HENTI

      Beritahu saya jika ia berjaya

  4.   Xavier kata

    Terima kasih atas jawapannya, semuanya selesai. Saya bertanya mengenai pelabuhan itu kerana saya terkejut menggunakan 7659, kerana pelabuhan persendirian bermula pada 49152, dan ia boleh mengganggu perkhidmatan atau sesuatu.
    Sekali lagi, terima kasih untuk segalanya, itu bagus!

    Greetings.

  5.   sic kata

    BrodyDalle, bagaimana saya boleh menghubungi anda? Sangat menarik skrip anda.

  6.   Carlos kata

    Baris sebelumnya "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" adalah untuk mengelakkan mesin anda sendiri melakukan spoofing? Atau mungkinkah sebilangan paket beracun masuk dan dapat keluar dengan sumber beracun itu dan itulah sebabnya peraturan tersebut juga disertakan dengan OUTPUT?
    Terima kasih banyak atas penjelasan !!!

  7.   fran kata

    ini adalah skrip iptables saya sendiri, sangat lengkap:

    # franes.iptables.airoso
    # doc.iptables.airoso: iptables untuk warisan dan untuk nft
    #
    # port firewall
    ############################
    #! / Bin / Bash
    #
    # kosongkan skrin
    ############################# permulaan /etc/f-iptables/default.cfg |||||
    jelas
    # tinggalkan garis kosong
    echo
    eksport ya = »» tidak = »gema mati»
    # pemboleh ubah yang boleh anda ubah untuk membenarkan akses
    ###################### pemboleh ubah untuk diubah dengan $ ya atau $ tidak
    eksport hayexcepciones = »$ tidak»
    # ada pengecualian: $ ya untuk membenarkan hos yang luar biasa dan $ tidak untuk melumpuhkan
    eksport rumput kering = »$ tidak»
    # hayping: $ ya untuk membenarkan ping kepada pihak ketiga dan $ tidak untuk dinafikan
    eksport haylogserver = »$ tidak»
    # haylogeosserver: $ ya untuk dapat log tcp $ tidak untuk tidak dapat log tcp
    ######
    ###################### pemboleh ubah untuk diubah dengan menambahkan "," atau dengan rentang ":"
    pengecualian eksport = »baldras.wesnoth.org»
    # pengecualian membenarkan hos tunggal atau berbilang dari firewall atau tiada nilai
    eksport logserver = buang, ipp ,ict, ssh
    # port pelayan tcp yang dilog semasa paket masuk
    eksport redserver = 0/0
    # redserver: rangkaian untuk port pelayan rangkaian tempatan pilihan atau beberapa ips
    pelanggan eksport merah = 0/0
    #clientnet: rangkaian untuk port klien lebih baik daripada semua rangkaian
    eksport servidortcp = buang, ipp, dikt, 6771
    # servidortcp: port pelayan tcp yang ditentukan
    eksport serverudp = buang
    #udpserver: port pelayan udp yang ditentukan
    eksport clientudp = domain, bootpc, bootps, ntp, 20000: 45000
    #udp client: port klien udp yang ditentukan
    eksport clienttcp = domain, http, https, ipp, git ,ict, 14999: 15002
    # tcp client: port klien tcp yang ditentukan
    ############################# akhir /etc/f-iptables/default.cfg |||||
    ############################### akhir pemboleh ubah untuk mengubah suai
    eksport firewall = $ 1 pemboleh ubah = $ 2
    jika ["$ variables" = "$ NULL"]; kemudian sumber /etc/f-iptables/default.cfg;
    sumber lain / etc / f-iptables / $ 2; fi
    ############################### atau akan menimpa pemboleh ubah dengan fail .cfg
    ################################################# #########################################
    eksport firewall = $ 1 pemboleh ubah eksport = $ 2
    ######################################### pemboleh ubah sistem automatik
    jika ["$ firewall" = "terputus"]; kemudian gema FIREWALL TIDAK DITUNGGU;
    export activateserver = »$ no» activateclient = »$ no» basah = »$ tidak»;
    elif ["$ firewall" = "client"]; kemudian gema CLIENT FIREWALL;
    export activateserver = »$ no» activateclient = »» basah = »$ tidak»;
    elif ["$ firewall" = "pelayan"]; kemudian gema SERVER FIREWALL;
    export activateserver = »» activateclient = »$ no» basah = »$ tidak»;
    elif ["$ firewall" = "pelanggan dan pelayan"]; kemudian gema CLIENT DAN SERVER FIREWALL;
    eksport aktifkan pelayan = »»; export activateclient = »»; eksport basah = »$ tidak»;
    elif ["$ firewall" = "permisif"]; kemudian gema TUNJANG PERMISSIVE;
    export activateserver = »$ no» activateclient = »$ no» basah = »»;
    lagi
    $ semak sudo echo iptables-legacy:
    $ semak sudo iptables-legacy -v -L INPUT
    $ semak sudo iptables-legacy -v -L OUTPUT
    $ semak sudo echo iptables-nft:
    $ semak sudo iptables-nft -v -L INPUT
    $ semak sudo iptables-nft -v -L OUTPUT
    gema _____parameter____ $ 0 $ 1 $ 2
    echo "cast tanpa parameter adalah untuk menyenaraikan iptables."
    echo "Parameter pertama (aktifkan iptables): terputus atau pelanggan atau pelayan atau pelanggan dan pelayan atau permisif."
    echo "Parameter kedua: (pilihan): fail .cfg lalai memilih /etc/f-iptables/default.cfg"
    echo "Tetapan berubah-ubah:" $ (ls / etc / f-iptables /)
    jalan keluar 0; fi
    #################
    echo
    echo Membuang $ 0 terputus atau klien atau pelayan atau pelanggan dan pelayan atau permisif atau pemboleh ubah atau tanpa menggunakan parameter untuk menyenaraikan iptables.
    echo Fail $ 0 mengandungi beberapa pemboleh ubah yang dapat diedit di dalamnya.
    ############################### pemboleh ubah di atas diaktifkan
    #################################
    echo menetapkan pemboleh ubah iptables
    pemboleh ubah diaktifkan gema
    echo
    ############################ peraturan iptables
    echo Menetapkan 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 FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j MENERIMA> / 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 $ pengecualian -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan pelayan 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 found -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 found -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j TERIMA> / dev / null
    sudo / usr / sbin / iptables-legacy-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
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ pengecualian -j ACCEPT> / dev / null
    $ aktifkan sudo server / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan pelayan sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport -sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan pelanggan 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 echo-request -j TERIMA> / dev / null
    sudo / usr / sbin / iptables-legacy-OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy-A FORWARD -j DROP
    echo iptables-legacy diaktifkan
    echo
    echo Menetapkan 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 MENERIMA> / 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 $ pengecualian -j ACCEPT> / dev / null
    $ aktifkan pelayan sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan pelayan 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 found -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 found -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j TERIMA> / 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 $ pengecualian -j ACCEPT> / dev / null
    $ aktifkan pelayan sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan pelayan 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 echo-request -j TERIMA> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft didayakan
    echo
    $ basah sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ basah sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ basah sudo / usr / sbin / iptables-legacy -A INPUT -m state -state ditubuhkan -j ACCEPT> / dev / null
    $ basah sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ basah sudo / usr / sbin / iptables-legacy-A OUTPUT -j ACCEPT> / dev / null
    $ basah sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ basah sudo / usr / sbin / iptables-nft -F> / dev / null
    $ basah sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ basah sudo / usr / sbin / iptables-nft -A INPUT -m state -state ditubuhkan -j ACCEPT> / dev / null
    $ basah sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ basah sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ basah sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    ###########################
    gema anda telah membuang $ 0 $ 1 $ 2
    # keluar skrip
    jalan keluar 0

  8.   Luis Duran kata

    Bagaimana saya menetapkan peraturan jika firewall ini menggunakannya untuk gateway saya dan mempunyai sotong di LAN ???