Фільтрація трафіку за доменами через 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 DNS → IP 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-адрес:
# Обмежити за 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