Итак, прочитав man-страницу firewalld и документацию fedora, я пришел к пониманию, что для добавления пользовательского правила в firewall с конкретными аргументами мне нужно использовать структуру
firewall-cmd [--permanent] --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
то, что я специально пытаюсь сделать, это создать пользовательское правило с GeoIP соответствия блокировать все страны, которые не происходят из США. Прежде чем я это сделаю, Мне нужно сначала добавить соответствующее правило, которое разрешает доступ из моей локальной сети, поскольку я контролирую сервер через ssh в локальной частной сети, поэтому я добавляю правило вроде so
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT
затем я добавляю второе правило, вот так
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP
эти добавить в цепочку input, но добавить под суб-цепь под названием INPUT_direct, этот суб-цепь размещена в типовом неизменным список правил ввода в качестве 3-го и быстрая
iptables -L INPUT
показывает входную цепочку как
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
и INPUT_direct как
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
это может работать для некоторых, но если я беги
ping france.fr
я получаю в результате
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
это более чем вероятно из-за правила ввода #1
iptables -L INPUT 1
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
я понимаю, что я мог бы просто применить тот же пользовательский набор правил к выходной цепочке и заблокировать запрос ping для france.fr или что-то внешнее для США, но как я могу добавить набор правил в базовую цепочку ввода so
iptables -L INPUT
показывает это вместо
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
я спрашиваю это, потому что я чувствую, что я хочу вместо того, что является результатом брандмауэра-cmd немного более безопасен, я ошибаюсь? Я хотел бы, чтобы брандмауэр контролировался firewalld вместо того, чтобы сбрасывать firewalld и возвращаться к iptables для лучшей интеграции в будущем и возможных проблем с устареванием, так что это даже возможно с firewalld, или я буду вынужден запустить пользовательский скрипт при загрузке, который включает в себя
iptables -I INPUT 1 -s 192.168.0.0/24 -j ACCEPT
iptables -I INPUT 2 -m geoip ! --src-cc US -j DROP
и если это вариант, где я могу разместить этот сценарий?