firewalld ile birkaç ips hariç tümünü engelle


17

Linux ağa bağlı bir makinede, "genel" bölgedeki (firewalld konsepti) adreslere ulaşmak için izin verilen adres kümesini kısıtlamak istiyorum. Sonuç olarak, açıkça izin verilenler dışında, başka hiçbir makine herhangi bir bağlantı noktasına veya protokole erişemez.

  --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'

Yukarıdaki sorun, bunun gerçek bir liste olmamasıdır, çünkü her biri engellenir, çünkü bir adresi diğeriyle aynı olmayarak engellenirse, yanlışlıkla "tümünü bırak" efekti oluşturur, belirli bir sigarayı nasıl "engellerim" bitişik küme? kaynak bir adres listesini kabul ediyor mu? i şimdiye kadar docs veya google sonucu bakmak hiçbir şey görmedim.


EDIT: Ben sadece bu yarattı:

# 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: 

Ama yine de niyetimden 6000 numaralı bağlantı noktasına ulaşabilirim .123 , eğer bir kaynak listelenmemişse, herhangi bir hizmete veya bağlantı noktasına erişememesi gerektiğiydi

Yanıtlar:


24

Zengin kurallara hiç gerek yok.

Bir bölgeyi belirli bir IP kümesiyle kısıtlamak istiyorsanız, bu IP'leri bölgenin kendisi için kaynak olarak tanımlayın (ve kaynak IP'leri geçersiz kıldığından, var olabilecek herhangi bir arabirim tanımını kaldırın).

Muhtemelen bunu "kamu" bölgesine yapmak istemezsiniz, çünkü bu anlamsal olarak halka açık hizmetlerin dünyaya açık olması anlamına geliyordu.

Bunun yerine, sshd gibi potansiyel olarak hassas hizmetlere erişmek için çoğunlukla güvenilen IP adresleri için "dahili" gibi farklı bir bölge kullanmayı deneyin. (Kendi bölgelerinizi de oluşturabilirsiniz.)

Uyarı: özel "güvenilir" bölgeyi normal "dahili" bölge ile karıştırmayın. "Güvenilen" bölgeye eklenen kaynaklara tüm bağlantı noktalarında izin verilir; "güvenilen" bölgeye hizmet eklemeye izin verilir, ancak bunun bir anlamı yoktur.

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

Bunun sonucu, yalnızca ssh'a iki IP adresinden erişime izin veren bir "dahili" bölge olacaktır. Kalıcı olmasını sağlamak için, her komutu --permanentekli olarak yeniden çalıştırın .


"mevcut olabilecek arayüz tanımı" ile ne demek istediğinizi açıklığa kavuşturun, iv önerinizi deneyin, lütfen düzenlememe bakın.
mike

@mike Dediğim gibi eth1, bölgeden kaldırmanız gerekiyor . firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton

iyi, şifreleme bölgesi yeni bölge, eth1 kamuya açık olmadan önce, ben şifrelemek için kamudan taşındı, bu yüzden şifrelemek kaynak var.
mike

1
Arabirimi bölgeye koyarsanız, arabirim üzerinden gelen her şey IP adresine bakılmaksızın bölgeye eklenen bağlantı noktalarına ve hizmetlere erişebilir. Yani muhtemelen başlangıçta olduğu halka ait.
Michael Hampton

ahh, bu yüzden arayüz herkese açık olsa ve kabul edilen kaynaklar farklı bir güvenilir kaynağa yerleştirilse bile kabul edilen kaynaklara izin verilecek mi?
mike

1

Başı firewalld.richlanguage:

Kaynak kaynak [not] address = "adres [/ 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.

Bitişik bloklara izin vermek için adres için bir ağ maskesi belirtin.

Bunun dışında, ipsetbitişik olmayan bir izin verilen IP listesi için bir oluşturmayı deneyebilirsiniz .

Örneğin, içinde /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>

Gerçek ipsetayrı ayrı oluşturulmalıdır.


Bu reddeder, ihtiyacım olan şey ters, sette ise kabul et,
mike

0

Zengin Kural ile kolayca yönetebilirsiniz.

İlk adım

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

İkinci Adım - Zengin Kural Ekle

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

Zengin kural ekleyip her bağlantı noktasını başka bir kaynaktan engellediğinizde tüm bağlantı noktalarına 192.168.2.2 erişilebilir.

Aşağıdaki komutla herhangi bir bağlantı noktası veya hizmet ekleyecekseniz, tüm kaynaklar tarafından erişilebilir.

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

Aşağıdaki komuttan daha belirli bir Ip için belirli bir bağlantı noktasını açmak istiyorsanız

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.