więc po przeczytaniu strony podręcznika firewalld i dokumentacji fedory doszedłem do wniosku, że aby dodać niestandardową regułę do zapory ogniowej z określonymi argumentami, muszę użyć struktury
firewall-cmd [--permanent] --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
konkretnie staram się stworzyć niestandardową regułę z dopasowaniem geograficznym, aby zablokować wszystkie kraje, które nie pochodzą z USA. Zanim to zrobię, muszę najpierw dodać pasującą regułę, która zezwala na dostęp z mojej sieci lokalnej, ponieważ kontroluję serwer przez ssh w lokalnej sieci prywatnej, więc dodaję taką regułę
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT
następnie dodaję drugą taką zasadę
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP
dodają one do łańcucha wejściowego, ale dodają w ramach podłańcucha o nazwie INPUT_direct, ten podłańcuch jest wymieniony na ogólnej niezmienionej liście reguł INPUT jako trzeci i szybki
iptables -L INPUT
pokazuje łańcuch INPUT jako ten
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
i INPUT_direct as
Chain INPUT_direct (1 references)
target prot opt source destination
ACCEPT all -- 192.168.0.0/24 anywhere
DROP all -- anywhere anywhere -m geoip ! --source-country US
to może działać dla niektórych, ale jeśli uruchomię
ping france.fr
Dostaję w rezultacie
PING france.fr (46.18.192.148) 56(84) bytes of data.
64 bytes from ns1-sgg.produhost.net (46.18.192.148): icmp_seq=1 ttl=52 time=136 ms
64 bytes from ns1-sgg.produhost.net (46.18.192.148): icmp_seq=2 ttl=52 time=135 ms
64 bytes from ns1-sgg.produhost.net (46.18.192.148): icmp_seq=3 ttl=52 time=136 ms
jest to bardziej niż prawdopodobne ze względu na zasadę WEJŚCIA nr 1
iptables -L INPUT 1
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Zdaję sobie sprawę, że mógłbym po prostu zastosować ten sam niestandardowy zestaw reguł do łańcucha OUTPUT i zablokować żądanie ping do francji.fr lub czegokolwiek poza USA, ale jak mogę dodać zestaw reguł do podstawowego łańcucha INPUT, więc
iptables -L INPUT
pokazuje to zamiast tego
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.0.0/24 anywhere
DROP all -- anywhere anywhere -m geoip ! --source-country US
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Pytam o to, ponieważ czuję, że to, czego chcę zamiast tego, co jest wynikiem firewall-cmd, jest nieco bezpieczniejsze, czy się mylę? Chciałbym zachować zaporę kontrolowaną przez firewalld zamiast upuszczać firewalld i powracać do iptables w celu lepszej przyszłej integracji i możliwych problemów z wycofaniem, więc jest to możliwe nawet w przypadku firewalld, czy też będę zmuszony uruchomić niestandardowy skrypt w rozruch, który obejmuje
iptables -I INPUT 1 -s 192.168.0.0/24 -j ACCEPT
iptables -I INPUT 2 -m geoip ! --src-cc US -j DROP
a jeśli to jest opcja, gdzie mogę umieścić ten skrypt?