Mengkonfigurasi firewall Linux menggunakan iptables di CentOS / RHEL 7

Pada artikel ini, kami akan menunjukkan cara mengelola firewall Linux menggunakan klasik iptables bukannya firewalld di CentOS / RHEL 7 untuk memfilter lalu lintas masuk dan keluar. Artikel ini menjelaskan cara mengkonfigurasi iptables pada CentOS 7 untuk memfilter lalu lintas masuk, menggunakan contoh server virtual berbasis cloud yang digunakan dari awal myserver01, dapat diakses dari internet.

Konten:

  • Menonaktifkan firewalld di CentOS 7
  • Sintaks dan aturan iptables di CentOS / Red Hat
  • Membuat aturan penyaringan lalu lintas di iptables
  • Aktifkan log iptables
  • Menyimpan dan mengembalikan aturan penyaringan iptables

Menonaktifkan firewalld di CentOS 7

CentOS 7 menggunakan layanan sistem untuk mengontrol firewall secara default firewalld. Ini menyediakan antarmuka sendiri, tetapi pada akhirnya juga berfungsi melalui utilitas iptables. Pada saat yang sama, firewall harus dikontrol baik melalui firewalld atau langsung melalui iptables.

firewalld bukan pengganti, tetapi pembungkus di sekitar iptables, Anda dapat menggunakan darinya apa yang Anda sukai, atau lebih cocok dalam kondisi tertentu. iptables lebih universal, ini adalah alat dasar, tetapi sedikit lebih sulit untuk dikuasai. firewalld menyediakan antarmuka yang lebih sederhana, tetapi, misalnya, CentOS 6 tidak dapat menggunakannya, dan untuk distribusi lain Anda harus memiliki paket instalasi yang diperlukan. Selain itu, jika Anda menggunakan aplikasi yang melakukan pengaturan di firewall, mereka harus kompatibel dengan firewalld (contoh aplikasi tersebut adalah buruh pelabuhan, fail2ban).

Periksa status firewalld dan nonaktifkan.

status sistemctl firewalld

Dalam output perintah, area dilingkari merah dengan kata diaktifkan, berarti startup dihidupkan, dan area dilingkari kuning dengan kata aktif, berarti layanan sedang berjalan.

Kami menghentikan layanan dan mematikan pengisian otomatis untuk itu:

systemctl stop firewalld
menonaktifkan systemctl firewalld

Memeriksa ulang status:

Sekarang output dari perintah ditampilkan dinonaktifkan untuk autoloading (mati), dan tidak aktif berarti layanan tidak aktif.

Sintaks dan aturan iptables di CentOS / Red Hat

Iptables - ini adalah utilitas yang mengonfigurasi aturan firewall di Linux.

Iptables mengelompokkan aturan firewall ke dalam tabel, yang utamanya adalah:

  • Meja filter - digunakan untuk menyaring lalu lintas, yaitu memungkinkan dan menolak koneksi
  • Meja nat - digunakan untuk terjemahan alamat (NAT)
  • Meja mangle - modifikasi lain dari header paket ip.

Pertama, periksa apakah iptables diinstal pada sistem (harusnya default):

rpm -q iptables

Output dari perintah menunjukkan bahwa versi iptables yang diinstal saat ini adalah 1.4.21.

Bekerja dengan iptables pada baris perintah membutuhkan hak akses root, jadi kami akan terus bekerja sebagai root.

Untuk menampilkan aturan saat ini, jalankan perintah:

iptables [-t tabel] -L [rantai] [parameter]

Catatan: jika Anda tidak menentukan nama tabel saat menjalankan perintah, tabel digunakan secara default filter.

Misalnya, hasil dari suatu perintah iptables -L, ketika belum ada aturan yang dibuat dalam tabel:

Pertimbangkan output dari perintah lebih terinci.

Meja filter berisi tiga jenis aturan, yang disebut rantai (chain):

  • INPUT - paket ip yang masuk yang ditujukan untuk host sendiri diproses dalam rantai ini;
  • OUTPUT - paket ip keluar dari host sendiri diproses dalam rantai ini;
  • FORWARD - rantai ini diperlukan untuk mengarahkan ulang paket ip. Digunakan jika Anda ingin menggunakan server sebagai router.

Berlawanan dengan setiap rantai adalah kebijakan default, yang menentukan apa yang perlu dilakukan jika koneksi tidak termasuk dalam salah satu aturan. Kebijakan default dapat mengambil dua nilai dan menentukan pendekatan untuk mengatur firewall itu sendiri:

  • MENERIMA - secara default, semua koneksi diizinkan, aturan memblokir koneksi yang tidak diinginkan;
  • JATUH - secara default, semua koneksi ditolak, aturan mengizinkan koneksi yang diperlukan.

Membuat aturan penyaringan lalu lintas di iptables

Filter Iptables dengan antarmuka

Mari mulai membuat aturan. Sintaks perintah untuk menambahkan aturan baru di akhir rantai yang ditentukan terlihat seperti ini:

iptables [-t table] -A -j

Untuk memulainya, mari kita izinkan lalu lintas melalui antarmuka loopback lokal (127.0.0.1), yang diperlukan untuk beberapa aplikasi agar bekerja:

iptables -A INPUT -i lo -j MENERIMA

Mari kita analisis secara berurutan:

  1. Kami menentukan rantai INPUT, mis. aturan akan berlaku untuk koneksi masuk.
  2. Selanjutnya, gunakan kuncinya -i (-dalam-antarmuka), untuk menentukan antarmuka yang masuk ke mana paket ip tiba.
  3. Kami menyelesaikan perintah dengan kunci -j (-jump), menentukan tindakan yang akan dilakukan untuk semua paket ip yang memenuhi kriteria dari klausa 2. Dalam hal ini, ACCEPT akan mengizinkan koneksi. Selain itu, tindakan dasar dengan koneksi juga mencakup:
    • DROP - melarang koneksi, sumber koneksi tidak diinformasikan, paket ip dibuang begitu saja;
    • TOLAKAN - menonaktifkan koneksi, sumber koneksi diinformasikan oleh pesan.

Filter Iptables berdasarkan port, protokol atau alamat IP

Sekarang tambahkan aturan perbolehkan untuk terhubung ke server Linux kami melalui SSH pada port 22.

iptables -A INPUT -p tcp --dport 22 -j MENERIMA

Dalam aturan ini, port dan protokol adalah kriteria. Protokol (tcp, udp, icmp, all) diatur oleh kunci -p (-protokol), port tujuan (mis. port tujuan paket ip ke server) -dport.

Catatan: jika Anda ingin menggunakan port tujuan atau port sumber dalam kriteria (-dport atau -olahraga), lalu tentukan protokolnya.

Anda dapat menentukan rentang port dengan titik dua, misalnya

--dport 6000: 6063

Jika kita tahu alamat ip dari klien yang akan kita hubungkan ke server, akan lebih aman untuk mengizinkan akses hanya dari alamat ip ini. Dalam kasus ini, tambahkan -s (-src, -source) ke kriteria, tentukan alamat ip atau subnet dari sumber koneksi, misalnya, dengan aturan ini:

iptables -A INPUT -p tcp -s 94.41.174.122 --port 22 -j MENERIMA

akses ke port 22 hanya akan diizinkan dari alamat ip 94.41.174.122.

Izinkan sebagian permintaan icmp, 3 jenis:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-melebihi -j ACCEPT

Aturan-aturan ini memungkinkan ping, utilitas traceroute dan memungkinkan mekanisme untuk menentukan MTU antara dua host.

Status koneksi iptables filter

Untuk operasi yang benar, Anda harus membuat aturan yang memungkinkan koneksi yang sudah ada:

iptables -A INPUT -m state --start ESTABLISHED, TERKAIT -j MENERIMA

Di sini, kuncinya digunakan dalam kriteria -m, untuk memuat modul state, yang memungkinkan untuk menentukan status saat ini dari paket ip dari yang mungkin:

  • BARU - mengacu pada paket ip masuk yang terlibat dalam membangun koneksi;
  • ESTABLISHED dan RELATED - mengacu pada paket ip yang masuk yang berpartisipasi dalam koneksi yang sudah ada, atau koneksi yang dimulai dari yang sudah ada (koneksi yang terhubung);
  • INVALID - merujuk ke paket ip yang masuk, jika tidak ada kondisi di atas yang berlaku untuk mereka.

Menetapkan kebijakan iptables default

Set minimum aturan yang memungkinkan untuk firewall sudah siap, masih untuk menetapkan kebijakan default yang melarang semua koneksi masuk yang tidak mematuhi aturan kami. Untuk melakukan ini, gunakan kunci dalam perintah iptables -P, menetapkan kebijakan default untuk rantai yang diberikan, dalam kasus kami:

iptables -P DRP INPUT

Perhatian: sebelum menggunakan perintah ini, Anda perlu memastikan bahwa aturan Anda saat ini memungkinkan Anda untuk terhubung ke server, jika tidak, Anda hanya akan memblokir akses ke diri Anda sendiri!
Mari kita lihat tabel aturan iptables yang dihasilkan, tambahkan kunci -v, untuk menampilkan output yang lebih verbose:
iptables -L -v

Aktifkan log iptables

Iptables memungkinkan Anda untuk menulis informasi tentang meneruskan paket ip ke log sistem. Ini diwujudkan melalui tindakan tertentu. LOG di atas koneksi, setelah itu, paket ip terus bergerak di sepanjang rantai utuh. Misalnya, buat aturan yang akan mencatat semua peristiwa koneksi ke port 445 (tcp) di log sistem:

iptables -A INPUT -p tcp --dport 445 -j LOG --log-awalan "DI SMB DROP:"

disini -log-awalan menetapkan awalan untuk semua pesan yang dicatat oleh aturan kami. Ini nyaman jika Anda memiliki beberapa aturan logging yang berbeda, atau untuk pemrosesan perangkat lunak lebih lanjut. Jika sekarang Anda mencoba untuk terhubung secara eksternal ke server kami di port 445, misalnya melalui telnet, dalam file / var / log / messages entri akan muncul:

Mari kita menganalisis kesimpulannya:

  • DI SMB DROP: awalan yang kita atur dengan opsi -log-awalan
  • IN = eth0 antarmuka tempat paket ip diterima berisi nilai kosong untuk koneksi keluar
  • OUT = antarmuka dari mana paket ip dikirim untuk koneksi masuk berisi nilai kosong
  • MAC = terhubung bersama dalam urutan berikut: alamat MAC tujuan, alamat MAC sumber, EtherType - 08:00 sesuai dengan IPv4.
  • Src = alamat ip dari sumber dari mana paket ip dikirim
  • DST = alamat ip tujuan ke mana paket ip dikirim
  • LEN = ukuran paket ip dalam byte
  • SPT = port sumber dari mana paket ip dikirim
  • DPT = port tujuan ke mana paket ip dikirim

Menyimpan dan mengembalikan aturan penyaringan iptables

Kesimpulannya, konfigurasikan autoload aturan, setelah me-reboot server. Untuk melakukan ini, sebuah paket harus diinstal. layanan iptables dan layanan diaktifkan. Instal paket melalui yum:

yum instal iptables-services
systemctl mengaktifkan iptables

Periksa status layanan iptables:

iptables status systemctl

Opsi startup diatur ke diaktifkan (aktif) parameter aktif menunjukkan bahwa layanan sedang berjalan.

Saat memuat, layanan akan membaca konten file / etc / sysconfig / iptables, dan mengembalikan aturan yang disimpan. Untuk menyimpan aturan kami, kami menggunakan perintah:

iptables-save> / etc / sysconfig / iptables

Anda dapat memulihkan aturan dari file dengan perintah:

iptables-restore < /etc/sysconfig/iptables

Sekarang Anda dapat me-restart server, dan memastikan bahwa aturan firewall dipulihkan pada saat boot.

Pada artikel berikutnya, kami akan menunjukkan cara menggunakan iptables untuk membuat aturan pengalihan lalu lintas NAT untuk gateway akses berbasis CentOS dari / ke jaringan internal organisasi.