root@OpenWrt:/man/ipk# iptables -I FORWARD -m string --algo bm --string "instagram" -j DROP
iptables: No chain/target/match by that name.
root@OpenWrt:/man/ipk#
Czy ktoś może zasugerować, dlaczego to nie działa?
Zależy to od tego, czy moduł łańcuchowy netfilter został wkompilowany w jądro, czy jako moduł, czy nie. Kilka lat temu i ze względu na potencjalnie wysokie użycie procesora przez moduł „string”, nie był domyślnie dostępny w jądrach Ubuntu. W ostatnich latach (nie pamiętam, kiedy dokładnie) jest on domyślnie dostępny jako moduł. Sposobem sprawdzenia jądra Ubuntu jest wyszukanie go w module konfiguracji jądra. Przykład:
doug@s17:~$ uname -a
Linux s17 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
doug@s17:~$ grep -i NETFILTER_XT_MATCH_STRING /boot/config-4.15.0-36-generic
CONFIG_NETFILTER_XT_MATCH_STRING=m
Jest więc modułem w moim systemie. Polecenie ładuje się dla mnie dobrze:
doug@s17:~$ sudo iptables -I FORWARD -m string --algo bm --string "instagram" -j DROP
doug@s17:~$ sudo iptables -v -x -n -L
Chain INPUT (policy ACCEPT 210 packets, 15763 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 STRING match "instagram" ALGO name bm TO 65535
Chain OUTPUT (policy ACCEPT 141 packets, 36585 bytes)
pkts bytes target prot opt in out source destination