Zablokować połączenia wychodzące na RHEL7 / CentOS7 za pomocą firewalld?

12

RHEL7 / CentOS7 zawiera nową firewalldusługę zapory ogniowej, która zastępuje iptables service(oba używają iptablesnarzędzia do interakcji z Netfilterem jądra poniżej).

firewalldmożna łatwo dostroić, aby blokować ruch przychodzący, ale jak zauważył Thomas Woerner 1,5 lat temu „ograniczenie ruchu wychodzącego nie jest obecnie możliwe przy pomocy firewalld w prosty sposób”. I o ile widzę, sytuacja się nie zmieniła. A może to? Czy jest jakiś sposób na blokowanie ruchu wychodzącego firewalld? Jeśli nie, czy istnieją inne „standardowe” sposoby (na dystrybucji RHEL7) blokowania ruchu wychodzącego, z wyjątkiem ręcznego dodawania reguł za pomocą iptablesnarzędzia?

golem
źródło

Odpowiedzi:

13

Nie znalazłem żadnej opcji w tym ładnym GUI, ale jest to możliwe poprzez bezpośredni interfejs

Aby włączyć tylko port wychodzący 80:

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP

Spowoduje to dodanie go do reguł stałych, a nie reguł wykonawczych.
Będziesz musiał ponownie załadować stałe reguły, aby stały się regułami wykonawczymi.

firewall-cmd --reload

wyświetlać stałe reguły

firewall-cmd --permanent --direct --get-all-rules

aby wyświetlić reguły wykonawcze

firewall-cmd --direct --get-all-rules
Użytkownik Fedory
źródło
Jak można to osiągnąć, korzystając z rzeczywistego języka opartego na regułach sformułowania?
Casey
@Casey Z mojego zrozumienia, bogate reguły są ściśle stosowane w łańcuchach INPUT.
Rice,
Zakładam, że powyższe zasady działają tylko dla ipv4(iptables). Może być pożądane mieć podobne reguły dla ipv6(dla ip6tables) lub eb(dla ebtables).
mwfearnley
To także zabiło moje połączenie SSH z serwerem! Zobacz odpowiedź user253068, aby dowiedzieć się, jak zachować ustanowione połączenia.
mwfearnley
6

Po tym, jak sam zadałem to samo pytanie i przy odrobinie majsterkowania, zebrałem kilka fajnych zasad ograniczania ruchu wychodzącego do zapytań HTTP / HTTPS i DNS:

Zezwalaj na ustanowione połączenia:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Zezwalaj na HTTP:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT

Zezwalaj na HTTPS:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 443 -j ACCEPT

Zezwalaj na zapytania DNS:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p udp --dport 53 -j ACCEPT

Odrzuć wszystko inne:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP

Dobrym pomysłem może być przetestowanie najpierw, pomijając argument „--permanent”.

Nie jestem bynajmniej ekspertem, ale wydaje mi się, że to działa dobrze :)

Cegła suszona na słońcu
źródło
W pewnym momencie może się przydać usunięcie reguł. Usuwanie pojedynczych reguł wydaje się trudne, ale w przypadku młota firewall-cmd [--permanent] --direct --remove-rules ipv4 filter OUTPUTzrobi to masowo.
mwfearnley
1

W sprawie GUI; Myślę, że znajdziesz to w „ Konfiguracja bezpośrednia ”. Aby uzyskać do niego dostęp, musisz wybrać go w „ Widoku ”. Mogę się mylić.

Dygresja

Aby usunąć reguły; musisz wyjść, a następnie ponownie wejść.

użytkownik301864
źródło