Использование firewalld и firewall-cmd, как добавить правило к основной цепочке INPUT, а не INPUT_direct
Поэтому после прочтения справочной страницы firewalld и документации fedora я пришел к выводу, что для добавления настраиваемого правила в firewall с конкретными аргументами мне нужно использовать структуру
firewall-cmd [--permanent] --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
я специально пытаюсь создать собственное правило с сопоставлением геоипов, чтобы заблокировать все страны, которые не происходят из США. Прежде чем я сделаю это, мне нужно сначала добавить соответствующее правило, которое разрешает доступ из моей локальной сети, так как я управляю сервером через ssh в локальной частной сети, поэтому я добавляю правило примерно так:
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_direct, эта подцепь указана в общем списке неизмененных правил INPUT как 3-й и быстрый
iptables -L INPUT
показывает цепочку 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
это более чем вероятно из-за правила INPUT #1
iptables -L INPUT 1
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Я понимаю, что могу просто применить один и тот же пользовательский набор правил к цепочке OUTPUT и заблокировать запрос ping для france.fr или для чего-то внешнего для США, но как я могу добавить набор правил в базовую цепочку INPUT, чтобы
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
Я спрашиваю об этом, потому что чувствую, что хочу, а не то, что результат firewall-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
и если это вариант, где я могу разместить этот скрипт?
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
в настоящее время нет другого способа добавить правило напрямую в цепочку INPUT или OUTPUT через firewall-cmd
Я решил сделать это так, потому что чувствовал, что если какой-то червь или вредоносная программа проникнут на мой сервер, его исходящее соединение с какой-либо страной будет считаться СВЯЗАННЫМ, УКАЗАННЫМ или УСТАНОВЛЕННЫМ, но этот метод просто добавляется в цепочку Delegate_output. кажется, работает, чтобы заблокировать все исходящие соединения, поэтому я доволен
Я более чем уверен, что кто-то может улучшить этот ответ, объяснив, как я могу поместить команду в некоторый сценарий инициализации или сценарий systemd, но я думаю, что я был бы более рад, если бы fedora просто нашла опцию, которая добавила бы ее непосредственно к основному. цепь, но, возможно, это плохая практика