GNU/Linux >> Belajar Linux >  >> Linux

Amankan jaringan Linux Anda dengan firewall-cmd

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.


Linux
  1. Cara mengamankan layanan email Linux Anda dengan SSL/TLS

  2. Buat Kembar Jahat Jaringan Anda Dengan Fluxion di Kali Linux

  3. Memecahkan masalah jaringan Anda dengan tcpdump

  1. Memulai NetworkManager di Linux

  2. Lihat koneksi jaringan server Linux Anda dengan netstat

  3. Memeriksa Koneksi Jaringan Anda di Linux

  1. Amankan wadah Anda dengan SELinux

  2. Amankan Server Linux Anda Dengan Fail2Ban [Panduan Pemula]

  3. 6 Alat Sumber Terbuka yang Harus Dimiliki untuk Mengamankan Server Linux Anda