Firewall adalah bagian penting dari keamanan jaringan, jadi penting bagi sysadmin untuk mengetahui cara kerjanya. Jika Anda memahami firewall, Anda dapat menjaga keamanan jaringan dengan membuat pilihan cerdas tentang lalu lintas yang Anda izinkan masuk dan keluar.
Karena "firewall" adalah nama yang sangat menarik, orang sering membayangkan pertempuran neon gaya Tron yang rumit terjadi di pinggiran jaringan, dengan paket data jahat yang dibakar untuk melindungi benteng tekno pengguna Anda. Pada kenyataannya, firewall hanyalah bagian dari perangkat lunak yang mengontrol lalu lintas jaringan masuk dan keluar.
Port
Firewall dapat mengatur lalu lintas ini dengan memantau port jaringan. Dalam dunia firewall, istilah port tidak merujuk ke koneksi fisik seperti port USB, VGA, atau HDMI. Untuk tujuan firewall, port adalah konstruksi buatan yang dibuat oleh sistem operasi untuk mewakili jalur untuk jenis data tertentu. Sistem ini bisa disebut apa saja, seperti "kontak", "koneksi", atau bahkan "penguin", tetapi pembuatnya menggunakan "port", dan itulah nama yang masih kami gunakan sampai sekarang. Intinya adalah, tidak ada yang istimewa dari port apa pun; mereka hanyalah cara untuk menentukan alamat tempat terjadinya transfer data.
Ada sejumlah port yang terkenal, tetapi ini pun hanya konvensi. Misalnya, Anda mungkin mengetahui bahwa lalu lintas HTTP terjadi pada port 80, lalu lintas HTTPS menggunakan port 443, FTP menggunakan port 21, dan SSH menggunakan port 22. Saat komputer Anda mengirimkan data ke komputer lain, ia menambahkan awalan ke data untuk menunjukkan mana port yang ingin diakses. Jika port di sisi penerima menerima data dengan protokol yang sama dengan data yang Anda kirim, maka data berhasil ditukar.
Anda dapat melihat proses ini beraksi dengan membuka situs web mana pun. Buka browser web dan navigasikan ke example.com:80
, yang menyebabkan komputer Anda mengirim permintaan HTTP ke port 80 komputer yang melayani situs web example.com. Anda menerima halaman web sebagai imbalannya. Namun, browser web tidak mengharuskan Anda memasukkan port yang ingin Anda akses setiap kali Anda menavigasi ke URL, karena diasumsikan bahwa lalu lintas HTTP mengakses port 80 atau 443.
Anda dapat menguji proses ini menggunakan browser web berbasis terminal:
$ curl --connect-timeout 3 "http://example.com:80" | head -n4
<!doctype html>
<html>
<head>
<title>Example Domain</title>
Menggunakan notasi yang sama, Anda dapat memaksa penolakan dengan menavigasi ke situs web menggunakan port yang tidak standar. Arahkan ke port arbitrer, example.com:79
misalnya. Permintaan Anda untuk halaman web ditolak:
$ curl --connect-timeout 3 "http://example.com:79"
curl: (7) Failed to connect: Network is unreachable
Korelasi antara port dan protokol hanyalah konvensi yang disepakati bersama oleh grup standar, dan basis pengguna. Pengaturan ini dapat diubah pada masing-masing komputer. Faktanya, pada masa perintis komputasi, banyak orang merasa bahwa hanya dengan mengubah nomor port layanan populer akan meredakan serangan. Saat ini, serangan jauh lebih canggih. Tidak ada gunanya mengejutkan pemindai port otomatis dengan mengubah port mana yang didengarkan oleh layanan.
Sebagai gantinya, firewall mengatur aktivitas apa yang diizinkan pada port tertentu.
[ Unduhan gratis:Lembar contekan perintah Linux tingkat lanjut. ]
Antarmuka firewall-cmd
Infrastruktur Anda mungkin memiliki server di rak dengan satu-satunya tujuan menjalankan firewall, atau Anda mungkin memiliki firewall yang tertanam di router—atau modem—yang bertindak sebagai gerbang utama Anda ke internet. Anda mungkin juga memiliki firewall yang berjalan di workstation atau laptop pribadi Anda. Semua firewall ini memiliki antarmuka konfigurasi sendiri. Artikel ini membahas firewall-cmd
perintah terminal ditemukan di sebagian besar distribusi Linux.
Firewall-cmd adalah alat front-end untuk mengelola firewalld
daemon, yang berinteraksi dengan kerangka netfilter kernel Linux. Tumpukan ini mungkin tidak ada pada modem tersemat yang umum di bisnis kecil hingga menengah, tetapi ada atau tersedia untuk semua distribusi Linux yang menggunakan systemd
.
Tanpa firewall aktif, firewall-cmd
tidak memiliki apa pun untuk dikendalikan, jadi langkah pertama adalah memastikan bahwa firewalld
sedang berjalan:
$ sudo systemctl enable --now firewalld
Perintah ini memulai daemon firewall dan menyetelnya ke pemuatan otomatis saat reboot.
Blokir (hampir) semuanya
Saran umum saat mengonfigurasi firewall adalah memblokir semuanya terlebih dahulu, lalu buka port yang Anda tahu benar-benar Anda butuhkan. Itu berarti Anda harus tahu apa yang Anda butuhkan, dan terkadang mencari tahu itu adalah pekerjaan sore itu sendiri.
Jika organisasi Anda menjalankan DNS atau layanan caching DNS-nya sendiri, misalnya, maka Anda harus ingat untuk membuka blokir port (biasanya 53) yang menangani komunikasi DNS. Jika Anda mengandalkan SSH untuk mengkonfigurasi server Anda dari jarak jauh, maka Anda tidak boleh memblokir port tersebut. Anda harus memperhitungkan setiap layanan yang berjalan di infrastruktur Anda, dan Anda harus memahami apakah layanan itu hanya untuk internal atau apakah perlu berinteraksi dengan dunia luar.
Dalam kasus perangkat lunak berpemilik, mungkin ada panggilan ke dunia luar yang bahkan tidak Anda sadari. Jika beberapa aplikasi bereaksi buruk terhadap firewall ketat yang baru-baru ini diberlakukan, Anda mungkin harus merekayasa balik (atau berbicara dengan saluran dukungan aplikasi) untuk menemukan jenis lalu lintas apa yang coba dibuatnya, dan mengapa. Di dunia open source, masalah ini kurang umum, tetapi tidak di luar kemungkinan, terutama dalam kasus tumpukan perangkat lunak yang kompleks (misalnya, saat ini bahkan pemutar media membuat panggilan ke internet, jika hanya untuk mengambil sampul album atau daftar lagu).
Firewall-cmd menggunakan zona sebagai preset, memberi Anda default waras untuk dipilih. Melakukan hal ini akan menyelamatkan Anda dari keharusan membangun firewall dari awal. Zona berlaku untuk antarmuka jaringan, jadi pada server dengan dua antarmuka ethernet, Anda mungkin memiliki satu zona yang mengatur satu antarmuka ethernet, dan zona yang berbeda mengatur yang lain.
Sebaiknya luangkan waktu untuk membiasakan diri dengan zona yang disediakan di sistem Anda. Untuk melihat semua zona yang tersedia, gunakan:
$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Untuk melihat apa yang tidak diblokir di zona tertentu:
$ sudo firewall-cmd --zone work --list-all
work
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Gunakan salah satu zona yang ada sebagai titik awal untuk aturan firewall Anda sendiri, atau buat sendiri.
Buat zona
Untuk membuat zona baru, gunakan --new-zone
pilihan.
Semua firewall-cmd
tindakan tetap ada sampai firewall atau komputer yang menjalankannya restart. Apa pun yang Anda ingin permanen harus disertai dengan --permanent
bendera.
Misalnya, buat zona permanen baru bernama corp
, lalu muat ulang aturan firewall sehingga zona baru Anda aktif:
$ sudo firewall-cmd --new-zone corp --permanent
success
$ sudo firewall-cmd --reload
Sebelum menetapkan antarmuka jaringan apa pun ke zona baru ini, tambahkan ssh
layanan sehingga Anda dapat mengaksesnya dari jarak jauh. Gunakan --permanent
opsi untuk membuat penambahan ini tetap ada di seluruh reboot:
$ sudo firewall-cmd --zone corp --add-service ssh --permanent
Zona baru Anda, bernama corp
, sekarang aktif, menolak semua kecuali lalu lintas SSH, dan tidak ditetapkan ke antarmuka jaringan tertentu. Untuk membuat corp
zona aktif dan default untuk antarmuka jaringan yang ingin Anda lindungi (ens3
dalam contoh ini), gunakan --change-interface
pilihan:
$ firewall-cmd --change-interface ens3 \
--zone corp --permanent
The interface is under control of NetworkManager, setting zone to 'corp'.
success
Dengan membuat corp
zona default, semua perintah yang akan datang diterapkan ke corp
kecuali --zone
pilihan menentukan zona yang berbeda. Apakah Anda ingin menyetel corp
sebagai default tergantung pada apakah Anda berencana untuk zona ini sebagai zona utama baru Anda. Jika demikian, berikut ini yang berhasil:
$ sudo firewall-cmd --set-default corp
Untuk melihat zona yang saat ini ditetapkan untuk setiap antarmuka, gunakan --get-active-zones
pilihan:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens3
work
interfaces: ens4
Menambahkan dan menghapus layanan
Sekarang setelah Anda memblokir semuanya kecuali SSH, Anda dapat membuka port yang diandalkan jaringan Anda. Cara cepat dan mudah untuk mengizinkan lalu lintas melalui firewall Anda adalah dengan menambahkan layanan yang telah ditentukan sebelumnya.
Daftar layanan standar yang tersedia sangat luas. Untuk melihatnya, gunakan:
$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amqp
amqps apcupsd audit bacula bacula-client
bgp bitcoin bitcoin-rpc bitcoin-testnet ceph
cockpit dhcp dhcpv6 dhcpv6-client distcc dns
[...]
Asumsikan Anda perlu menjalankan server web. Pertama, Anda akan menginstal server web yang ingin Anda gunakan (httpd
paket di RHEL atau Fedora, apache2
di Ubuntu dan Debian). Untuk contoh ini, kami akan menggunakan httpd
:
$ sudo dnf install httpd
$ sudo systemctl --enable --now httpd
Kemudian, uji server web Anda secara lokal:
$ curl --silent localhost:80 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
Selanjutnya, coba sambungkan ke server web Anda dari browser eksternal. Sambungan gagal, menunjukkan bahwa firewall efektif:
$ curl --connect-timeout 3 192.168.122.206
curl: (28) Connection timed out after 3001 milliseconds
Membuka blokir layanan
Untuk mengizinkan lalu lintas HTTP melalui firewall Anda, tambahkan http
layanan:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
Kemudian, uji dari sumber luar:
$ curl --silent 192.168.122.206 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
Sekarang setelah Anda mengetahui cara menambahkan layanan, menghapusnya cukup intuitif:
$ sudo firewall-cmd --remove-service http --permanent
$ sudo firewall-cmd --reload
Menambahkan dan menghapus port
Terkadang, layanan yang telah ditentukan sebelumnya tidak ada, atau mengasumsikan default yang tidak cocok dengan jaringan Anda. Alih-alih menambahkan layanan, Anda dapat menambahkan nomor port dan jenis protokol secara langsung dengan --add-port
.
Misalnya, jika Anda perlu menambahkan port non-standar 1622 untuk SSH ke zona kustom Anda (jika zona kustom Anda bukan zona default untuk perintah Anda, tambahkan --zone
pilihan):
$ sudo firewall-cmd --add-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
Untuk menghapus port tersebut, gunakan --remove-port
:
$ sudo firewall-cmd --remove-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
Dinding api
Masih banyak lagi yang dapat Anda lakukan dengan firewall-cmd
, seperti menentukan layanan Anda sendiri, pemblokiran ICMP, dan menentukan sumber lalu lintas masuk yang diizinkan. Cara terbaik untuk belajar adalah bereksperimen, jadi instal Red Hat Enterprise Linux atau Fedora di Kotak GNOME, dan bereksperimenlah dengan membentuk lalu lintas melalui semua opsi firewall-cmd
menyediakan.