Buat firewall Anda sendiri dengan iptables menggunakan skrip sederhana ini

Saya menghabiskan beberapa waktu untuk memikirkan dua hal tentang iptables ini: kebanyakan dari mereka yang mencari tutorial ini adalah pemula dan kedua, banyak yang sudah mencari sesuatu yang cukup sederhana dan sudah dielaborasi.

Contoh ini untuk server web, tetapi Anda dapat dengan mudah menambahkan lebih banyak aturan dan menyesuaikannya dengan kebutuhan Anda.

Saat Anda melihat "x" berubah untuk ip Anda


#!/bin/bash

# Kita membersihkan tabel iptables -F iptables -X # Kita membersihkan NAT iptables -t nat -F iptables -t nat -X # tabel mangle untuk hal-hal seperti PPPoE, PPP, dan ATM iptables -t mangle -F iptables -t mangle -X # Kebijakan Saya pikir ini adalah cara terbaik untuk pemula dan # masih tidak buruk, saya akan menjelaskan keluaran (keluaran) semua karena mereka adalah koneksi keluar #, masukan kita membuang semuanya, dan tidak ada server yang harus meneruskan. iptables -P INPUT DROP iptables -P OUTPUT MENERIMA iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Pertahankan status. Segala sesuatu yang sudah terhubung (didirikan) dibiarkan seperti ini iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, kami tidak menentukan antarmuka karena # kami ingin semua iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh hanya secara internal dan dari kisaran ip iptables ini -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoring misalnya jika mereka memiliki zabbix atau beberapa layanan snmp lainnya iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping terserah Anda iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql with postgres is port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh jika Anda ingin mengirim email # iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - wan ip server Anda yang sebenarnya LAN_RANGE = "192.168.xx / 21 "# Rentang LAN jaringan Anda atau vlan # Ip Anda yang tidak boleh masuk ke ekstranet,adalah menggunakan sedikit # logika jika kita memiliki antarmuka WAN murni, ia tidak boleh memasukkan # lalu lintas jenis LAN melalui antarmuka 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 / XNUMX "# Tindakan default - untuk dijalankan ketika ada aturan yang cocok dengan ACTION =" DROP "# Paket dengan ip yang sama dari server saya melalui wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paket dengan LAN Range untuk wan, saya taruh seperti ini jika Anda memiliki # jaringan tertentu, tetapi ini berlebihan dengan # aturan berikut di dalamnya loop "untuk" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Semua SPOOF Jaringan tidak diizinkan oleh wan untuk ip in $ SPOOF_IPS melakukan iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION selesai

Seperti biasa saya menunggu komentar Anda, pantau terus blog ini, Terima kasih


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   HO2Gi dijo

    Ini membantu saya untuk terus belajar lebih banyak terima kasih disalin.

    1.    brodydalle dijo

      sama-sama, senang bisa membantu

  2.   Xavier dijo

    Saya benar-benar minta maaf, tapi saya punya dua pertanyaan (dan satu sebagai hadiah 😉):

    Apakah Anda akan datang dengan konfigurasi ini untuk menjalankan Apache dan menutup sisanya kecuali SSH?

    #Kami membersihkan tabel
    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 internal dan dari kisaran ip ini

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

    Pertanyaan kedua: Apakah 7659 port yang digunakan di SSH dalam contoh ini?

    Dan ketiga dan terakhir: di file manakah konfigurasi ini harus disimpan?

    Terima kasih banyak untuk tutorialnya, sayang sekali Anda adalah seorang pemula dan tidak dapat memanfaatkannya dengan baik.

    1.    brodydalle dijo

      ini adalah aturan yang Anda butuhkan untuk http dari apache
      iptables -A INPUT -p tcp –dport 80 -j TERIMA

      tetapi Anda juga perlu mendeklarasikan kebijakan drop default (ada di skrip)
      iptables -P DRP INPUT
      iptables -P OUTPUT ACCEPT
      iptables -P MAJU DROP

      dan ini karena jika Anda jauh, itu akan membuang Anda.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT

      jika 7659 adalah port ssh itu dalam contoh, secara default adalah 22, meskipun saya sarankan Anda mengubah ke port "tidak terkenal"
      Sobat, saya tidak tahu, seperti yang Anda inginkan ... firewall.sh dan Anda letakkan di rc.local (sh firewall.sh) sehingga berjalan otomatis, itu tergantung pada sistem operasi apa yang Anda miliki, ada file di mana Anda dapat menempatkan aturan secara langsung.

  3.   jge dijo

    Hai, skrip Anda sangat bagus, menganalisisnya .... Apakah Anda tahu bagaimana saya dapat menolak semua permintaan dari pengguna saya ke situs web tertentu?…. tetapi situs web ini memiliki banyak server….

    1.    brodydalle dijo

      Saya merekomendasikan opsi lain:
      1) Anda dapat membuat zona palsu di dns Anda ...
      2) Anda dapat menempatkan proxy dengan acl
      embargo dosa
      Untuk iptables Anda bisa menyukai ini ... ini tidak selalu merupakan pilihan terbaik (ada lebih banyak cara)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

      Beri tahu saya jika berhasil

  4.   Xavier dijo

    Terima kasih atas jawabannya, semuanya beres. Saya bertanya tentang porta karena saya terkejut menggunakan 7659, karena port privat dimulai pada 49152, dan dapat mengganggu beberapa layanan atau sesuatu.
    Sekali lagi, terima kasih untuk semuanya, itu bagus!

    Salam.

  5.   sic dijo

    BrodyDalle, bagaimana saya bisa menghubungi Anda? Sangat menarik naskah Anda.

  6.   Carlos dijo

    Baris terakhir "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" adalah untuk mencegah mesin Anda melakukan spoofing? Atau mungkinkah beberapa paket yang diracuni masuk dan keluar dengan sumber yang diracuni itu dan itulah mengapa aturan tersebut juga disertakan dengan OUTPUT?
    Terima kasih banyak atas klarifikasinya !!!

  7.   fran dijo

    ini script iptables saya sendiri, lengkap sekali:

    #franes.iptables.airoso
    # doc.iptables.airoso: iptables untuk warisan dan untuk nft
    #
    # port firewall
    ##########################
    #! / bin / bash
    #
    # bersihkan layar
    ############################# mulai dari /etc/f-iptables/default.cfg ||i>i>i>
    jelas
    # tinggalkan baris kosong
    gema
    ekspor yes = »» no = »echo off»
    # variabel yang dapat Anda ubah untuk mengizinkan akses
    ###################### variabel untuk diubah dengan $ yes atau $ no
    ekspor hayexcepciones = »$ no»
    # ada pengecualian: $ yes untuk mengizinkan host yang luar biasa dan $ no untuk menonaktifkan
    ekspor hayping = »$ no»
    # hayping: $ yes untuk mengizinkan ping ke pihak ketiga dan $ tidak untuk menolak
    ekspor haylogserver = »$ no»
    # haylogeosserver: $ yes untuk bisa log tcp $ no agar tidak bisa log tcp
    ######
    ###################### variabel untuk mengubah penambahan "," atau dengan rentang ":"
    ekspor pengecualian = »baldras.wesnoth.org»
    # pengecualian mengizinkan satu atau beberapa host dari firewall atau tanpa nilai
    ekspor logserver = buang, ipp, dikt, ssh
    # port server tcp yang dicatat ketika paket masuk
    ekspor redserver = 0/0
    # redserver: jaringan untuk port server lebih disukai jaringan lokal atau beberapa ips
    ekspor klien merah = 0/0
    # clientnet: jaringan untuk port klien lebih disukai daripada semua jaringan
    ekspor servidortcp = buang, ipp, dict, 6771
    # servidortcp: port server tcp yang ditentukan
    export serverudp = buang
    #udpserver: port server udp yang ditentukan
    ekspor clientudp = domain, bootpc, bootps, ntp, 20000: 45000
    #udp client: port klien udp yang ditentukan
    ekspor clienttcp = domain, http, https, ipp, git, dict, 14999: 15002
    # klien tcp: port klien tcp yang ditentukan
    ############################ akhir dari /etc/f-iptables/default.cfg ||i>i>i>
    ############################## akhir variabel yang akan diubah
    ekspor firewall = $ 1 variabel = $ 2
    jika ["$ variabel" = "$ NULL"]; lalu sumber /etc/f-iptables/default.cfg;
    lain sumber / etc / f-iptables / $ 2; fi
    ############################## atau akan menimpa variabel dengan file .cfg
    ############################################### ########################################
    ekspor firewall = $ 1 variabel ekspor = $ 2
    ######################################## variabel sistem otomatis
    if ["$ firewall" = "terputus"]; lalu echo FIREWALL DISCONNECTED;
    ekspor activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; lalu echo KLIEN FIREWALL;
    ekspor activateserver = »$ tidak» activateclient = »» basah = »$ tidak»;
    elif ["$ firewall" = "server"]; lalu echo FIREWALL SERVER;
    export activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klien dan server"]; lalu echo FIREWALL CLIENT AND SERVER;
    ekspor aktifkan server = »»; ekspor activateclient = »»; ekspor basah = »$ no»;
    elif ["$ firewall" = "permisif"]; lalu echo PERMISSIVE FIREWALL;
    ekspor activateserver = »$ no» activateclient = »$ no» wet = »»;
    lain
    $ check sudo echo iptables-legacy:
    $ cek sudo iptables-legacy -v -L INPUT
    $ cek sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ cek sudo iptables-nft -v -L INPUT
    $ cek sudo iptables-nft -v -L OUTPUT
    echo _____parameters____ $ 0 $ 1 $ 2
    echo "cast tanpa parameter adalah daftar iptables."
    echo "Parameter pertama (aktifkan iptables): terputus atau klien atau server atau klien dan server atau permisif."
    echo "Parameter kedua: (opsional): file default.cfg memilih /etc/f-iptables/default.cfg"
    echo "Pengaturan variabel:" $ (ls / etc / f-iptables /)
    keluar 0; fi
    #################
    gema
    echo Melempar $ 0 terputus atau klien atau server atau klien dan server atau permisif atau variabel atau tanpa menggunakan parameter untuk membuat daftar iptables.
    echo File $ 0 berisi beberapa variabel yang dapat diedit di dalamnya.
    ############################## variabel di atas diaktifkan
    ##############################
    echo mengatur variabel iptables
    variabel yang diaktifkan gema
    gema
    ########################## aturan iptables
    echo Setting 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 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 $ exception -j ACCEPT> / dev / null
    $ aktifkan sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan 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 mapan -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 didirikan -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
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exception -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 server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan klien 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 ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-legacy diaktifkan
    gema
    echo Pengaturan 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 KELUARAN -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 $ exception -j ACCEPT> / dev / null
    $ aktifkan server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan 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 mapan -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 mapan -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type 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
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exception -j ACCEPT> / dev / null
    $ aktifkan server sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktifkan 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 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 diaktifkan
    gema
    $ 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 didirikan -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 didirikan -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
    #########################
    echo Anda telah melempar $ 0 $ 1 $ 2
    # keluar dari skrip
    keluar 0

  8.   louis durian dijo

    Bagaimana saya menetapkan aturan jika firewall ini menggunakannya untuk gateway saya dan memiliki squid di dalam LAN ???