Zablokuj wszystkie oprócz kilku IPS za pomocą firewalla

17

Na maszynie z linuxem chciałbym ograniczyć zestaw adresów w strefie „publicznej” (koncepcja zapory ogniowej), które mogą do niej dotrzeć. Tak więc wynikiem końcowym byłoby, aby żadna inna maszyna nie mogła uzyskać dostępu do żadnego portu lub protokołu, oprócz tych wyraźnie dozwolonych, w rodzaju mieszanki

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

Problem powyżej polega na tym, że nie jest to prawdziwa lista, wszystko zablokuje, ponieważ jeśli jej jeden adres zostanie zablokowany, ponieważ nie jest taki sam jak drugi, generując przypadkowy efekt „upuść wszystko”, w jaki sposób „odblokowałbym” konkretny obiekt ciągły zestaw? Czy źródło akceptuje listę adresów? jak dotąd nie widzę niczego w moim spojrzeniu na dokumenty ani wynik wyszukiwania w Google.


EDYCJA: Właśnie to stworzyłem:

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

Ale nadal mogę dotrzeć do portu 6000 z .123 mojej intencji było to, że jeśli źródła nie ma na liście, nie powinno być w stanie dotrzeć do żadnej usługi ani portu

mikrofon
źródło

Odpowiedzi:

24

Bogate zasady wcale nie są konieczne.

Jeśli chcesz ograniczyć strefę do określonego zestawu adresów IP, po prostu zdefiniuj te adresy IP jako źródła dla samej strefy (i usuń wszelkie definicje interfejsów, które mogą być obecne, ponieważ zastępują one źródłowe adresy IP).

Prawdopodobnie nie chcesz tego robić w strefie „publicznej”, ponieważ jest to semantycznie przeznaczone dla publicznych usług otwartych na świat.

Zamiast tego spróbuj użyć innej strefy, np. „Wewnętrznej” dla najczęściej zaufanych adresów IP, aby uzyskać dostęp do potencjalnie wrażliwych usług, takich jak sshd. (Możesz także tworzyć własne strefy).

Ostrzeżenie: nie pomyl specjalnej „zaufanej” strefy ze zwykłą „wewnętrzną” strefą. Wszelkie źródła dodane do strefy „zaufanej” będą dozwolone przez wszystkie porty; dodawanie usług do strefy „zaufanej” jest dozwolone, ale nie ma sensu tego robić.

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

Wynikiem tego będzie strefa „wewnętrzna”, która umożliwia dostęp do ssh, ale tylko z dwóch podanych adresów IP. Aby było trwałe, ponownie uruchom każde polecenie z --permanentdołączonym.

Michael Hampton
źródło
wyjaśnij, co rozumiesz przez „definicję interfejsu, która może być obecna”, iv wypróbowałem twoją sugestię, zobacz moją edycję.
Mike
@mike Jak powiedziałem, musisz usunąć eth1ze strefy. firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton
cóż, strefa szyfrowania to nowa strefa, zanim eth1 był publicznie, przeniosłem ją z publicznego do szyfrowania, więc szyfrowanie ma źródło .120, myślałem, że tylko 120 powinno być w stanie dotrzeć do portu, czego mi brakuje?
Mike
1
Jeśli umieścisz interfejs w strefie, to wszystko , co dotrze przez interfejs, będzie miało dostęp do wszystkich portów i usług dodanych do strefy, niezależnie od adresu IP. Prawdopodobnie należy to publicznie, gdzie pierwotnie było.
Michael Hampton
ahh, więc akceptowane źródła będą nadal dozwolone, nawet jeśli interfejs zostanie umieszczony publicznie, a źródła akceptacji zostaną umieszczone w innym zaufanym źródle?
Mike
1

Zgodnie z firewalld.richlanguage:

Źródło [not] adres = "adres [/ maska]"

   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.

Podaj maskę sieci dla adresu, aby zezwolić na ciągłe bloki.

Poza tym możesz spróbować utworzyć ipsetnieprzylegającą listę dozwolonych adresów IP.

Na przykład w /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>

Rzeczywiste ipsetnależy utworzyć osobno.

dawud
źródło
to by odrzuciło, to, czego potrzebuję, to odwrotność, zaakceptuj, jeśli w zestawie,
Mike
0

Możesz łatwo zarządzać za pomocą Rich Rule.

Pierwszy krok

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

Drugi krok - Dodaj bogatą regułę

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

Wszystkie porty są dostępne przez 192.168.2.2 po dodaniu reguły rozszerzonej i zablokowaniu każdego portu z innego źródła.

Jeśli dodasz dowolny port lub usługę za pomocą poniższego polecenia, będzie on dostępny dla wszystkich źródeł.

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

Jeśli chcesz otworzyć konkretny port dla określonego IP niż polecenie poniżej

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
Ranjeet Ranjan
źródło