blok semua kecuali beberapa ips dengan firewalld

17

Pada mesin jaringan linux, saya ingin membatasi sekumpulan alamat pada zona "publik" (konsep firewalld), yang diizinkan untuk mencapainya. Jadi hasil akhirnya adalah tidak ada mesin lain yang dapat mengakses port atau protokol apa pun, kecuali yang secara eksplisit diizinkan, semacam campuran

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

Masalah di atas adalah bahwa ini bukan daftar nyata, itu akan memblokir semua karena jika satu alamatnya diblokir dengan tidak sama dengan yang lain, menghasilkan efek "jatuhkan semua" yang tidak disengaja, bagaimana saya "membuka blokir" non spesifik set berdekatan? apakah sumber menerima daftar alamat? saya belum melihat apa-apa di tampilan saya di docs atau hasil google sejauh ini.


EDIT: Saya baru saja membuat ini:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Tetapi saya masih dapat mencapai port 6000 dari .123 maksud saya adalah bahwa jika suatu sumber tidak terdaftar, seharusnya tidak dapat menjangkau layanan atau port apa pun

mikrofon
sumber

Jawaban:

24

Aturan kaya tidak perlu sama sekali.

Jika Anda ingin membatasi zona untuk set IP tertentu, cukup tentukan IP tersebut sebagai sumber untuk zona itu sendiri (dan hapus definisi antarmuka apa pun yang mungkin ada, karena menimpa IP sumber).

Anda mungkin tidak ingin melakukan ini ke zona "publik", karena itu secara semantik dimaksudkan untuk layanan publik yang terbuka untuk dunia.

Alih-alih, coba gunakan zona yang berbeda seperti "internal" untuk sebagian besar alamat IP tepercaya untuk mengakses layanan yang berpotensi sensitif seperti sshd. (Anda juga dapat membuat zona Anda sendiri.)

Peringatan: jangan salah mengira zona "tepercaya" khusus dengan zona "internal" normal. Setiap sumber yang ditambahkan ke zona "tepercaya" akan diizinkan melalui semua port; menambahkan layanan ke zona "tepercaya" diperbolehkan tetapi tidak masuk akal untuk melakukannya.

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

Hasil ini akan menjadi zona "internal" yang memungkinkan akses ke ssh, tetapi hanya dari dua alamat IP yang diberikan. Untuk membuatnya gigih, jalankan kembali setiap perintah dengan --permanentmenambahkan.

Michael Hampton
sumber
tolong jelaskan apa yang Anda maksud dengan "definisi antarmuka yang mungkin ada", iv mencoba saran Anda, silakan lihat edit saya.
mike
@ Mike Seperti yang saya katakan, Anda harus menghapus eth1dari zona. firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton
baik, zona enkripsi adalah zona baru, sebelum eth1 di tempat umum, saya memindahkannya dari publik ke enkripsi, jadi mengenkripsi memiliki sumber .120, saya pikir hanya 120 yang bisa mencapai port, apa yang saya hilang?
mike
1
Jika Anda meletakkan antarmuka di zona, maka apa pun yang datang melalui antarmuka dapat mengakses port dan layanan apa pun yang ditambahkan ke zona, terlepas dari alamat IP. Jadi mungkin itu milik publik, di tempat asalnya.
Michael Hampton
ahh, jadi sumber yang diterima masih akan diizinkan meskipun antarmuka ditempatkan di tempat umum, dan sumber yang diterima ditempatkan di sumber tepercaya yang berbeda?
mike
1

Sesuai firewalld.richlanguage:

Sumber sumber [tidak] address = "address [/ mask]"

   With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

Tentukan netmask untuk alamat yang memungkinkan blok yang berdekatan.

Selain itu, Anda dapat mencoba membuat ipsetdaftar IP yang diizinkan yang tidak bersebelahan.

Misalnya, di /etc/firewalld/direct.xml:

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

Sebenarnya ipsetharus dibuat secara terpisah.

dawud
sumber
ini akan menolak, apa yang saya butuhkan adalah kebalikannya, menerima jika di set,
mike
0

Anda dapat mengelola dengan mudah dengan Aturan Kaya.

Langkah pertama

firewall-cmd --permanent --set-default-zone=home
firewall-cmd --permanent --zone=drop --change-interface=eth0

Langkah Kedua - Tambahkan Aturan Kaya

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

Semua port dapat diakses oleh 192.168.2.2 setelah Anda menambahkan aturan kaya dan memblokir setiap port dari sumber lain.

Jika Anda akan menambahkan port atau layanan dengan perintah di bawah ini maka itu akan dapat diakses oleh semua sumber.

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

Jika Anda ingin membuka port spesifik untuk Ip tertentu daripada perintah di bawah ini

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
Ranjeet Ranjan
sumber