Фильтр string

Home Forums Discussions Support Фильтр 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 адреса на диапазоне портов.
      Хотим заблокировать подключения из общего пула игрового сервера, ограничив разрешенным списком “своих” ребят.

      #11414
      Vadim Smirnov
      Keymaster

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

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

        #11415
        Gpower
        Participant

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

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

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

          #11417
          Vadim Smirnov
          Keymaster

            Каждый пакет в стриме содержит строку 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
                Keymaster

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

                  #11421
                  Gpower
                  Participant

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

                    #11422
                    Vadim Smirnov
                    Keymaster

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

                      #11423
                      Vadim Smirnov
                      Keymaster

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

                        #11424
                        Gpower
                        Participant

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

                          #11425
                          Vadim Smirnov
                          Keymaster

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

                            #11427
                            Vadim Smirnov
                            Keymaster

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

                              Для работы требуется последний 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

                              #11428
                              Gpower
                              Participant

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

                                #11430
                                Vadim Smirnov
                                Keymaster

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

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