Попробуйте изучить показатели маршрута. Вы должны иметь возможность отсортировать это, вставив два маршрута по умолчанию с разными метриками в свою таблицу маршрутизации. Метрики используются для определения стоимости маршрута, маршрут с более низкой стоимостью считается лучшим и будет выбран по сравнению с другим путем с более высокой стоимостью.
Если вы хотите, чтобы ваш LAN-интерфейс был вашим основным маршрутом, вы назначаете ему более низкую метрику, чем WLAN. Таким образом, у вас всегда будет работать WLAN, но она не будет использоваться, если интерфейс LAN не будет недоступен.
Для этого можно использовать iproute2. iproute2
Ваши команды будут выглядеть примерно так:
ip ro add 0.0.0.0 0.0.0.0 via 192.168.1.1 dev eth0 metric 1
ip ro add 0.0.0.0 0.0.0.0 via 192.168.2.1 dev wlan metric 50
Не забудьте удалить предварительно установленный маршрут по умолчанию.
Чтобы завершить ответ @roaima, и на самом деле только потому, что вам нужны все мелкие детали, вот причина, по которой эти два правила ниже не могут совпадать в большинстве конфигураций:
--append INPUT --proto all --fragment --jump DROP
и
--append INPUT --proto icmp --match u32 ! --u32 "0x4&0x3fff=0x0" --jump DROP
--match u32 ! --u32 "0x4&0x3fff=0x0"
— это просто запутанный низкоуровневый -метод записи --fragment
, за исключением того, что он может включать в себя флаг MF в дополнение :смещение фрагмента (+ флаг MF )— это слово u32 в смещение 4 в IP-пакете (0x4
), в части младших битов(&0x3fff
):ненулевое значение эквивалентно наличию фрагмента (или объявлению дополнительных фрагментов ).
Но поскольку (по крайней мере)--match state
загружается модуль nf_conntrack
, для которого, в свою очередь, требуется модуль nf_defrag_ipv4
. Эта дефрагментация выполняется с PREROUTING
ловушкой приоритетом -400 , таким образом, не позволяя чему-либо после видеть фрагменты, а только заново собранный повторно собранный пакет. Более поздние ядра позволяют загружать таблицу raw
с более низким приоритетом :
# modinfo -p iptable_raw
raw_before_defrag:Enable raw table before defrag (bool)
что позволяет видеть эти пакеты, но только в необработанной таблице (, где явно нельзя использовать conntrack ).
Теперь, чтобы быть действительно тщательным, в отличие от моего предыдущего примера, по умолчанию Debian buster не будет использовать ip_tables
или какие-либо iptable_*
модули, потому что для iptables
Debian buster использует по умолчанию iptables-nft
, который представляет собой iptables, переведенный поверх nftables, но все же иногда использует iptables -расширения ' xt_*
модули.
ОБНОВЛЕНИЕ :Это по-прежнему позволит использовать и работать модуль u32
, но предотвратит попытку изменить правило через nft (, например, невозможно сохранить, а затем восстановить, и эмуляция на данный момент всегда будет выбирать приоритет -300 для цепочкиraw/PREROUTING
).
root@buster-amd64:~# update-alternatives --display iptables|head -3
iptables - auto mode
link best version is /usr/sbin/iptables-nft
link currently points to /usr/sbin/iptables-nft
# iptables -A INPUT -p udp --fragment -j DROP
# iptables -A INPUT -p icmp --match u32 ! --u32 "0x4&0x3fff=0x0" -j DROP
# iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -p udp -f -j DROP
-A INPUT -p icmp -m u32 ! --u32 "0x4&0x3fff=0x0" -j DROP
# nft --debug=netlink list ruleset -a
ip filter INPUT 4
[ meta load l4proto => reg 1 ]
[ cmp eq reg 1 0x00000011 ]
[ payload load 2b @ network header + 6 => reg 1 ]
[ bitwise reg 1 = (reg=1 & 0x0000ff1f ) ^ 0x00000000 ]
[ cmp neq reg 1 0x00000000 ]
[ counter pkts 0 bytes 0 ]
[ immediate reg 0 drop ]
ip filter INPUT 5 4
[ meta load l4proto => reg 1 ]
[ cmp eq reg 1 0x00000001 ]
[ match name u32 rev 0 ]
[ counter pkts 4 bytes 4096 ]
[ immediate reg 0 drop ]
table ip filter { # handle 5
chain INPUT { # handle 1
type filter hook input priority 0; policy accept;
meta l4proto udp ip frag-off & 8191 != 0 counter packets 0 bytes 0 drop # handle 4
meta l4proto icmp # u32 ! "0x4&0x3fff=0x0" counter packets 4 bytes 4096 drop # handle 5
}
chain FORWARD { # handle 2
type filter hook forward priority 0; policy accept;
}
chain OUTPUT { # handle 3
type filter hook output priority 0; policy accept;
}
}
Обратите внимание, что дескриптор правила #5 имеет комментарий перед u32
не потому, что он не работает, а потому, что он не может быть обработан собственным nft
.Дамп байт-кода не будет отображать фактическую проверку полезной нагрузки, которая хранится в другом месте, но будет вести себя так, как предполагалось, и счетчик будет увеличиваться при получении и удалении фактического фрагмента.
Я бы предположил, что ваши комбинации флагов (правило 6 и последующие)почти все подпадают под действие правила 2, --state INVALID
.
Я применяю довольно строгий набор правил на одном из моих общедоступных -серверов, а настраиваемый fail2ban
сидит прямо там, вверху. (Я провожу три страйка и ты вылетаешь на пару часов, а три аута — бан на месяц. С парой исключений на основе IP-адреса -, чтобы предотвратить полную блокировку.)
Это (урезанная )версия моего rules.v4
набора
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
...
# Exceptions to allow suitably authorised traffic
...
-A INPUT -j LOG --log-level info --log-prefix "firewall: REJECT "
-A INPUT -j REJECT
Количество соответствующих пакетов от iptables --line-numbers -nvL INPUT
с начала месяца
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 97753 26M f2b-recidive tcp -- * * 0.0.0.0/0 0.0.0.0/0
2 94046 26M f2b-XXXXXXXXXXXX tcp -- * * 0.0.0.0/0 0.0.0.0/0
3 94046 26M f2b-XXXXXXXXXXXX tcp -- * * 0.0.0.0/0 0.0.0.0/0
4 88576 26M f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0
5 902K 333M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
6 2463M 2399G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
7 1152 52453 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
...
19 417K 13M ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
20 56921 4276K LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "firewall: REJECT "
21 56921 4276K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Как видите, мы получаем довольно много пакетов с неверными данными, но в основном это простые проверки TCP/IP. И большинство из них запускают правила fail2ban
, как и должны.