CentOS 7'deki beyaz liste kaynak IP adresleri


23

CentOS 7 güvenlik duvarını, beyaz listedeki kaynak IP adresleri dışında gelen tüm isteklerin engelleneceği şekilde ayarlamak istiyorum. Beyaz Liste IP adresleri için tüm bağlantı noktalarına erişilebilir olmalıdır.

iptablesCentOS 7 kullanması için birkaç çözüm bulabiliyorum (çalışıp çalışmayacaklarından emin değilim) firewalld. firewall-cmdKomuta ile elde etmek için benzer bir şey bulamıyorum .

Arayüzler Public Zone'da. Ayrıca tüm hizmetleri zaten Kamu Alanına taşıdım.

Yanıtlar:


44

Bunu bir bölgeye kaynaklar ekleyerek başardım. Bölgeniz için hangi kaynakların bulunduğunu ilk kontrol edin:

firewall-cmd --permanent --zone=public --list-sources

Hiçbiri yoksa, onları eklemeye başlayabilirsiniz, bu "beyaz listeniz"

firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32

(Bu, bir bütün /24ve bir tek IP ekler , böylece hem alt ağ hem de tek bir IP için referansınız olur)

Açmak istediğiniz port aralığını ayarlayın:

firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

Bu sadece 1'den 22'ye kadar olan portları yapar. İsterseniz, bunu genişletebilirsiniz.

Şimdi, yaptıklarını tekrar yükle.

firewall-cmd --reload

Ve işini kontrol et:

 firewall-cmd --zone=public --list-all

Yan not / editoryal: farketmez ama firewalld'de listelenen IP'lerin "güvenilen" bölgesini seviyorum. Bir bölge seçme konusundaki redhat önerilerini okuyarak daha fazla değerlendirme yapabilirsiniz .

Ayrıca bakınız:


DROPBu kaynağın dışına paketleri paketlemek istiyorsanız , işte /24örnek olarak daha önce örnek olarak kullandığımları dışına bırakmak için bir örnek , bunun için zengin kurallar kullanabilirsiniz , inanıyorum. Bu kavramsaldır, test etmedim (centos 7'nin komutu kabul ettiğini görmek dışında), ancak bir pcap yapmak ve beklediğiniz gibi davranıp davranmadığını görmek için yeterince kolay olmalı

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'

Cevap için çok teşekkürler. İtibardaki kıtlık nedeniyle oy kullanamazsınız. Ancak kaynakları kullanarak eklediğim dışındaki tüm IP'leri nasıl bırakabilirim?
Krishnandu Sarkar

Teşekkürler @KrishnanduSarkar - haklısınız, varsayılan olarak bir ICMP reddetmesi gerekir. Ancak, paketleri bırakmak için zengin bir kural ekleyebileceğinizi düşünüyorum. İşe yarayacağını düşündüğüm cevaba bir örnek ekledim. Olumlu oylama için teşekkürler, bir cevap işe yararsa cevap kabul etmeyi düşünün.
dougBTV

Harika cevap, şu ana kadar iptables kullanıyordum.
Tensigh

(!) Bu cevap, geçerli varsayılan FirewallD yapılandırması için beklendiği gibi çalışmaz (arabirimler varsayılan olarak ortak bölgeye atanır).
Dess

24

Bir cevap kabul edilmiş ve oy kullanılmış olsa bile, bunun doğru olduğunu sanmıyorum. Belgelerde net bir açıklama bulamam, ancak uygulanan davranıştan şöyle görünüyor:

  1. Arabirim ve kaynak seçici olarak kullanılır - hangi bölgeleri aktifleştirmek için
  2. her ikisi de varsayılan bölge için göz ardı edilir (her zaman etkin)

Yani cevap şöyle olurdu:

  1. varsayılan bölgeyi kilitleyin, "genel" deyin - açık bağlantı noktası veya servis mevcut değil
  2. başka bir bölgede "iş" deyin - kaynak tanımlayın ve bağlantı noktalarını açın

Örneğin, varsayılan bölgenin genel olduğunu ve açık bağlantı noktaları olmadığını varsayarsak, "çalışma" bölgesine kaynak ve bağlantı noktası aralığı ekleyin:

$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp

şimdi aktif bölgeleri kontrol et (varsayılan bölge her zaman aktif):

$ sudo firewall-cmd --get-active-zones

alacaksınız:

work
  sources: 192.168.0.0/24

bu nedenle, "iş" bölgesi kuralları belirli bir alt ağa uygulanacaktır. İstenildiği gibi "beyaz liste" = alt ağ için bir dizi açık bağlantı noktasına sahip olacaksınız . Ve elbette davranışı sabitlemek için ifadelerde --permanentseçeneği kullanın --add-xxx.

Sırasıyla, "genel" (varsayılan) bölgede sahip olduğunuz tüm bağlantı noktaları veya hizmetler tüm arayüzlere ve kaynak adreslerine uygulanacaktır.

$ sudo firewall-cmd --list-all-zones

public (default)
interfaces:
sources:
services:
ports: 
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

work (active)
interfaces: 
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Aynı sistem arayüzlerde çalışır. "İşe" bölgesine "ens3" arayüzünü ekleyerek söyleyin:

$ sudo firewall-cmd --zone=work --add-interface=ens3

belirli bir arayüzden gelen herhangi bir istek için "çalışma" bölge kurallarını kullanacaksınız - "kaynak" dan daha zorlu seçiciler.


4
Bu en iyi cevap. En önemli kısım, bir arayüz oluşturmanın erişimi genişlettiği (kaynakların ayarlanması durumunda) açıklamasıdır. sourcesBeyaz listeye girmeme rağmen bağlantı noktalarının erişilebilir olması konusunda bir sorunum vardı . Bunun nedeni, bölgenin bir arayüze atanmış olmasıdır.
Pinkeen

1
Tam olarak doğru olması için, bu cevabın public, eğer varsa, tüm varsayılan servisleri bölgeden kaldırması gerekir (bu hizmetler, tüm adreslerde arayüzler publicvarsayılan olarak bölgeye atandığı için mevcut olacaktır ). Veya varsayılan bölgeyi diğerine değiştirin: blockveya drop(bu yaygın bir uygulamadır). Veya publicbölge hedefini %%REJECT%%veya olarak değiştirin DROP.
Dess

6

Feragatname: Gerçekten önerdiğim şeyi denemedim, burada, ancak yaptığım son firewalld kurulumuna oldukça yakın, bu yüzden bundan vazgeçiyorum. Firewalld, sadece bu amaç için size önceden yapılandırılmış birkaç bölge sunar. Herhangi bir bağlantıya izin veren "drop" adı verilen ve herhangi bir bağlantıya izin veren "güvenilir" olarak adlandırılan bir tane var (yani, bireysel portlar açmanıza bile gerek kalmamalı, sanırım). İşin püf noktası, istediğin şey için tetiklemek için doğru bölgeye ulaşmak.

Firewalld, aşağıdaki önceliğe göre bir bölge için kuralları uygular:

  • Kaynak IP bir bölgeye bağlı bir kaynak IP ile eşleşiyorsa, onu kullanır.
  • Kaynak IP belirli bir bölgeyle eşleşmezse , paketin geldiği arabirim için yapılandırılmış bir bölge olup olmadığını kontrol eder . Bir tane varsa, onu kullanır.
  • Son olarak, başka hiçbir şey eşleşmezse, varsayılan bölgeyi kullanır.

Bu nedenle, ilk önce, güvenilir IP'lerinizi "güvenilir" bölgeye bağlamak istersiniz:

firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4

Ardından, varsayılan bölgenizi "bırak" olarak ayarlayın veya arayüzünüzü buna bağlayın:

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

ve ardından değişikliklerin etkili olmasını sağlayın (uyarı: bunu ağ üzerinden yapıyorsanız ve kaynak IP'nizi güvenilen bölgeye eklememişseniz, bu muhtemelen bağlantınızı kesecektir):

firewall-cmd --reload

Tabii ki, "--permanent" i çıkartarak bunları geçici olarak da test edebilirsiniz (ve sonra - yeniden yüklemeniz gerekmez).


blockdropdiğer ev sahiplerine kendileriyle konuşmadığınızı söylemek istiyorsanız (yerine ) da kullanılabilir ....
Gert van den Berg

5

Güvenlik duvarlarımı bu şekilde çalıştırıyorum. İstediğinizi başarmak için tercih ettiğim yöntem burada.

# firewall-cmd --list-all

Varsayılan bölgenizin genel olduğunu ve etkinleştirilmiş servislerin dhcpv6-client ve ssh olduğunu göreceksiniz. Herhangi bir kamu hizmetinin mevcut olmasını istemiyoruz, değil mi? Yalnızca beyaz listeye alınmış IP'ler yetkilidir. Öyleyse iki kamu hizmetini kaldıralım.

# firewall-cmd --zone=public --remove-service=ssh --permanent
# firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent

Şimdi, herhangi bir bağlantı noktasına erişim sağlayan belirli bir IP'yi beyaz listeye alalım.

#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" accept'

Şimdi, yalnızca SSH, http ve https erişimine erişmek istediğimiz başka bir IP'yi beyaz listeye alalım. Başka bağlantı noktası yok.

#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="ssh" accept'
#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="http" accept'
#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx service name="https" accept'

SSH ile bağlanıyorsanız, yeni kural kümenizi uygulamadan önce IP'nizi yetkilendirdiğinizden emin olun. Yeni kuralları uygulamaya hazır olduğunuzda.

#firewall-cmd --reload

2

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 Ekleme

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

Zengin kural eklediğinizde ve diğer bağlantı noktalarındaki her bağlantı noktasını engellediğinizde tüm bağlantı noktasına 192.168.2.2'ye erişilebilir.

Aşağıdaki komutla herhangi bir port veya servis ekleyecekseniz, tüm kaynaklardan erişilebilir.

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

Belirli bir Ip için belirli bir portu aşağıdaki komuttan daha fazla açmak isterseniz

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

2

DougBTV'den en iyi cevap yanlıştır. Cevabını cevaplayamıyorum, çünkü gerekli rep puanları henüz yok, bu yüzden burada açıklayacağım:

"Public" varsayılan bölgesini kullanıyor. O bölgeye ağ bağlıyor ve ardından o bölgedeki bağlantı noktalarını açıyor. Ancak, varsayılan bir yapılandırmada tüm trafik, yalnızca ona bağladığınız kaynak ağlardan değil, varsayılan bölgeden geçer. Bu nedenle - kaynak komutları hiçbir fark yaratmaz ve - bağlantı noktası komutları artık tüm dünyanın bu bağlantı noktalarına erişmesine izin verdi.

Normunds Kalnberzins tarafından verilen 2. cevap doğrudur. Ayrı bir bölge oluşturmak, ağınızı / IP'lerinizi bu bölgeye bağlamak ve o bölgedeki portları açmak istiyorsunuz.

Alternatif olarak, her şeyi varsayılan bölgede bırakabilir ve belirli IP'lerden erişime izin vermek için firewalld'in zengin kurallarını kullanabilirsiniz:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'

Bu, 192.168.2.2'den tüm bağlantı noktalarına tüm trafiğe izin verir ve bir bölge belirtmediğim için bu, "genel" varsayılan bölgesine uygulanır (varsayılan bölgenizin ne olduğunu doğrulamak için --get-default-zone kullanın ve - şu anda kullanımda olan bölgeleri görmek için get-active-zone'lar).

Bu IP’den yalnızca belirli bir bağlantı noktasına erişime izin vermek için yapacağım:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" port port="1234" protocol="tcp" accept'

En iyi uygulama bu komutları o anda çalışan güvenlik duvarını etkileyen --permanent (veya - kısaca - kısa) olmadan çalıştırmaktır. Kuralınızın çalıştığını test ettikten sonra, --perm appended ile tekrar çalıştırın, böylece firewalld yeniden yüklendiklerinde hatırlanır.


1

Sadece Normunds cevabına eklemek için:

$ sudo firewall-cmd --permanent --zone=work --add-source=172.16.0.0/12
$ sudo firewall-cmd --permanent --zone=work --add-port=8080-8090/tcp

Diğer tüm trafiği engellemek için:

$ sudo firewall-cmd --set-default-zone=drop

Uyarı: Uzak makineden erişirseniz, oturum açma oturumunuz kesilebilir. 'Çalışma' bölgesi IP kurulumunu doğru bir şekilde yapamadıysanız, sunucunuza bağlanamazsınız.

Güvenlik duvarını yeniden yüklemek için:

$ sudo firewall-cmd --reload

'--Add-rich-rule' ile iki farklı IP'nin nasıl ekleneceğini bulamadım.


Geçerli varsayılan FirewallD yapılandırması için yeterli olmayabilir. Ayrıntılar için Normunds’un cevabına yaptığı yorumlarıma bakınız.
Dess

Birden fazla IP kullanmak için ipsetfirewall-cmd --permanent --new-ipset=blacklist --type=hash:ip için ipset'e benzer bir eklenti ekleyin, firewall-cmd --ipset=blacklist --add-entry=192.168.1.4sonra kullanabilirsinizfirewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
fyrye

0

Güvenilir bölge cevaplarının seçilen cevap olmadığına şaşırdım. Geri kalanlar "hedef: varsayılan" iken, güvenilen bölgenin varsayılan bir "hedefi: KABUL EDİLMESİ" vardır. Gerçekten önemli olmasa da, adı ve varsayılan hedef değeri nedeniyle amaçlanan yöntem olarak görünmektedir.

Bir kutuyu hızlı bir şekilde nasıl kilitleyeceğinizi, böylece yalnızca erişebildiğinizi

firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

Tüm bölgeleri listeledikten sonra şöyle bir şey görmelisiniz:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  sources: 1.2.3.4 5.6.7.8/24
  masquerade: no

drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth1
  masquerade: no

Not: Boş / eksik değere sahip satırları kaldırdım. Önemli olan, güvenilen ve düşmenin hem (etkin) hem de düşmenin genel arayüzünüze sahip olmasıdır.

Bu gösteri için iptables ne yapar:

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination
IN_trusted  all  --  1.2.3.4         0.0.0.0/0
IN_trusted  all  --  5.6.7.8/24        0.0.0.0/0
Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
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.