GNU/Linux >> Belajar Linux >  >> Linux

Linux IPTables:Contoh Aturan Masuk dan Keluar (SSH dan HTTP)

Dalam artikel seri firewall IPTables kami sebelumnya, kami meninjau cara menambahkan aturan firewall menggunakan “iptables -A”.

Kami juga menjelaskan cara mengizinkan koneksi SSH yang masuk. Pada tingkat tinggi, ini melibatkan 3 langkah berikut.

  1. Hapus semua aturan yang ada:“iptables -F”
  2. Hanya izinkan SSH yang masuk:“iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT”
  3. Lepaskan semua paket masuk lainnya:“iptables -A INPUT -j DROP”

Di atas berfungsi. Tapi itu tidak lengkap. Satu masalah dengan langkah di atas adalah tidak membatasi paket keluar.

Kebijakan Rantai Default

Kebijakan default dari sebuah rantai adalah ACCEPT. Jika Anda tidak mengerti apa artinya rantai, Anda sebaiknya membaca artikel pengantar iptables kami. Jadi, kebijakan default rantai INPUT dan OUTPUT adalah ACCEPT. Dalam 3 langkah di atas kami menjatuhkan semua paket yang masuk di akhir (kecuali ssh masuk). Namun, kami tidak membatasi lalu lintas keluar.

Seperti yang Anda perhatikan di bawah, tertulis “(policy ACCEPT)” di sebelah ketiga nama rantai (INPUT, OUTPUT, dan FORWARD). Ini menunjukkan bahwa kebijakan rantai default adalah ACCEPT.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Jadi, Anda memiliki dua opsi di sini.

Opsi 1:Tambahkan aturan pelepasan

Pada akhirnya, tambahkan tiga aturan drop berikut yang akan menghapus semua paket masuk, keluar, dan meneruskan (kecuali yang didefinisikan di atas tiga aturan ini). Jika Anda melakukan ini, kebijakan rantai default masih ACCEPT, yang seharusnya tidak menjadi masalah, karena Anda tetap menjatuhkan semua paket di akhir.

iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP

Opsi 2:Ubah kebijakan rantai default menjadi DROP

Pada awalnya, jalankan tiga perintah berikut yang akan mengubah kebijakan default rantai menjadi DROP.

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Sekarang, jika Anda menambahkan aturan allow ssh:“iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT”, dan lakukan iptables -L, Anda akan melihat tulisan “(policy DROP)” di sebelah ketiga rantai tersebut.

# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination

Tapi ada masalah di sini. Aturan izinkan koneksi masuk ssh tidak akan berfungsi lagi, karena semua paket keluar dihapus.

Izinkan Koneksi Masuk

Jika kebijakan default adalah DROP untuk rantai INPUT dan OUTPUT, untuk setiap aturan firewall yang masuk, Anda perlu menentukan dua aturan berikut.

  1. Aturan permintaan:Ini adalah permintaan yang datang dari klien ke server untuk koneksi masuk.
  2. Aturan respons:Ini untuk respons yang keluar dari server ke klien (untuk permintaan masuk yang sesuai).

Contoh 1:Izinkan koneksi SSH masuk

Ini untuk memungkinkan koneksi SSH dari luar ke server Anda. yaitu Anda dapat ssh ke server Anda dari luar.

Ini melibatkan dua langkah. Pertama, kita perlu mengizinkan koneksi SSH baru yang masuk. Setelah koneksi ssh masuk diizinkan, kita juga perlu mengizinkan respons kembali untuk koneksi ssh masuk tersebut.

Pertama, Izinkan permintaan koneksi SSH masuk, seperti yang ditunjukkan di bawah ini.

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

Pada contoh di atas:

  • iptables -A INPUT:Menambahkan aturan baru ke rantai INPUT. Untuk permintaan koneksi masuk, ini harus selalu INPUT.
  • -i eth0:Ini mengacu pada antarmuka input. Untuk koneksi masuk, ini harus selalu '-i'.
  • -p tcp:Menunjukkan bahwa ini untuk protokol TCP.
  • –dport 22:Ini merujuk ke port tujuan untuk koneksi masuk. Port 22 untuk ssh.
  • -m state:Ini menunjukkan bahwa modul pencocokan "status" digunakan. Kami akan membahas lebih lanjut tentang opsi “-m” (dan semua modul pencocokan yang tersedia untuk iptables) di artikel mendatang.
  • –status BARU, DIDIRIKAN:Opsi untuk modul pencocokan “status”. Dalam contoh ini, hanya status BARU dan ESTABLISHED yang diizinkan. Pertama kali ketika permintaan koneksi SSH dimulai dari klien ke server, status BARU digunakan. Status ESTABLISHED digunakan untuk semua permintaan lebih lanjut dari klien ke server.

Selanjutnya, Izinkan respons koneksi SSH keluar (hanya status ESTABLISHED) (untuk permintaan koneksi SSH masuk yang sesuai).

iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Pada contoh di atas:

  • iptables -A OUTPUT:Menambahkan aturan baru ke rantai OUTPUT. Karena ini untuk aturan respons (untuk permintaan masuk yang sesuai) yang keluar dari server, ini seharusnya OUTPUT.
  • -o eth0:Ini merujuk pada antarmuka keluaran. Untuk koneksi keluar, ini harus selalu '-o'.
  • -p tcp:Menunjukkan bahwa ini untuk protokol TCP.
  • –sport 22:Ini merujuk ke port sumber untuk koneksi keluar. Port 22 adalah untuk ssh. Karena permintaan masuk (dari aturan sebelumnya) datang ke port "tujuan", respons keluar akan melalui port "sumber".
  • -m state:Ini menunjukkan bahwa modul pencocokan "status" digunakan.
  • –status ESTABLISHED:Karena ini adalah aturan respons, kami hanya mengizinkan koneksi ESTABLISHED (dan bukan koneksi BARU).

Contoh 2:Izinkan koneksi HTTP masuk

Ini untuk memungkinkan koneksi HTTP dari luar ke server Anda. yaitu Anda dapat melihat situs web Anda berjalan di server dari luar.

Sama seperti aturan masuk SSH di atas, ini juga melibatkan dua langkah. Pertama, kita perlu mengizinkan koneksi HTTP baru yang masuk. Setelah koneksi HTTP masuk diizinkan, kita perlu mengizinkan respons kembali untuk koneksi HTTP masuk itu.

Pertama, Izinkan permintaan koneksi HTTP masuk, seperti yang ditunjukkan di bawah ini.

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Selanjutnya, Izinkan respons koneksi HTTP keluar (khusus ESTABLISHED) (untuk permintaan koneksi SSH masuk yang sesuai).

iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Catatan:Dalam aturan permintaan dan respons HTTP di atas, semuanya sama dengan contoh SSH kecuali nomor port.

Izinkan Koneksi Keluar

Jika kebijakan default adalah DROP untuk rantai INPUT dan OUTPUT, untuk setiap aturan firewall keluar, Anda perlu menentukan dua aturan berikut.

  1. Aturan permintaan:Ini adalah permintaan yang keluar dari server ke luar untuk koneksi keluar.
  2. Aturan respons:Ini untuk respons yang datang kembali dari luar ke server (untuk permintaan keluar yang sesuai).

Contoh 3:Izinkan koneksi SSH keluar

Ini untuk memungkinkan koneksi SSH dari server Anda ke luar. yaitu Anda dapat ssh ke server luar dari server Anda.

Ini melibatkan dua langkah. Pertama, kita perlu mengizinkan koneksi SSH baru yang keluar. Setelah koneksi ssh keluar diizinkan, kita juga perlu mengizinkan respons kembali untuk koneksi ssh keluar tersebut.

Pertama, Izinkan permintaan koneksi SSH keluar, seperti yang ditunjukkan di bawah ini.

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

Pada contoh di atas:

  • iptables -A OUTPUT:Menambahkan aturan baru ke rantai OUTPUT. Untuk permintaan koneksi keluar, ini harus selalu OUTPUT.
  • -o eth0:Ini merujuk pada antarmuka keluaran. Untuk koneksi keluar, ini harus selalu '-o'.
  • -p tcp:Menunjukkan bahwa ini untuk protokol TCP.
  • –dport 22:Ini merujuk ke port tujuan untuk koneksi keluar.
  • -m state:Ini menunjukkan bahwa modul pencocokan "status" digunakan.
  • –status BARU, DIDIRIKAN:Opsi untuk modul pencocokan “status”. Dalam contoh ini, hanya status BARU dan ESTABLISHED yang diizinkan. Pertama kali ketika permintaan koneksi SSH dimulai dari server ke luar, status BARU digunakan. Status ESTABLISHED digunakan untuk semua permintaan lebih lanjut dari server ke luar.

Selanjutnya, Izinkan respons koneksi SSH keluar (khusus ESTABLISHED) (untuk permintaan koneksi SSH masuk yang sesuai).

iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Pada contoh di atas:

  • iptables -A INPUT:Menambahkan aturan baru ke rantai INPUT. Karena ini untuk aturan respons (untuk permintaan keluar yang sesuai) yang datang dari luar ke server, ini harus menjadi INPUT.
  • -i eth0:Ini merujuk pada antarmuka input. Untuk koneksi masuk, ini harus selalu '-i'.
  • -p tcp:Menunjukkan bahwa ini untuk protokol TCP.
  • –sport 22:Ini mengacu pada port sumber untuk koneksi masuk. Karena permintaan keluar (dari aturan sebelumnya) masuk ke port "tujuan", respons yang masuk akan datang dari port "sumber".
  • -m state:Ini menunjukkan bahwa modul pencocokan "status" digunakan.
  • –status ESTABLISHED:Karena ini adalah aturan respons, kami hanya mengizinkan koneksi ESTABLISHED (dan bukan koneksi BARU).

Menggabungkan semuanya

Buat skrip shell rules.sh yang melakukan hal berikut:

  1. Hapus semua aturan yang ada
  2. Setel kebijakan rantai default
  3. Izinkan SSH masuk
  4. Izinkan HTTP masuk
  5. Izinkan SSH keluar

Pertama, buat rules.sh

$ vi rules.sh
# 1. Delete all existing rules
iptables -F

# 2. Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# 3. Allow incoming SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 4. Allow incoming HTTP
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# 5. Allow outgoing SSH
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Selanjutnya, jalankan rules.sh dan lihat aturannya.

# chmod u+x rules.sh

# ./rules.sh

# iptables -L
Chain INPUT (policy DROP)
target     prot opt source      destination
ACCEPT     tcp  --  anywhere    anywhere      tcp dpt:ssh state NEW,ESTABLISHED
ACCEPT     tcp  --  anywhere    anywhere      tcp dpt:http state NEW,ESTABLISHED
ACCEPT     tcp  --  anywhere    anywhere      tcp spt:ssh state ESTABLISHED 

Chain FORWARD (policy DROP)
target     prot opt source      destination         

Chain OUTPUT (policy DROP)
target     prot opt source      destination
ACCEPT     tcp  --  anywhere    anywhere      tcp spt:ssh state ESTABLISHED
ACCEPT     tcp  --  anywhere    anywhere      tcp spt:http state ESTABLISHED
ACCEPT     tcp  --  anywhere    anywhere      tcp dpt:ssh state NEW,ESTABLISHED

Dengan menggunakan ini sebagai dasar, Anda harus dapat menulis aturan firewall iptables masuk dan keluar Anda sendiri. Ada banyak lagi untuk dibahas di IPTables. Tetap disini!

Artikel sebelumnya dalam seri iptables:

  • Tutorial Firewall Linux:Tabel IPTables, Rantai, Dasar Aturan
  • IPTables Flush:Hapus / Hapus Semua Aturan Di RedHat dan CentOS Linux
  • Linux IPTables:Cara Menambahkan Aturan Firewall (Dengan Contoh Izinkan SSH)

Linux
  1. Perintah Sed Linux:Penggunaan dan Contoh

  2. Tutorial Perintah Linux nice and renice (7 Contoh)

  3. Perintah Linux - Gambaran Umum dan Contoh

  1. Linux – Perutean Melalui Iptables?

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

  3. 25 Contoh Aturan IPTables Linux yang Paling Sering Digunakan

  1. Cara:Linux Umum – IPTables secara Umum

  2. 11 Perintah "ssh" dan "scp" yang berguna di Linux

  3. Batasi bandwidth dan latensi masuk dan keluar di linux