
Я использую netfilter_queue, чтобы забрать определенные пакеты из ядра и выполнить некоторую обработку над ними. Для очереди netfilter мне нужны все пакеты из определенного источникаexcept UDP packets with src port 2152 & dst port 2152.
Я пытаюсь добавить правило iptable как
iptables -A OUTPUT ! s 192.168.0.3 ! -p udp ! --sport 2905 ! --dport 2905 -j NFQUEUE --queue-num 0
iptables выдает ошибку Invalid Argument. Запрашивая dmesg, я вижу следующую ошибку print
ip_tables: udp match: only valid for protocol 17
Я попробовал следующий вариант, но возникла та же ошибка.
iptables -A OUTPUT ! s 192.168.0.3 ! -p udp --sport 2905 --dport 2905 -j NFQUEUE --queue-num 0
Можете ли вы дать совет по правильному использованию команды iptables в моем случае?
решение1
Может быть намного проще писать правила, если вы создадите цепочку, отправите все в цепочку и сделаете RETURN для всего, что вы не хотите, чтобы цепочка обрабатывала. С цепочкой вы можете добавлять другие исключения позже, не придумывая действительно запутанное правило.
iptables -t filter -N out_queue
iptables -t filter -A OUTPUT -j out_queue
iptables -t filter -A out_queue -p udp --sport 2905 -j RETURN
iptables -t filter -A out_queue -p udp --dport 2905 -j RETURN
iptables -t filter -A out_queue -j NFQUEUE --queue-num 0
решение2
Разве не должен быть знак «!» после опций?
iptables -A OUTPUT -s ! 192.168.0.3 -p udp --sport ! 2905 --dport ! 2905 -j NFQUEUE --queue-num 0
решение3
попробуйте с:
iptables -A OUTPUT -s 192.168.0.3 -p udp --sport!2905 --dport!2905 -j NFQUEUE --queue-num 0