GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengamankan Firewall Linux Dengan Aturan IPTables

Peretasan server dan akses tidak sah adalah ancaman nyata. Alasan inilah mengapa Anda harus menerapkan firewall sebagai bagian dari strategi keamanan jaringan Anda secara keseluruhan. Mengonfigurasi firewall dengan aturan iptables adalah salah satu cara untuk mengurangi risiko tersebut pada sistem Linux.

Beruntung bagi Anda, tutorial ini akan mengajarkan Anda bagaimana menerapkan firewall dengan konfigurasi aturan iptables dasar yang kemudian dapat Anda sesuaikan berdasarkan kebutuhan Anda. Siap mengotori tangan Anda? Saatnya menyelam!

Prasyarat

Tutorial ini menampung demonstrasi langsung. Jika Anda ingin mengikuti, pastikan Anda memiliki server Linux atau komputer desktop. Tutorial ini menggunakan Ubuntu 14.04 untuk contoh tetapi harus bekerja dengan distro Linux lain dan versi Ubuntu yang lebih baru.

Menginstal Layanan Firewall Persisten Iptables

Sesuai dengan namanya, IPTables Persistent Firewall adalah layanan yang menyimpan kumpulan aturan Anda dan secara otomatis menerapkan aturan IPTables saat server dimulai ulang. Tetapi pertama-tama, Anda perlu menginstal paket firewall persisten.

Untuk menginstal IPTables Persistent Firewall, lanjutkan dengan langkah-langkah berikut.

1. Buka sesi terminal di server Anda baik secara lokal atau melalui SSH.

2. Selanjutnya, jalankan perintah di bawah ini untuk memperbarui cache sumber paket server Anda.

# Updating the package source cache
sudo apt update -y

3. Sekarang, jalankan perintah di bawah ini untuk menginstal IPTables Persistent Firewall.

# Installing the Persistent Firewall Package
sudo apt install iptables-persistent -y

4. Untukmenyimpan aturan IPv4 saat ini , pilih Ya dan tekan Enter pada prompt. Pemasang menyimpan aturan IPv4 ke file /etc/iptables/rules.v4.

5. Perintah berikutnya meminta Anda untuk Menyimpan aturan IPv6 saat ini , pilih Ya, dan tekan Enter. Pemasang menyimpan aturan IPv6 ke file /etc/iptables/rules.v6.

Terakhir, konfirmasikan bahwa netfilter-persistent.service aktif dan diaktifkan.

sudo systemctl status netfilter-persistent

Menyiapkan Aturan Dasar Iptables

Dalam pengaturan firewall dasar, Anda akan membuat kerangka kerja yang dapat diperluas yang dapat Anda bangun untuk mengonfigurasi firewall Anda. Umumnya, Anda akan menyiapkan "tolak semua-terima semua ”, artinya setiap permintaan yang masuk dari IP mana pun akan ditolak, kecuali IP Anda dan SSH port 22 (untuk akses admin).

Koneksi apa pun yang sedang berlangsung dari IP server Anda ke internet yang lebih luas akan diizinkan; setiap koneksi yang masuk akan terputus (kecuali untuk SSH). Setelah itu, Anda akan membuat pengecualian untuk layanan dan jenis lalu lintas tertentu yang Anda butuhkan, secara bertahap mempelajarinya nanti dalam tutorial ini.

1. Buka /etc/iptables/rules.v4 file dalam editor teks. Contoh ini menggunakan nano sebagai editor.

sudo nano /etc/iptables/rules.v4

Selanjutnya, hapus semua konten di /etc/iptables/rules.v4 file dan menggantinya dengan baris berikut. Lihat komentar sebaris untuk memahami apa yang dilakukan setiap baris/bagian.

Catatan:Konfigurasi firewall di bawah ini adalah apa yang mungkin Anda gambarkan sebagai ketat dan hanya untuk membuat aturan firewall dasar, yang nantinya dapat Anda sesuaikan.

*filter
# Setting up a "deny all-accept all" policy
# Allow all outgoing, but deny/drop all incoming and forwarding traffic
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Custom per-protocol chains
# Defining custom rules for UDP protocol.
:UDP - [0:0]
# Defining custom rules for TCP protocol.
:TCP - [0:0]
# Defining custom rules for ICMP protocol.
:ICMP - [0:0]

# Accept SSH UDP traffic
-A TCP -p udp --dport 22 -j ACCEPT
# Accept SSH TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT

# Acceptable ICMP traffic

# Boilerplate acceptance policy
# Allowing packets based on the CONNTRACK connection states of ESTABLISHED and RELATED
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Allowing packets through the loopback interface, which is used for local connections
-A INPUT -i lo -j ACCEPT

# Packets that do not match any rules in the protocol-specific should be dropped.
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Allowing new protocol-specific chains to process packets for UDP that have a NEW conntrack state.
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
# Allowing new protocol-specific chains to process packets for TCP that have a NEW conntrack state.
-A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
# Allowing new protocol-specific chains to process packets for ICMP that have a NEW conntrack state.
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP

# Reject anything at this point. And print out rejection message with its specific protocol.
# Issuing an ICMP "port unreachable" message to any new incoming UDP packets, rejecting them.
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
# Issuing a "tcp-reset" message to any new incoming TCP packets, rejecting them.
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
# Issuing an "icmp-proto-unreachable" message to any new incoming TCP packets, dropping all other incoming packets.
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

# Commit the changes
COMMIT

*raw
# Allowing packets in the PREROUTING chain
:PREROUTING ACCEPT [0:0]
# Allows packets in the OUTPUT chain, which is used for locally generated packets
:OUTPUT ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT
# NAT table is used to alter packets as they are routed through the system
*nat
:PREROUTING ACCEPT [0:0]
# Allowing packets in the INPUT chains for NAT
:INPUT ACCEPT [0:0]
# Allowing packets in the OUTPUT chains for NAT
:OUTPUT ACCEPT [0:0]
# Allowing packets in the POSTROUTING chains for NAT
:POSTROUTING ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT

*security
# Allowing packets in the INPUT chains for security
:INPUT ACCEPT [0:0]
# Allowing packets in the FORWARD chains for security
:FORWARD ACCEPT [0:0]
# Allowing packets in the OUTPUT chains for security
:OUTPUT ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT

*mangle
# Allowing packets in the PREROUTING chains for mangle
:PREROUTING ACCEPT [0:0]
# Allowing packets in the INPUT chains for mangle
:INPUT ACCEPT [0:0]
# Allowing packets in the FORWARD chains for mangle
:FORWARD ACCEPT [0:0]
# Allowing packets in the OUTPUT chains for mangle
:OUTPUT ACCEPT [0:0]
# Allowing packets in the POSTROUTING chains for mangle
:POSTROUTING ACCEPT [0:0]
# Commits the changes to the kernel
COMMIT

3. Simpan file. Di nano , tekan CTRL+X, Y, Enter.

4. Jalankan iptables-restore perintah di bawah ini untuk memvalidasi atau menemukan kesalahan sintaks. Jika tidak ada kesalahan, firewall akan memulai ulang dengan aturan yang Anda tetapkan dalam file. Jika ada kesalahan, perintah akan mengembalikan daftar kesalahan dan cara memperbaikinya.

sudo iptables-restore -t /etc/iptables/rules.v4

5. Selanjutnya, edit /etc/iptables/rules.v6 untuk menerapkan kebijakan dan kerangka kerja firewall Anda untuk IPv6.

sudo nano /etc/iptables/rules.v6

6. Ganti file /etc/iptables/rules.v6 dengan baris berikut. Simpan dan keluar dari /etc/iptables/rules.v6 dengan menekan CTRL+X, Y, Enter.

Aturan iptables di bawah ini akan menghapus semua lalu lintas IPv6 dan mengasumsikan bahwa tidak ada aplikasi atau layanan di server yang mengandalkan atau menggunakan IPv6.

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT

7. Jalankan perintah di bawah ini untuk menemukan dan memperbaiki kesalahan sintaks.

sudo ip6tables-restore -t /etc/iptables/rules.v6

8. Sekarang, muat ulang netfilter-persistent layanan agar aturan iptables berlaku.

sudo service netfilter-persistent reload

9. Jalankan perintah di bawah ini untuk menyimpan aturan iptables baru.

sudo service netfilter-persistent save

10. Jalankan perintah di bawah ini untuk membuat daftar semua aturan untuk IPv4 yang saat ini digunakan.

sudo iptables -S

10. Terakhir, buat daftar aturan iptables untuk IPv6.

sudo ip6tables -S

Mengubah Alamat IP Server DNS Server Anda (Bersyarat)

Memblokir semua lalu lintas IPv6 dapat mengakibatkan efek samping yang tidak menguntungkan, khususnya jika server Anda bergantung pada IPv6 untuk resolusi nama.

Dalam contoh ini, konfigurasi jaringan bergantung pada server nama IPv6 (seperti 2001:4860:4860::8888 dan 2001:4860:4860::8844). Karena firewall hanya memberlakukan lalu lintas IPv4, sistem tidak dapat mencari server nama untuk IPv6.

Misalnya, beberapa repositori APT Anda mungkin tidak berfungsi jika firewall memblokir semua lalu lintas IPv6. Jika Anda mencoba menjalankan kembali sudo apt update perintah, Anda mungkin mendapatkan kesalahan berikut.

Solusinya adalah memperbarui file konfigurasi jaringan Anda, lebih memilih untuk menggunakan server nama IPv4 (seperti 8.8.8.8 dan 8.8.4.4).

1. Buka /etc/network/interfaces file dalam editor teks.

File konfigurasi nantarmuka jaringan mungkin berbeda tergantung pada distro atau versi Linux. Contoh di bawah ini khusus untuk Ubuntu 14.04 LTS.

sudo nano /etc/network/interfaces

2. Cari dns-nameservers pengarahan. Ubah direktif ini menjadi dns-nameservers 8.8.8.8 8.8.4.4 .

The 8.8.8.8 dan 8.8.4.4 adalah server DNS publik yang dijalankan oleh Google. Server DNS publik ini dapat diandalkan dan cepat. Jangan ragu untuk menggunakan server DNS lain, seperti OpenDNS atau dan DNS IPv4 internal di organisasi Anda.

3. Jalankan perintah di bawah ini untuk menggilir antarmuka jaringan server Anda dan menggunakan server nama baru.

sudo ifdown eth0 && sudo ifup eth0

4. Selanjutnya, buka /etc/apt/apt.conf.d/99force-ipv4 di editor teks. Konfigurasi default ini mengarsipkan apa APT digunakan untuk pengaturan persisten.

sudo nano /etc/apt/apt.conf.d/99force-ipv4

5. Isi 99force-ipv4 file dengan baris berikut. Nilai ini akan memaksa APT untuk menggunakan IPv4 untuk resolusi nama. Simpan dan keluar dari 99force-ipv4 .

Acquire::ForceIPv4 "true";

6. Log out dan login kembali di sesi SSH Anda dan jalankan kembali sudo apt update memerintah. Anda seharusnya tidak lagi melihat kesalahan resolusi nama.

Menambahkan Pengecualian untuk Layanan Tertentu

Sekarang setelah Anda memiliki aturan iptables “izinkan semua tolak semua” yang berfungsi, Anda sekarang dapat membuka port tertentu untuk layanan tertentu sesuai kebutuhan. Misalnya, jika server Anda menghosting atau akan menghosting situs web, Anda harus mengizinkan lalu lintas HTTP port 80 atau HTTPS port 443. Untuk melakukannya, lakukan sebagai berikut.

1. Di terminal, jalankan perintah berikut untuk membuka port TCP 80 untuk lalu lintas HTTP dan port 443 untuk lalu lintas HTTPS.

  • -A parameter menerima rantai mana yang akan ditambahkan aturan.
  • -p parameter menentukan jenis protokol yang diterapkan aturan.
  • --dport nilai parameter adalah nomor port tujuan.
  • -j parameter mengarahkan tindakan mana yang harus diambil saat aturan cocok.
sudo iptables -A TCP -p tcp --dport 80 -j ACCEPT
sudo iptables -A TCP -p tcp --dport 443 -j ACCEPT

2. Jalankan perintah di bawah ini untuk memverifikasi bahwa aturan baru sekarang efektif.

sudo iptables -L -v

Anda akan melihat dua entri Anda untuk HTTP dan HTTPS, masing-masing.

3. Terakhir, jalankan perintah di bawah ini untuk menyimpan perubahan pada aturan iptables.

sudo service netfilter-persistent save

Mengizinkan Koneksi Berdasarkan Sumber

Iptables juga memungkinkan Anda membuat aturan untuk mengizinkan lalu lintas dari sumber tertentu, seperti dari satu atau lebih alamat IP. Misalnya, perusahaan Anda mungkin memiliki tiga situs, masing-masing memiliki alamat IP (mis., 192.168.1.20, 192.168.1.30, dan 192.168.1.40).

Anda mungkin ingin mengizinkan koneksi ke server Anda dari setiap situs. Untuk melakukannya, Anda akan membuat tiga aturan terpisah dengan -s untuk menentukan sumber spesifik.

1. Jalankan perintah berikut untuk mengizinkan koneksi dari tiga alamat IP tertentu.

Alamat IP di bawah ini hanya untuk tujuan contoh dan mungkin tidak mencerminkan skenario dunia nyata. Alamat IP situs Anda akan berbeda.

# Allowing connection from 192.168.1.20
sudo iptables -A TCP -s 192.168.1.20 -j ACCEPT
# Allowing connection from 192.168.1.30
sudo iptables -A TCP -s 192.168.1.30 -j ACCEPT
# Allowing connection from 192.168.1.40
sudo iptables -A TCP -s 192.168.1.40 -j ACCEPT

2. Jalankan kembali perintah di bawah ini untuk memverifikasi bahwa aturan baru yang Anda tambahkan.

sudo iptables -L -v

Anda akan melihat tiga entri untuk tiga sumber spesifik Anda, yang memungkinkan mereka terhubung ke server Anda.

3. Terakhir, jangan lupa untuk menyimpan aturan iptables Anda dengan menjalankan perintah di bawah ini.

sudo service netfilter-persistent save

Mengatur Ulang Aturan Iptables

Anda sekarang telah berhasil mengonfigurasi firewall dengan aturan iptables. Tapi tidak semuanya berjalan sesuai rencana setiap saat. Tapi bagaimana jika Anda gagal dan ingin memulai dari awal?

Salah satu opsi adalah mengatur ulang semua aturan iptables Anda. Untuk melakukannya, ikuti langkah-langkah di bawah ini.

1. Pertama, buat salinan cadangan dari aturan iptables yang ada. Perintah di bawah ini menyalin rules.v4 dan rules.v6 file ke direktori home Anda.

sudo cp /etc/iptables/* ~/

2. Selanjutnya, hapus semua aturan iptables yang ada dengan menjalankan perintah di bawah ini.

sudo service netfilter-persistent flush

3. Konfirmasikan bahwa aturan tidak ada lagi.

sudo iptables -S

Seperti yang Anda lihat di bawah, hanya aturan iptables default yang tersisa, memungkinkan semua. Perilaku ini memastikan bahwa menyetel ulang aturan tidak akan menyebabkan skenario penguncian akses admin.

Kesimpulan

Sepanjang tutorial ini, Anda telah mempelajari cara mengamankan firewall Linux Anda dengan aturan iptables dan cara mengonfigurasi pengecualian.

Beberapa admin Linux mungkin berpendapat bahwa iptables sudah ketinggalan zaman untuk mengkonfigurasi firewall Linux. Namun banyak aplikasi yang masih mengandalkan iptables, yang dapat berarti bahwa iptables akan tetap menjadi andalan selama bertahun-tahun lagi.

Apa pendapat Anda tentang menggunakan aturan iptables persisten? Apakah Anda akan mempertimbangkan untuk menerapkannya atau beralih ke opsi yang lebih baru seperti uncomplicated firewall (UFW)?


Linux
  1. Cara menghapus aturan iptables

  2. Cara menghapus aturan iptables

  3. Cara Mengamankan server Ubuntu Anda dengan CSF Firewall

  1. Cara Menambahkan Aturan iptables Khusus di CSF Firewall

  2. Linux IPTables:Cara Menambahkan Aturan Firewall (Dengan Contoh Izinkan SSH)

  3. Cara memverifikasi apakah iptables sedang berjalan atau firewall diaktifkan

  1. Cara:Linux Umum – IPTables secara Umum

  2. Cara Masuk Linux IPTables Firewall Menjatuhkan Paket ke File Log

  3. Bagaimana cara memeriksa kata sandi dengan Linux?