Фильтр string

Home Forums Discussions Support Portal Фильтр string

Viewing 15 posts - 1 through 15 (of 20 total)
  • Author
    Posts
  • #11411
    Gpower
    Participant

    Доброго времени суток Вадим Смирнов, надеюсь не потрачу много вашего времени попросив помощи в решении вот такой задачки.

    Каждый день в силу некоторых обстоятельств мне приходится пользоваться iptables с перепрошитым роутером на DD-WRT.

    Правило которое мне необходимо невозможно изобразить ни через powershell ни через любую другую существующую утилиту.

    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 76561198923445525 -j ACCEPT

    Глядя на ваши труды, я вижу что здесь изображена функция фильтра и вроде тут имеется правильный (-match) параметр определяющий значение в пакетном фильтре.

    Задача заблокировать все пакеты в которых НЕ содержится HEX или просто string значение для IP адреса на диапазоне портов.
    Хотим заблокировать подключения из общего пула игрового сервера, ограничив разрешенным списком “своих” ребят.

    • This topic was modified 1 month, 3 weeks ago by Gpower.
    • This topic was modified 1 month, 3 weeks ago by Gpower.
    #11414
    Vadim Smirnov
    Moderator

    В принципе ничего сложного, в этом примере решается почти подобная задача. Я бы еще добавил фильтр для диапазона портов, чтобы не гонять через user space весь трафик.

    Нужна помощь с конкретным кодом?

    #11415
    Gpower
    Participant

    Да я сам обычный читатель с бюджетом в 100 баксов ищу фрилансера который напишет по вашему примеру экзешник.
    Простой GUI при запуске скачивающий вашу библиотеку и после скачки открывающий диалог с тремя вариантами выбора, на 6 на 8 и на 12 человек.
    Выбрав например первый вариант появляется 6 окошек, в каждое вставляем steam id каждого из друзей. Жмем lock и прогич сам парсит ID’ы в сетевые правила для фильтра для каждого ID’а в диапазоне udp портов 27000:27100.
    Фильтр просто проверяет пакеты на steam id’ы и если они не подходят под вышеупомянутый список делает drop.

    Было б здорово если б я сам мог это все сделать, буду искать исполнителя на каких нибудь сайтах 🙂

    Буду изучать пример.

    • This reply was modified 1 month, 3 weeks ago by Gpower.
    #11417
    Vadim Smirnov
    Moderator

    Каждый пакет в стриме содержит строку ID?

    Если GUI не принципиален, то наверное могу набросать пример, может еще кому-нибудь будет полезно… ID можно из INI файла подтянуть или в командную строку передать, интерфейс рисовать для такой аппликухи лишняя морока…

    #11418
    Gpower
    Participant

    Я был бы признателен и мог бы заплатить, за рабочий вариант правила разрешающего конкретный HEX или циферный ид(значение) на диапазон портов. Тоесть нужен конкретно аналог вот этой команды.

    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 76561198923445525 -j ACCEPT

    таким образом мы использовав 6 таких правил получаем запрет всех остальных участников на подключение.

    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 7656119892654674567 -j ACCEPT
    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 765611989246576445525 -j ACCEPT
    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 7656119892344677525 -j ACCEPT
    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 76561198924665525 -j ACCEPT
    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 7656119892377725 -j ACCEPT
    iptables -I FORWARD -s 192.168.1.100 -p udp –dport 21000:21200 –match string –algo kmp –string 76561198923433325 -j ACCEPT

    Все остальные идут таким правилом в DROP
    iptables -I FORWARD -s 192.168.1.100 -p udp --dport 27000:27200 --match string --algo kmp --hex-string '|73 74 65 61 6d 69 64 3a 37 36 35 36|' -j DROP

    #11419
    Gpower
    Participant

    Итогом получается, мы залетаем в рандомный пул противников, но разрешаем только игрокам из своего листа к нам подключится, а остальных обрубаем.

    Извините если увлек вас своими игрульками, я уверен тема будет интересна и в контексте фаерволла, если настраивать ваш драйвер как цензор или фильтр пакетов по определенным значениям.

    #11420
    Vadim Smirnov
    Moderator

    В принципе ничего сложного, надо только подумать как сделать что-то более-менее универсальное и при этом не слишком сложное. Писать парсер для IPTABLES как-то не хочется, наверное проще будет определить собственные правила в JSON формате. Поразмыслю на досуге над спецификацией…

    #11421
    Gpower
    Participant

    Я тогда буду мониторить этот тред с надеждой 🙂

    #11422
    Vadim Smirnov
    Moderator

    Я начал потихоньку накидывать прототип, постараюсь сделать что-то несложное, но расширяемое. Как будет что-то рабочее – напишу в этой ветке.

    #11423
    Vadim Smirnov
    Moderator

    В правиле ‘76561198923445525’ это ASCII строка в теле пакета?

    #11424
    Gpower
    Participant

    На деле это текст из пакета. Тоесть мы разрешаем все пакеты содержащие вот эти цифры на заданном диапазоне портов. И дропаем все пакеты на этих портах если там нету этих цифр, как ключ.

    #11425
    Vadim Smirnov
    Moderator

    Хорошо, спасибо. Я уже частично набросал формат правил навроде упрощенного IPTABLES в JSON формате, чтобы можно было загрузить массив правил из файла. Если будет время, то может закончу до выходных, сам фильтр на готовых правилах сделать несложно.

    #11427
    Vadim Smirnov
    Moderator

    Еще очень сырой, но попробуйте.

    Для работы требуется последний WinpkFilter. Правила загружаются из файла config.conf, пример одного правила есть в архиве: блокирует TCP пакеты по подстроке ntkernel.com, соответственно не дает зайти на https://www.ntkernel.com, так как имя домена находится в SNI.

    Для примера, другое правило, блокирует http://www.ntkernel.com по IP:

     {
        "direction":"forward",
        "interface_name":"{C0420ADB-B1CD-4B01-845F-5BB41EE08687}",
        "source_ip_address":null,
        "destination_ip_address":{"address":"40.122.67.8","mask":"255.255.255.255"}
        "ip_protocol":"tcp",
        "source_port_range":null,
        "destination_port_range":[443,443],
        "string_match":null,
        "action":"drop"
        }

    direction: возможные значения input, output, forward
    FORWARD имеет несколько иной смысл чем в никсах, здесь он означает что правило будет примененно как к исходящим так и к входящим пакетам.

    interface_name: GUID сетевого интерфейса, если null – применяется ко всем доступным сетевым адаптерам.

    source_ip_address и destination_ip_address указываются в формате как в примере выше.

    ip_protocol: допустимые значения кроме null:

    enum class ip_protocol :uint8_t
    	{
    		/* dummy for IP */
    		ip = 0,
    		/* control message protocol */
    		icmp = 1,
    		/* group management protocol */
    		igmp = 2,
    		/* gateway^2 (deprecated) */
    		ggp = 3,
    		/* tcp */
    		tcp = 6,
    		/* pup */
    		pup = 12,
    		/* user datagram protocol */
    		udp = 17,
    		/* xns idp */
    		idp = 22,
    		/* UNOFFICIAL net disk proto */
    		nd = 77,
    		/* raw IP packet */
    		raw = 255
    	};

    source_port_range и destination_port_range – диапазоны портов, с ними все понятно

    string_match: ASCII строка для поиска в пакете

    action: допустимые значения accept и drop

    • This reply was modified 1 month, 1 week ago by Vadim Smirnov. Reason: Updated link
    #11428
    Gpower
    Participant

    Простите, отмечал день рождения, затянулось, сегодня буду тестить.

    #11430
    Vadim Smirnov
    Moderator

    Вернулся сегодня к этому коду, в предыдущей версии была ошибка в поиске подстроки. Здесь поправил.

Viewing 15 posts - 1 through 15 (of 20 total)
  • You must be logged in to reply to this topic.