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.
- Hapus semua aturan yang ada:“iptables -F”
- Hanya izinkan SSH yang masuk:“iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT”
- 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.
- Aturan permintaan:Ini adalah permintaan yang datang dari klien ke server untuk koneksi masuk.
- 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.
- Aturan permintaan:Ini adalah permintaan yang keluar dari server ke luar untuk koneksi keluar.
- 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:
- Hapus semua aturan yang ada
- Setel kebijakan rantai default
- Izinkan SSH masuk
- Izinkan HTTP masuk
- 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)