Jump to content

Firewalld - blokowanie całego ruchu wychodzącego poza wybranymi portami


Recommended Posts

W 2013 roku nie było możliwości blokowania całego ruchu wychodzącego poza wybranymi portami:
https://lists.fedorahosted.org/pipermail/firewalld-users/2013-February/000053.html
Czy
coś się zmieniło?
Ostatnio walczyłem z Rocky Linux i w końcu musiałem wrócić do iptables, bo w firewalld nie znalazłem takich możliwości.

Link to comment
Share on other sites

Da się

https://fedoraproject.org/wiki/Firewalld?rd=FirewallD#Direct_options

Przykład z dozwolonym tylko portem 80 zajumany stąd https://serverfault.com/questions/618164/block-outgoing-connections-on-rhel7-centos7-with-firewalld

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

Btw spojrzałem w git blame i wygląda na to, że tę opcję dodano jakieś 10 lat temu, mniej więcej pół roku po zalinkowanej przez ciebie wypowiedzi :D 

https://github.com/firewalld/firewalld/blame/2b58cb7d4a973ddb34d9084de542c433e68aec50/src/firewall-cmd.in#L432

Link to comment
Share on other sites

Tak, znam ten sposób
https://superuser.com/questions/1391650/how-can-i-configure-firewalld-to-block-all-outgoing-traffic-except-for-specific
ale to załatwia tylko ipv4. Potem drop dla ipv6?, icmp w obydwu wersjach?, a co z IGMP czy innymi?

Chodziło mi raczej o odpowiednik polityki DROP OUTBOUND, tak żeby jedną regułą/polityką zablokować wszystko, co chciałoby nawiązywać połączenia na zewnątrz, a nie blokować pojedyncze dziurki w sitku. Nic takiego nie mogę znaleźć.

Link to comment
Share on other sites

Czyli tobie bardziej chodzi o permanentny panic mode. Fakt nie ma prostego przełącznika (nie licząc tego --panic-on, który działa tylko do restartu) trzeba wszystkie protokoły podać osobno. No ale od czego jest bash jak nie od ułatwiania sobie życia :D  Na szybko skleciłem takie coś i wydaje się działać :)

#!/bin/bash

cat /etc/protocols | awk '{print $1}' | sed '/^#/d' | while read line; do
	firewall-cmd --add-rich-rule="rule protocol value=$line drop"
done

 

Link to comment
Share on other sites

Tak. Chodzi mi o panic mode, ale nie docelowo tylko jako bazę, podstawę, politykę, a następnie możliwość dodawania pozwolenia na konkretne protokoły i porty. Tak, żeby dostępne były tylko te połączenia, które jawnie zdefiniuję w regułach i nic innego. Do firewalld miał być zbudowany jakiś język. Może w nim da się coś takiego wyrzeźbić?

Link to comment
Share on other sites

5 godzin temu, Fedoras napisał:

Do firewalld miał być zbudowany jakiś język. Może w nim da się coś takiego wyrzeźbić?

Tak, Rich Language, skorzystałem z niego w tym skrypcie. Niestety nie da się w nim zablokować wszystkiego, trzeba określić protokół, serwis albo inny element. Ten język nie został wymyślony po to aby blokować wszystko z marszu, a po to aby jeszcze bardziej szczegółowo określić co ma być zablokowane lub odblokowane.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/configuring_complex_firewall_rules_with_the_rich-language_syntax

Link to comment
Share on other sites

OK. Jeszcze inaczej. Dawno, dawno temu uczono mnie, że w firewallingu istnieją dwie podstawowe polityki
- pozwól na wszystkie protokoły/ porty i blokuj te niepożądane
- blokuj wszystkie protokoły/porty i pozwól na te pożądane
Pamiętam długie dyskusje, która z tych polityk jest "lepsza". Firewalld realizuje pierwszą z tych polityk. Moje pytanie dotyczyło możliwości zastosowania drugiej z nich w równie prosty sposób jak pierwszej.

Link to comment
Share on other sites

3 godziny temu, Fedoras napisał:

- blokuj wszystkie protokoły/porty i pozwól na te pożądane

W przypadku ruchu przychodzącego jest to dosyć łatwe. W dokumentacji poszczególnych produktów jest napisane, jakie porty należy otworzyć. Dla ruchu wychodzącego jest dużo trudniej, ponieważ mało kto nawet wie, do czego jego produkt się łączy w celu aktualizacji, czy aktywacji. Zwykle do bardzo rozbudowanego CDN w rodzaju Cloudflare, albo Akamai, którego producent oprogramowania sobie wykupił oraz repozytoriów Dockera, PyPI, NPM, czy Mavena. Taki Red Hat to nawet opisuje - https://access.redhat.com/solutions/65300 - ale zwykle jest zakładane, że oprogramowanie ma nieograniczony dostęp do całego internetu.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...