Cara Setting Firewall dengan FirewallD di CentOS 7
FirewallD adalah perangkat lunak untuk mengelola firewall di Linux yang mendukung fitur zones (zona jaringan) untuk menentukan tingkat kepercayaan koneksi.
Konsep FirewallD
FirewallD menggunakan zones dan services, dibandingkan dengan iptables yang menggunakan chain dan rules. Berdasarkan pada zones dan services, kita dapat mengontrol koneksi jaringan apa yang diizinkan dan tidak diizinkan masuk atau keluar dari sistem.
FirewallD Zones
Zones adalah kumpulan aturan yang telah ditetapkan, koneksi jaringan apa yang harusnya diizinkan berdasarkan tingkat kepercayaan pada jaringan yang terhubung ke sistem. Kita dapat menetapkan nama interface jaringan dan sumber jaringan ke dalam zones.
Di bawah ini zones yang tersedia pada FirewallD yang disusun berdasarkan tingkat kepercayaan dari tidak terpercaya ke terpercaya.
- drop: Semua koneksi jaringan yang masuk didrop tanpa adanya notifikasi atau pesan error. Hanya koneksi jaringan yang keluar dari sistem yang diizinkan.
- block: Semua koneksi jaringan yang masuk direject dengan pesan icmp-host-prohibited untuk IPv4 dan icmp6-adm-prohibited untuk IPv6. Hanya koneksi jaringan yang keluar yang diizinkan.
- public: Jaringan publik, jaringan yang tidak bisa dipercaya. Kita dapat memilih koneksi jaringan apa yang diizinkan.
- external: Jaringan eksternal, jika kita menggunakan Linux sebagai gateway atau router. Dikonfigurasi sebagai NAT masquerading. Hanya trafik yang dipilih yang diizinkan.
- internal: Digunakan pada jaringan internal, saat Linux berfungsi sebagai gateway atau router. Sistem lain pada jaringan internal secara umum dapat dipercaya, hanya koneksi jaringan yang dipilih yang diizinkan.
- dmz: Demilitarized zone, jika kita ingin memberikan akses terhadap services ke jaringan publik. Hanya koneksi jaringan yang dipilih saja yang diizinkan.
- work: Zona yang diperuntukkan jaringan internal kantor. Semua sistem dalam jaringan kantor dapat dipercaya, hanya koneksi jaringan yang dipilih yang diizinkan.
- home: Zona yang diperuntukkan jaringan internal rumah. Semua sistem dalam jaringan kantor dapat dipercaya, hanya koneksi jaringan yang dipilih yang diizinkan.
- trusted: Zona yang paling terbuka, semua sistem pada jaringan dipercaya, dan semua koneksi jaringan diizinkan.
Install FirewallD
Secara default FirewallD sudah terinstall di CentOS 7, tetapi jika belum terinstall jalankan perintah di bawah ini untuk install.
1 | yum install firewalld |
Aktifkan service FirewallD pada saat boot lalu jalankan
1 2 3 | systemctl start firewalld systemctl enable firewalld systemctl status firewalld |
Mengecek status firewall
1 | firewall-cmd --state |
Hasilnya adalah running atau not running.
Konfigurasi Zones
Menampilkan semua zones
1 | firewall-cmd --get-zones |
Hasilnya
1 | block dmz drop external home internal public trusted work |
Membuat zone baru
1 | firewall-cmd --permanent --new-zone=namazone |
Menghapus zone
1 | firewall-cmd --permanent --delete-zone=namazone |
Melihat seluruh zone beserta konfigurasinya
1 | firewall-cmd --list-all-zones |
Hasilnya
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | ... external target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules: trusted (active) target: ACCEPT icmp-block-inversion: no interfaces: eth0 sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: work target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: |
Hanya menampilkan konfigurasi satu zone, misalnya zone public.
1 | firewall-cmd --zone=public --list-all |
Menampilan default zone
1 | firewall-cmd --get-default-zone |
Hasil dari CentOS yang saya gunakan adalah trusted.
Mengganti default zone
1 | firewall-cmd --set-default-zone=public |
Menampilkan zones yang aktif
1 | firewall-cmd --get-active-zone |
Hasilnya
1 2 | public interfaces: eth0 |
Zone yang aktif bisa lebih dari satu zone, setiap zone minimal ada satu interface jaringan.
1 2 3 4 | home interfaces: eth0 public interfaces: eth1 |
Menambahkan interface pada zone
1 | firewall-cmd --zone=public --add-interface=eth0 |
Mengubah interface pada zone
1 | firewall-cmd --zone=public --change-interface=eth1 |
Menampilkan zone dari interface
1 | firewall-cmd --get-zone-of-interface=eth0 |
Konfigurasi Services
Menampilkan nama services yang didukung oleh FirewallD
1 | firewall-cmd --get-services |
Hasilnya
1 | RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server |
Menampilkan services pada zone
1 | firewall-cmd --zone=public --list-services |
Hasilnya
1 | ssh dhcpv6-client |
Menambahkan service pada zone
1 | firewall-cmd --zone=public --add-service=http |
Tambahkan opsi –permanent agar service yang sudah ditambahkan tetap ada setelah reboot
1 | firewall-cmd --permanent --zone=public --add-service=http |
Reload konfigurasi firewall setelah melakukan konfigurasi, tapi jika tanpa opsi –permanent konfigurasi itu akan hilang setelah reload.
1 | firewall-cmd --reload |
Menghapus service
1 | firewall-cmd --zone=public --remove-service=http |
Jika nama services yang ingin dimasukkan pada zone tidak tersedia secara default, kita dapat menggunakan nomor port dari service tersebut atau membuat nama service baru.
File deskripsi services berada di direktori /usr/lib/firewalld/services/ dengan ektensi file xml.
Membuka isi file ssh.xml
1 | nano /usr/lib/firewalld/services/ssh.xml |
Isinya
1 2 3 4 5 6 | <?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/> </service> |
Membuat deskripsi service baru dengan mengcopy file service.xml yang sudah ada
1 | cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
Contoh isinya
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="utf-8"?> <service> <short>Example Service</short> <description>This is just an example service. It probably shouldn't be used on a real system.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
Reload dan cek services
1 2 | firewall-cmd --reload firewall-cmd --get-services |
Konfigurasi Port
Menampilkan port pada satu zone
1 | firewall-cmd --zone=public --list-ports |
Menambahkan port dari protokol TCP atau UDP
1 2 | firewall-cmd --zone=public --add-port=5000/tcp firewall-cmd --zone=public --add-port=5000/udp |
Menambahkan range port
1 | firewall-cmd --zone=public --add-port=4990-4999/udp |
Menghapus port
1 | firewall-cmd --zone=public --remove-port=5000/tcp |
Port Forwarding
Port Forwarding adalah mengalihkan koneksi dari satu port ke port lainnya, misalnya client mengakses port 80 kemudian diteruskan ke port 12345.
1 | firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=12345 |
Forward port ke server lain
Aktifkan masquerade pada zone, lalu tambahkan rule forward.
1 2 | firewall-cmd --zone=public --add-masquerade firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9 |
Jika ingin menghapus masquerade ubah opsi –add-masquerade menjadi –remove-masquerade
Rich Rules
Rich Rules adalah rule firewall yang lebih luas tidak hanya memasukkan nama services saja tetapi juga IP address.
Menampilkan rich-rules
1 | firewall-cmd --list-rich-rules |
Izinkan koneksi jaringan dari IP 192.168.0.14
1 | firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=192.168.0.14 accept' |
Tolak koneksi jaringan dari IP 192.168.1.10 pada port 22
1 | firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=192.168.1.10 port port=22 protocol=tcp reject' |
Izinkan koneksi TCP dari IP 10.1.0.3 untuk mengakses port 80 yang kemudian diteruskan ke port 6532
1 | firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532' |
Izinkan koneksi TCP pada port 80 yang diteruskan ke IP 172.31.4.2 port 8080 (Masquerade harus aktif pada zone)
1 | firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2' |
Izinkan network 192.168.0.0/24 mengakses https
1 | firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=192.168.0.0/24 service name=https accept' |
Tambahkan opsi –permanent agar rule tetap ada setelah reload dan reboot sistem. Jika ingin menghapus rich rule, ganti opsi –add-rich-rule menjadi –remove-rich-rule.
IP Set
IP Set adalah sekumpulan IP address yang digunakan sebagai source rule firewall.
Menampilkan IP Set
1 | firewall-cmd --get-ipsets |
Membuat IP Set baru dengan nama blacklist
1 2 | firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip firewall-cmd --reload |
Menambah IP address pada IP Set blacklist
1 2 | firewall-cmd --ipset=blacklist --add-entry=192.168.1.11 firewall-cmd --ipset=blacklist --add-entry=192.168.1.12 |
Menghapus IP address dari IP Set
1 | firewall-cmd --ipset=blacklist --remove-entry=192.168.1.12 |
Menampilkan info IP Set
1 | firewall-cmd --info-ipset=blacklist |
Menampilkan IP address dari IP Set
1 | firewall-cmd --ipset=blacklist --get-entries |
IP Set yang sudah dibuat kemudian dimasukkan ke rule sebagai source
1 | firewall-cmd --add-rich-rule='rule source ipset=blacklist drop' |
Menghapus IP Set
1 2 | firewall-cmd --permanent --delete-ipset=blacklist firewall-cmd --reload |
IP Set juga dapat berisi 2 atau lebih network yang berbeda
1 2 3 4 | firewall-cmd --permanent --new-ipset=netlist --type=hash:ip firewall-cmd --reload firewall-cmd --ipset=netlist --add-entry=192.168.1.0/24 firewall-cmd --ipset=netlist --add-entry=192.168.2.0/24 |
selamat mencoba 🙂
Assalamu Alaikum. Mohon petunjuknya pak. apa penyebab internet tidak bisa konek di client vpn jika firewalld saya aktifkan. dan mohon solusinya. terima kasih.
buka port vpn di firewall
Saya sudah buka services openvpn. apa saya harus buka lagi di bagian port?
Sy sudah tambahkan serrvice openvpn di public dan di port sy tambhakan 1194. tp teap blm konek