использование firewalld и firewall-cmd как добавить-rule в первичную цепочку ввода, а не input direct

Итак, прочитав 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

и если это вариант, где я могу разместить этот сценарий?

18
задан Chris
10.05.2023 10:12 Количество просмотров материала 3482
Распечатать страницу

1 ответ

на данный момент лучший способ осуществить это-просто сделать именно то, что я предложил, а именно не только добавить входящее правило отбрасывания, но и добавить исходящее отбрасывание, чтобы команды были

 firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT
 firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP
 firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 192.168.0.0/24 -j ACCEPT
 firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -m geoip ! --dst-cc US -j DROP

в настоящее время нет другого способа добавить правило непосредственно в цепочку ввода или вывода через firewall-cmd

Я только намеревался сделать это так, потому что я чувствовал, что если какой-то червь или вредоносное ПО попало в мой сервер его исходящее подключение к любой страна будет считаться связанной, гарантированной или установленной, но этот метод, просто добавив в цепочку delegate_output, похоже, работает, чтобы заблокировать все исходящие соединения, поэтому я доволен

Я более чем уверен, что кто-то может лучше этот ответ, объясняя, как я мог бы поставить команду в какой скрипт или systemd в сценарий, но я думаю, я был бы более счастлив, если бы Федора бы выяснить вариант, что бы сразу добавить его в первичной цепи, но, может быть, это плохо практика

0
отвечен Chris 2023-05-11 18:00

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх