Firewall yang dikonfigurasi dengan benar adalah salah satu aspek terpenting dari keamanan sistem secara keseluruhan.

FirewallD adalah solusi firewall lengkap untuk mengelola sistem  aturan iptables dan menyediakan antarmuka D-Bus untuk mengoperasikannya. Dimulai dengan CentOS 7, FirewallD menggantikan iptables sebagai alat default manajemen firewall.

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara mengatur firewall dengan FirewallD pada sistem CentOS 7 dan menjelaskan konsep dasar FirewallD.

Prasyarat

Sebelum mulai dengan tutorial ini, pastikan Anda masuk ke server dengan hak akses sudo atau dengan user root. Jika belum memiliki pengguna sudo di sistem CentOS, Anda dapat membuatnya dengan mengikuti instruksi ini.

Konsep Dasar Firewalld

FirewallD menggunakan konsep zone (zona) dan services (layanan), alih-alih chain dan rules iptables. Berdasarkan zona dan layanan yang akan Anda konfigurasi, Anda dapat mengontrol lalu lintas apa yang diizinkan atau tidak diizinkan dari atau ke sistem.

FirewallD dapat dikonfigurasi dan dikelola menggunakan utilitas baris perintah firewall-cmd.

Firewalld Zones

Zona adalah seperangkat aturan yang ditentukan untuk menentukan lalu lintas apa yang harus diizinkan, kriteria ini berdasarkan tingkat kepercayaan pada jaringan yang terhubung dengan komputer.

Berikut adalah zona yang disediakan oleh FirewallD yang telah ditentukan sesuai dengan tingkat kepercayaan, tersedia zona dari tidak dipercaya hingga zona tepercaya:

  • drop: Semua koneksi yang masuk akan ditolak tanpa pemberitahuan. Hanya koneksi keluar yang diizinkan.
  • block: Semua koneksi yang masuk ditolak dengan pesanicmp-host-prohibited untuk IPv4 dan icmp6-adm-prohibited untuk IPv6n. Hanya koneksi keluar yang diizinkan.
  • public: Untuk digunakan di area publik yang tidak terpercaya. Anda tidak mempercayai komputer lain di jaringan, tetapi Anda dapat mengizinkan koneksi masuk yang dipilih.
  • external: Untuk digunakan pada jaringan eksternal dengan NAT diaktifkan ketika sistem Anda bertindak sebagai gateway atau router. Hanya koneksi masuk terpilih yang diizinkan.
  • internal: Untuk digunakan pada jaringan internal ketika sistem Anda bertindak sebagai gateway atau router. Sistem lain pada jaringan umumnya dipercaya. Hanya koneksi masuk terpilih yang diizinkan.
  • dmz: Digunakan untuk komputer yang terletak di zona demiliterisasi (demilitarized zone) Anda yang akan memiliki akses terbatas ke seluruh jaringan Anda. Hanya koneksi masuk terpilih yang diizinkan.
  • work: Digunakan untuk (umumnya) mesin di tempat kerja. Komputer lain di jaringan umumnya dipercaya. Hanya koneksi masuk terpilih yang diizinkan.
  • home: Digunakan untuk mesin di rumah Anda. Komputer lain di jaringan umumnya dipercaya. Hanya koneksi masuk terpilih yang diizinkan.
  • trusted: Semua koneksi jaringan diterima. Percayai semua komputer di jaringan.

Firewall services

Firewalld services adalah aturan yang telah ditentukan dan berlaku dalam suatu zone dan menentukan pengaturan yang diperlukan untuk memungkinkan lalu lintas masuk untuk layanan tertentu.

Pengaturan Runtime dan Permanen Firewalld

Firewalld menggunakan dua set konfigurasi yang terpisah, runtime dan konfigurasi permanen.

Konfigurasi runtime adalah konfigurasi yang sedang berjalan dan tidak persisten saat reboot. Ketika layanan Firewalld dimulai, ia memuat konfigurasi permanen yang menjadi konfigurasi runtime.

Secara default, ketika membuat perubahan pada konfigurasi Firewalld menggunakan utilitas firewall-cmd, perubahan diterapkan pada konfigurasi runtime, untuk membuat perubahan Anda permanen, maka kita perlu menggunakan flag --permanent.

Instal dan Aktifkan FirewallD

Pada bagian ini kita akan membahas cara instalasi dan mengaktifkan FirewallD di CentOS 7.

  1. Menginstal FirewallD

    Firewalld diinstal secara default pada CentOS 7, tetapi jika belum diinstal pada sistem Anda, gunakan perintah berikut untuk menginstal paket firewallD:

    sudo yum install firewalld
  2. Periksa status FirewallD

    Untuk mengaktifkan layanan FirewallD dan mengaktifkannya saat booting gunakan perintah :

    sudo firewall-cmd --state

    Jika baru saja menginstal atau tidak pernah diaktifkan sebelumnya, perintah akan mencetak output not running, sebaliknya jika sudah berjalan, maka Anda akan melihat output running.

  3. Mengaktifkan FirewallD

    Untuk memulai layanan FirewallD dan mengaktifkannya pada saat boot:

    sudo systemctl start firewalld
    sudo systemctl enable firewalld

Tata Kelola Firewalld Zones

Setelah mengaktifkan layanan FirewallD untuk pertama kalinya, zona public ditetapkan sebagai zona default. Anda dapat melihat zona default dengan mengetik:

sudo firewall-cmd --get-default-zone
public

Untuk mendapatkan daftar semua zona yang tersedia, ketik:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Secara default, semua antarmuka jaringan diberikan zona default. Untuk memeriksa zona apa yang digunakan oleh antarmuka jaringan Anda, gunakan perintah berikut :

sudo firewall-cmd --get-active-zones
public
  interfaces: eth0 eth1

Output di atas memberitahu kita bahwa kedua antarmuka eth0 dan eth1 ditugaskan ke zona publik.

Anda dapat mencetak pengaturan konfigurasi zona dengan:

sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Dari output di atas, kita dapat melihat bahwa zona publik aktif dan ditetapkan sebagai default, zona publik tersebut digunakan oleh antarmuka eth0 dan eth1. Juga koneksi yang terkait dengan klien DHCP dan SSH diperbolehkan.

Jika Anda ingin memeriksa konfigurasi semua tipe zona yang tersedia:

sudo firewall-cmd --list-all-zones

Perintah akan mencetak daftar besar pengaturan semua zona yang tersedia.

Mengubah Interface Zone

Anda dapat dengan mudah mengubah Interface Zone dengan menggunakan flag --zone menggunakan kombinasi dengan flag --change-interface. Perintah berikut akan menetapkan antarmuka eth1 ke work zone :

sudo firewall-cmd --zone=work --change-interface=eth1

Verifikasi perubahan dengan mengetik :

sudo firewall-cmd --get-active-zones
work
  interfaces: eth1
public
  interfaces: eth0

Mengubah Zona Default

Untuk mengubah zona default, gunakan flag --set-default-zone diikuti dengan nama zona yang ingin Anda jadikan default. Misalnya untuk mengubah zona default ke home, maka jalankan perintah berikut:

sudo firewall-cmd --set-default-zone=home

Verifikasi perubahan dengan:

sudo firewall-cmd --get-default-zone
home

Cara Membuka Port atau Service di Linux

Dengan FirewallD, Anda dapat mengizinkan lalu lintas untuk port tertentu berdasarkan aturan yang telah ditentukan yang disebut services.

Untuk mendapatkan daftar semua layanan standar yang tersedia, ketik:

sudo firewall-cmd --get-services

firewalld services

Anda dapat menemukan informasi lebih lanjut tentang setiap layanan dengan membuka file .xml terkait yang ada di direktori /usr/lib/firewalld/services. Misalnya, layanan HTTP didefinisikan sebagai berikut :

nano /usr/lib/firewalld/services/http.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

Untuk mengizinkan lalu lintas HTTP yang masuk (port 80) untuk antarmuka di public zone, hanya untuk sesi saat ini (konfigurasi runtime) ketik:

sudo firewall-cmd --zone=public --add-service=http

Jika Anda memodifikasi zona default, Anda dapat menghilangkan flag --zone.

Untuk memverifikasi bahwa layanan telah ditambahkan dengan sukses, gunakan flag --list-service:

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

Jika Anda ingin menjaga agar port 80 tetap terbuka setelah reboot, Anda harus mengetikkan perintah yang sama sekali lagi tetapi kali ini dengan flag --permanent:

sudo firewall-cmd --permanent --zone=public --add-service=http

Gunakan --list-service bersama dengan flag --permanent untuk memverifikasi perubahan Anda:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

Sintaks untuk menghapus layanan sama dengan ketika menambahkan layanan. Cukup gunakan --remove-service alih-alih flag--add-service:

sudo firewall-cmd --zone=public --remove-service=http --permanent

Perintah di atas akan menghapus layanan http dari konfigurasi permanen zona publik.

Mari kita lihat contoh kasus, Misalkan Anda menjalankan aplikasi seperti Plex Media Server, aplikasi tersebut tidak tersedia layanan default yang sesuai. Dalam situasi seperti ini, Anda memiliki dua opsi. Anda dapat membuka port yang sesuai atau mendefinisikan layanan FirewallD baru.

Misalnya, Server Plex listens pada port 32400 dan menggunakan TCP, untuk membuka port di zona publik untuk sesi saat ini menggunakan flag --add-port= :

sudo firewall-cmd --zone=public --add-port=32400/tcp

Protokol dapat berupa tcp atau udp.

Untuk memverifikasi bahwa port telah ditambahkan dan berhasil gunakan flag --list-ports:

sudo firewall-cmd --zone=public --list-ports
32400/tcp

Agar port 32400 tetap terbuka setelah reboot, tambahkan aturan agar menjadi permanen dengan menjalankan perintah yang sama, namun dengan menambahkan flag --permanent.

Sintaks untuk menghapus port sama dengan ketika menambahkan port. Cukup gunakan --remove-port alih-alih flag --add-port.

sudo firewall-cmd --zone=public --remove-port=32400/tcp

Membuat Layanan FirewallD baru

Seperti yang telah kami sebutkan, layanan default disimpan di direktori /usr/lib/firewalld/services. Cara termudah untuk membuat layanan baru adalah menyalin file services yang ada ke direktori /etc/firewalld/services

Misalnya, untuk membuat definisi layanan untuk Server Media Plex kita dapat menggunakan file layanan HTTP:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

Buka file plexmediaserver.xml yang baru dibuat dan ubah bagian nama untuk short dan description untuk layanan di dalam tag <short> dan <description>. Tag yang paling penting yang perlu Anda ubah adalah tag port yang menentukan nomor port dan protokol yang ingin Anda buka.

Dalam contoh berikut, kami membuka port 1900 UDP dan 32400 TCP.

sudo nano /etc/firewalld/services/plexmediaserver.xml
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>

Simpan file dan reload layanan FirewallD:

sudo firewall-cmd --reload

Anda sekarang dapat menggunakan layanan plexmediaserver di zona Anda sama dengan layanan lainnya.

Cara Forwarding Port dengan Firewalld

Untuk forward (meneruskan) lalu lintas dari satu port ke port atau alamat lain, pertama-tama aktifkan penyamaran untuk zona yang diinginkan menggunakan switch--add-masquerade. Misalnya untuk mengaktifkan masquerading (penyamaran) untuk tipe zona external :

sudo firewall-cmd --zone=external --add-masquerade
  • Meneruskan lalu lintas ke port yang berbeda di server yang sama
    Dalam contoh berikut ini, kita akan meneruskan lalu lintas dari port 80 ke port 8080 di server yang sama:

    sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
  • Meneruskan lalu lintas ke server lain
    Dalam contoh berikut ini, kami meneruskan lalu lintas dari port 80 ke port 80 di server dengan IP 10.10.10.2:

    sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
  • Meneruskan lalu lintas ke server lain di port yang berbeda
    Dalam contoh berikut ini kami meneruskan lalu lintas dari port 80 ke port 8080 pada server dengan IP 10.10.10.2:

    sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

    Jika Anda ingin membuat perubahan forwarding menjadi permanen, tambahkan saja flag --permanent.

Membuat Ruleset dengan FirewallD

Dalam contoh berikut, kami akan menunjukkan cara mengkonfigurasi firewall bagi Anda yang menjalankan web server. Kami mengasumsikan server Anda hanya memiliki satu antarmuka eth0, dan Anda ingin mengizinkan lalu lintas masuk hanya pada port SSH, HTTP, dan HTTPS.

  1. Ubah zona default ke dmz
    kita akan menggunakan dmz (demilitarized) zone karena secara default hanya mengizinkan lalu lintas SSH. Untuk mengubah zona default ke dmz dan untuk menetapkannya ke antarmuka eth0 jalankan perintah berikut:

    sudo firewall-cmd --set-default-zone=dmz
    sudo firewall-cmd --zone=dmz --add-interface=eth0
  2. Membuka ports untuk HTTP dan HTTPS  :
    Untuk membuka port HTTP dan HTTPS, tambahkan aturan layanan menjadi permanen ke zona dmz:

    sudo firewall-cmd --permanent --zone=dmz --add-service=http
    sudo firewall-cmd --permanent --zone=dmz --add-service=https

    Buat perubahan segera dengan memuat ulang firewall:

    sudo firewall-cmd --reload
  3. Verifikasi perubahan
    Untuk memeriksa jenis pengaturan konfigurasi zona dmz:

    sudo firewall-cmd --zone=dmz --list-all
    dmz (active)
      target: default
      icmp-block-inversion: no
      interfaces: eth0
      sources:
      services: ssh http https
      ports:
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

    Output di atas memberitahu kita bahwa dmz adalah zona default, dan pengaturan diterapkan ke antarmuka eth0 , dan port ssh (22) http (80) dan port https (443) terbuka.

Kesimpulan

Anda telah belajar cara mengonfigurasi dan mengelola layanan FirewallD pada sistem CentOS Anda.

Pastikan untuk mengizinkan semua koneksi yang masuk yang diperlukan untuk memfungsikan sistem Anda, sambil membatasi semua koneksi yang tidak perlu.