Osiągnęłbym to, dodając źródła do strefy. Najpierw sprawdź, jakie źródła istnieją dla Twojej strefy:
firewall-cmd --permanent --zone=public --list-sources
Jeśli ich nie ma, możesz zacząć je dodawać, to jest Twoja „biała lista”
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
(Dodaje to cały /24
i pojedynczy adres IP, dzięki czemu masz odniesienie zarówno do podsieci, jak i jednego adresu IP)
Ustaw zakres portów, które chcesz otworzyć:
firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp
Robi to tylko porty od 1 do 22. Możesz to poszerzyć, jeśli chcesz.
Teraz ponownie załaduj to, co zrobiłeś.
firewall-cmd --reload
I sprawdź swoją pracę:
firewall-cmd --zone=public --list-all
Notatka / artykuł redakcyjny: To nie ma znaczenia, ale podoba mi się strefa „zaufana” dla białej listy adresów IP w zaporze ogniowej. Możesz dokonać dalszej oceny, czytając sugestie redhat dotyczące wyboru strefy .
Zobacz też:
Jeśli chcesz spakować DROP
pakiety spoza tego źródła, oto przykład upuszczania tych spoza tego, /24
którego użyłem jako przykładu wcześniej, możesz użyć do tego bogatych reguł . Jest to koncepcyjne, nie przetestowałem go (poza tym, że centos 7 akceptuje polecenie), ale powinno być dość łatwe do wykonania pcap i sprawdzenia, czy zachowuje się tak, jak można się spodziewać
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'
Nawet jeśli odpowiedź została zaakceptowana i przegłosowana, nie sądzę, aby była poprawna. Nie mogę znaleźć jasnego wyjaśnienia w dokumentacji, ale z zaimplementowanego zachowania wygląda to tak:
Tak więc odpowiedź brzmiałaby:
Na przykład zakładając, że strefa domyślna jest publiczna i nie ma otwartych portów, dodaj źródło i zakres portów do strefy „roboczej”:
teraz sprawdź strefy aktywne (strefa domyślna jest zawsze aktywna):
dostaniesz:
tak więc reguły strefy „roboczej” będą miały zastosowanie do konkretnej podsieci. Będziesz miał szereg otwartych portów dla podsieci „białej listy” = zgodnie z żądaniem. I oczywiście użyj
--permanent
opcji w--add-xxx
instrukcjach, aby zachować zachowanie.Z kolei wszelkie porty lub usługi znajdujące się w strefie „publicznej” (domyślnej) będą miały zastosowanie do wszystkich interfejsów i adresów źródłowych.
Ten sam system działa dla interfejsów. Powiedz, dodając interfejs „ens3” do strefy „pracy”:
będziesz używać reguł strefy „roboczej” do wszelkich żądań z konkretnego interfejsu - bardziej zgrubny selektor niż „źródło”.
źródło
sources
białą listę. Powodem było to, że do strefy przypisano interfejs.public
strefy, jeśli takie istnieją (usługi te będą dostępne dla wszystkich adresów, ponieważ interfejsy sąpublic
domyślnie przypisane do strefy). Lub zmień strefę domyślną na inną:block
lubdrop
(jest to powszechna praktyka). Lub zmieńpublic
cel strefy na%%REJECT%%
lubDROP
.Oświadczenie: Właściwie nie próbowałem tego, co sugeruję tutaj, ale jest to dość zbliżone do ostatniej konfiguracji zapory ogniowej, więc zrobiłem to. Firewalld zapewnia kilka wstępnie skonfigurowanych stref, właśnie w tym celu. Jest jeden o nazwie „upuść”, który upuszcza wszystko, co do niego przychodzi, a drugi o nazwie „zaufany”, który pozwala na dowolne połączenie (tzn. Myślę, że nawet nie powinieneś otwierać poszczególnych portów). Sztuczka polega na tym, aby uzyskać odpowiednią strefę do uruchomienia tego, co chcesz.
Firewalld zastosuje reguły dla strefy w oparciu o następujący priorytet:
Po pierwsze, chcesz powiązać swoje zaufane adresy IP ze strefą „zaufaną”:
Następnie ustaw strefę domyślną na „upuszczenie” lub powiąż z nią interfejs:
a następnie wprowadzić zmiany (ostrzeżenie: prawdopodobnie spowoduje to przerwanie połączenia, jeśli robisz to przez sieć i nie dodałeś źródłowego adresu IP do strefy zaufanej):
Oczywiście można je również tymczasowo przetestować, pomijając „--permanent” (i wtedy nie trzeba też ponownie ładować).
źródło
block
można również użyć (zamiastdrop
), jeśli chcesz powiedzieć innym gospodarzom, że z nimi nie rozmawiasz ...W ten sposób obsługuję moje zapory ogniowe. Oto moja preferowana metoda osiągnięcia tego, co chcesz.
Zobaczysz, że Twoja strefa domyślna jest publiczna, a włączone usługi to klient dhcpv6 i ssh. Nie chcemy żadnych dostępnych usług publicznych, prawda? Dozwolone są tylko adresy IP z białej listy. Usuńmy więc dwie usługi publiczne.
Teraz umieśćmy na białej liście konkretny adres IP, który zapewnia dostęp do dowolnego portu.
Teraz umieśćmy na białej liście kolejny adres IP, który chcemy mieć tylko dostęp do SSH, http i https. Żadnych innych portów.
Jeśli łączysz się przez SSH, upewnij się, że autoryzujesz swój adres IP przed zastosowaniem nowego zestawu reguł. Gdy będzie gotowy do zastosowania nowych zasad.
źródło
Możesz łatwo zarządzać za pomocą Rich Rule.
Pierwszy krok
Drugi krok - Dodaj bogatą regułę
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ł.
Jeśli chcesz otworzyć określony port dla określonego IP niż polecenie poniżej
źródło
Najlepsza odpowiedź z dougBTV jest błędna. Nie mogę odpowiedzieć na jego odpowiedź, ponieważ nie mam jeszcze wymaganych punktów powtórzeń, więc wyjaśnię tutaj:
Używa domyślnej strefy „public”. Wiąże sieci do tej strefy, a następnie otwiera porty w tej strefie. Ale przy domyślnej konfiguracji cały ruch przechodzi przez strefę domyślną, a nie tylko sieci źródłowe, z którymi jest ona powiązana. Więc jego polecenia --add-source nie mają znaczenia, a jego polecenia --add-port pozwoliły teraz całemu światu na dostęp do tych portów.
Druga odpowiedź Normundsa Kalnberzinsa jest poprawna. Chcesz utworzyć oddzielną strefę, powiązać sieć / adresy IP z tą strefą i otworzyć porty w tej strefie.
Alternatywnie możesz zostawić wszystko w strefie domyślnej i użyć bogatych reguł firewalld, aby umożliwić dostęp z niektórych adresów IP:
Umożliwia to cały ruch z 192.168.2.2 do wszystkich portów, a ponieważ nie określiłem strefy, zostanie ona zastosowana do domyślnej strefy „publicznej” (użyj --get-default-zone, aby sprawdzić, jaka jest twoja domyślna strefa i - get-active-zone, aby zobaczyć, które strefy są aktualnie w użyciu).
Aby umożliwić dostęp z tego adresu IP tylko do określonego portu, zrobiłbym:
Najlepszą praktyką jest uruchamianie tych poleceń bez opcji --permanent (lub --perm w skrócie), co wpływa na aktualnie działającą zaporę. Po sprawdzeniu, że reguła działa, uruchom ją ponownie z dołączonym opcją --perm, aby była pamiętana przy kolejnych przeładowaniach zapory ogniowej.
źródło
Wystarczy dodać do Normunds odpowiedź:
Aby zablokować cały pozostały ruch:
Ostrzeżenie: jeśli uzyskujesz dostęp ze zdalnego komputera, może to spowodować przerwanie sesji logowania. Jeśli konfiguracja adresu IP strefy „work” nie przebiegła prawidłowo, nie będzie można połączyć się z serwerem.
Aby ponownie załadować zaporę:
Nie mogłem wymyślić, jak dodać dwa różne adresy IP za pomocą „--add-rich-rule”.
źródło
ipset
jakfirewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
dodać IPP do ipset, afirewall-cmd --ipset=blacklist --add-entry=192.168.1.4
następnie możesz użyćfirewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
Dziwię się, że odpowiedzi strefy zaufanej nie są wybraną odpowiedzią. Strefa zaufana ma domyślny „cel: AKCEPTUJ”, podczas gdy reszta to „cel: domyślnie”. Chociaż tak naprawdę nie ma znaczenia, wydaje się, że jest to zamierzona metoda ze względu na jej nazwę i domyślną wartość docelową.
Jak szybko zablokować pudełko, aby tylko Ty mógł uzyskać do niego dostęp:
Po wylistowaniu wszystkich stref powinieneś zobaczyć coś takiego:
Uwaga: usunąłem wiersze o wartości zerowej / brakującej. Ważne jest to, że zarówno zaufane, jak i upuszczone są (aktywne), a upuszczenie ma publiczny interfejs.
Co to robi z iptables w celu demonstracji:
źródło