Фільтрація трафіку за доменами через IP-набори (IP sets by DNS)

  • У цьому посібнику описано налаштування фільтрації трафіку з використанням IP-наборів за DNS в OpenWrt.
  • Використовується resolveip та файрвол разом із IP-наборами для розв'язання (resolve) доменів і фільтрації.
  • Фільтрувати трафік клієнтів у LAN на основі доменів через IP-набори.

Встановіть необхідні пакунки. Налаштуйте файрвол для фільтрації трафіку клієнтів LAN за допомогою IP-наборів. Налаштуйте додаткову логіку IP-наборів та hotplug-доповнення, щоб автоматично наповнювати IP-набори.

# Встановити пакунки
opkg update
opkg install resolveip
 
# Налаштування IP-наборів
uci -q delete dhcp.filter
uci set dhcp.filter="ipset"
uci add_list dhcp.filter.name="filter"
uci add_list dhcp.filter.name="filter6"
uci add_list dhcp.filter.domain="example.com"
uci add_list dhcp.filter.domain="example.net"
uci commit dhcp
 
# Фільтрація трафіку клієнтів LAN за IP-наборами
for IPV in 4 6
do
uci -q delete firewall.fwd_filter${IPV%4}
uci set firewall.fwd_filter${IPV%4}="rule"
uci set firewall.fwd_filter${IPV%4}.name="Filter-IPset-DNS-Forward"
uci set firewall.fwd_filter${IPV%4}.src="lan"
uci set firewall.fwd_filter${IPV%4}.dest="wan"
uci set firewall.fwd_filter${IPV%4}.proto="all"
uci set firewall.fwd_filter${IPV%4}.family="ipv${IPV}"
uci set firewall.fwd_filter${IPV%4}.ipset="filter${IPV%4} dest"
uci set firewall.fwd_filter${IPV%4}.target="REJECT"
done
uci commit firewall
 
# Наповнити IP-набори
ipset setup

Очистіть DNS-кеш на клієнтах і перезапустіть браузер. Перевірте, чи трафік правильно фільтрується маршрутизатором.

Зберіть і проаналізуйте наступну інформацію:

# Перезапуск служб
service firewall restart
 
# Поточна конфігурація
nft list ruleset
 
# Постійна конфігурація
uci show firewall; crontab -l

Якщо хочете керувати налаштуваннями через інтерфейс LuCI:

  • Перейдіть до LuCI → Network → Firewall → Traffic Rules → Filter-IPset-DNS-Forward для керування правилами файрволу.
  • Перейдіть до ** Network → DHCP and DNSIP sets** для керування доменами.

Перезавантажте маршрутизатор, щоб застосувати зміни.

Додайте або видаліть домени зі списку фільтрації:

# Додати домени
uci add_list dhcp.filter.domain="example.com"
uci add_list dhcp.filter.domain="example.net"
 
# Видалити домени
uci del_list dhcp.filter.domain="example.com"
uci del_list dhcp.filter.domain="example.net"
 
# Застосувати
uci commit dhcp
ipset setup

Обмежте дію фільтра лише для певних MAC-адрес:

# Обмежити за MAC-адресами
for IPV in 4 6
do
uci add_list firewall.fwd_filter${IPV%4}.src_mac="11:22:33:44:55:66"
uci add_list firewall.fwd_filter${IPV%4}.src_mac="aa:bb:cc:dd:ee:ff"
done
uci commit firewall
service firewall restart

Перевпорядкуйте правила файрволу та увімкніть обмеження за часом, щоб правила були активні лише в задані години. Також перезавантажте часовий пояс ядра, щоб правильно враховувалось літній час.

# Застосувати обмеження за часом
for IPV in 4 6
do
uci set firewall.fwd_filter${IPV%4}.start_time="21:00:00"
uci set firewall.fwd_filter${IPV%4}.stop_time="09:00:00"
uci set firewall.fwd_filter${IPV%4}.weekdays="Mon Tue Wed Thu Fri"
done
uci commit firewall
service firewall restart

Перевпорядкуйте правила файрволу, щоб обмеження за часом застосовувалися до нових з'єднань:

# Перевпорядкувати правила
cat << "EOF" > /etc/nftables.d/estab.sh
ER_RULE="$(nft -a list chain inet fw4 forward \
| sed -n -e "/\sestablished.*related.*accept\s/p")"
RJ_RULE="$(nft -a list chain inet fw4 forward \
| sed -n -e "/\shandle_reject\s/p")"
nft delete rule inet fw4 forward handle ${ER_RULE##* }
if [ -n "${RJ_RULE}" ]
then nft insert rule inet fw4 forward position ${RJ_RULE##* } ${ER_RULE}
else nft add rule inet fw4 forward ${ER_RULE}
fi
EOF
uci -q delete firewall.estab
uci set firewall.estab="include"
uci set firewall.estab.path="/etc/nftables.d/estab.sh"
uci commit firewall
service firewall restart
  • Last modified: 2025/06/01 12:03
  • by vazaz