Перейти к содержимому
Калькуляторы

apog

Пользователи
  • Публикации

    68
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем apog


  1. В 21.03.2020 в 13:30, big-town сказал:

    Я использую и я же его написал и как видите у меня все в порядке.

    111.jpg

    Да, спасибо. Возможно на гитхабе ошибка. В getdata.h добавил строку

    char* getvalue(char* s);

    и заработало как надо.

  2. Коллеги, а кто использует zabbix_data для мониторинга extfilter'а? Собрал, пробую вручную запустить для проверки - zabbix_data extfilter.discovery отрабатывает как надо, а все остальное, к примеру zabbix_data worker.core.2.total_packets вываливается с ошибкой сегментирования. ОС Debian 10, ядро 4.19.0-8-amd64.

  3. Кому нужен был рабочий рецепт с ipset:

     

    Есть ли в открытом виде вариант с использованием ipsеt вместо bgpd?

     

    Вот мой вариант работы через ipset:

    На бордере есть четыре списка ipset - dropnets, dropnetsrunning, tofilternets, tofilternetsrunning

     

    Для блокирования запрещенных ip работает такое правило:

    iptables -A FORWARD -m set --match-set dropnetsrunning dst -j DROP

     

    Для перенаправления трафика на сторонний сервер с nfqfilter используется Policy-Routing:

    iptables -t mangle -A PREROUTING ! -s 1.2.3.4/32 -m set --match-set tofilternetsrunning dst -j MARK --set-mark 3
    ip route add default via 10.10.10.10 table 3
    ip rule add fwmark 3 table 3

     

    На сервере с nfqfilter трафик nat-ится, 1.2.3.4 - это внешний интерфейс, 10.10.10.10 - внутренний интерфейс.

     

    Для обновления списков ipset взял за основу скрипт от max1976, выбросил лишнее, и вот что получилось:

     

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use utf8;
    use Config::Simple;
    use DBI;
    use File::Basename;
    use Log::Log4perl;
    use Net::IP qw(:PROC);
    use Net::CIDR::Lite;
    
    binmode(STDOUT,':utf8');
    binmode(STDERR,':utf8');
    
    my $dir = File::Basename::dirname($0);
    
    my $Config = {};
    Config::Simple->import_from($dir.'/zapret-ipset.conf', $Config) or die "Can't open ".$dir."/zapret-ipset.conf for reading!\n";
    Log::Log4perl::init( $dir.'/zapret-ipset-log.conf' );
    
    my $logger=Log::Log4perl->get_logger();
    
    my $db_host = $Config->{'DB.host'} || die "DB.host not defined.";
    my $db_user = $Config->{'DB.user'} || die "DB.user not defined.";
    my $db_pass = $Config->{'DB.password'} || die "DB.password not defined.";
    my $db_name = $Config->{'DB.name'} || die "DB.name not defined.";
    
    ###my @resolvers = $Config->{'NS.resolvers'} || ();
    
    my $dbh = DBI->connect("DBI:mysql:database=".$db_name.";host=".$db_host,$db_user,$db_pass,{mysql_enable_utf8 => 1}) or die DBI->errstr;
    $dbh->do("set names utf8");
    
    my $only_ip=0;
    my $total_entry=0;
    my %ip_s;
    my %ip6_s;
    my %ip_s_null;
    my %ip6_s_null;
    my %already_out;
    
    my $ip_cidr=new Net::CIDR::Lite;
    my $ip_cidr_null=new Net::CIDR::Lite;
    my $ip6_cidr=new Net::CIDR::Lite;
    my $ip6_cidr_null=new Net::CIDR::Lite;
    
    my @ip_list;
    my @ip6_list;
    my @ip_list_null;
    my @ip6_list_null;
    
    # Выборка IP из таблицы zap2_ips
    my $sth = $dbh->prepare("SELECT ip FROM zap2_ips UNION SELECT ip FROM zap2_only_ips");
    $sth->execute;
    while (my $ips = $sth->fetchrow_hashref())
    {
    my $ip=get_ip($ips->{ip});
    next if($ip eq "0.0.0.0" || $ip eq "0000:0000:0000:0000:0000:0000:0000:0000");
    my $ip_version=ip_get_version($ip);
    if($ip_version == 4)
    {
    	$ip_cidr->add_any($ip);
    } elsif ($ip_version == 6)
    {
    	$ip6_cidr->add_any($ip);
    }
    }
    $sth->finish();
    # Конец выборки IP из таблицы zap2_ips
    
    # Выборка IP из таблицы zap2_only_ips
    $sth = $dbh->prepare("SELECT ip FROM zap2_only_ips");
    $sth->execute;
    while (my $ips = $sth->fetchrow_hashref())
    {
    my $ip=get_ip($ips->{ip});
    next if($ip eq "0.0.0.0" || $ip eq "0000:0000:0000:0000:0000:0000:0000:0000");
    my $ip_version=ip_get_version($ip);
    if($ip_version == 4)
    {
    	$ip_cidr_null->add_any($ip);
    } elsif ($ip_version == 6)
    {
    	$ip6_cidr_null->add_any($ip);
    }
    }
    $sth->finish();
    # Конец выборки IP из таблицы zap2_only_ips
    
    @ip_list=$ip_cidr->list();
    %ip_s = map { $_ => 1 } @ip_list;
    @ip6_list=$ip6_cidr->list();
    %ip6_s = map { $_ => 1 } @ip6_list;
    @ip_list_null=$ip_cidr_null->list();
    %ip_s_null = map { $_ => 1 } @ip_list_null;
    @ip6_list_null=$ip6_cidr_null->list();
    %ip6_s_null = map { $_ => 1 } @ip6_list_null;
    
    $logger->debug("ipset flush tofilternets");
    system("ipset", "flush", "tofilternets");
    foreach my $ip (@ip_list)
    {
    system("ipset", "add", "tofilternets", $ip);
    }
    $logger->debug("ipset swap tofilternets");
    system("ipset", "swap", "tofilternets", "tofilternetsrunning");
    
    $logger->debug("ipset flush dropnets");
    system("ipset", "flush", "dropnets");
    foreach my $ip (@ip_list_null)
    {
    system("ipset", "add", "dropnets", $ip);
    }
    $logger->debug("ipset swap dropnets");
    system("ipset", "swap", "dropnets", "dropnetsrunning");
    
    $dbh->disconnect();
    
    sub get_ip
    {
    my $ip_address=shift;
    my $d_size=length($ip_address);
    my $result;
    if($d_size == 4)
    {
    	$result=ip_bintoip(unpack("B*",$ip_address),4);
    } else {
    	$result=ip_bintoip(unpack("B*",$ip_address),6);
    }
    return $result;
    }
    

     

  4. nfqfilter

     

    35 пропусков, к примеру один из низ http://37.139.28.143:8001/

    в файлах и в базе есть, но не блокирует - открывается

     

    вот полный список http://paste.org.ru/?bh817y

     

    пропуски там где url этой айпишник и где не стандартные порты

     

    У меня тоже, по крайней мере на той неделе 52.50.87.120:16869.

     

    Пока так и не нашёл причину и зависимость почему у некоторых всё отлично, а у других пропуски. Вроде все нужные патчи есть.

     

    При этом используется sslips = /home/nfqfilter/contrib/ssl_ips и block_undetected_ssl = true

     

    yKpon, hsvt, а какие сборки nfqfilter используете? У меня такая же проблема. У меня сборка патченная тов. myth, block_undetected_ssl тоже включен и файл с айпишниками присутствует. Пока решаю проблему просто закрыв пропускаемые урлы по IP.

  5. Пропуски на nfq по IP+port (SSL)

     

     <content id="383265" includeTime="2016-11-14T17:33:39" entryType="1" hash="BFCCD9E7E674688979F7C7C3D5DFF5D7">
       <decision date="2016-11-09" number="2-6-27/2016-10-18-38-È" org="ÍÑ"/>
       <url><![CDATA[https://52.50.87.120:16869/ru/]]></url>
       <domain><![CDATA[52.50.87.120]]></domain>
       <ip>52.50.87.120</ip>
     </content>

     

    Как бороться, есть еще у кого такое ?

    Подтверждаю, есть такое. Сборка от тов. myth

  6. Может всё таки Вам всем объединиться в один больше пользы всем будет

     

    https://github.com/max197616/nfqfilter

    https://github.com/Vans1/nfqfilter

    https://github.com/myth11/nfqfilter

    Плюсую. Мужики, спасибо, полезное дело делаете... Только заморочно метаться между репозиториями.

  7. Есть ли в открытом виде вариант с использованием ipsеt вместо bgpd?

     

    Вот мой вариант работы через ipset:

    На бордере есть четыре списка ipset - dropnets, dropnetsrunning, tofilternets, tofilternetsrunning

     

    Для блокирования запрещенных ip работает такое правило:

    iptables -A FORWARD -m set --match-set dropnetsrunning dst -j DROP

     

    Для перенаправления трафика на сторонний сервер с nfqfilter используется Policy-Routing:

    iptables -t mangle -A PREROUTING ! -s 1.2.3.4/32 -m set --match-set tofilternetsrunning dst -j MARK --set-mark 3
    ip route add default via 10.10.10.10 table 3
    ip rule add fwmark 3 table 3

     

    На сервере с nfqfilter трафик nat-ится, 1.2.3.4 - это внешний интерфейс, 10.10.10.10 - внутренний интерфейс.

     

    Для обновления списков ipset взял за основу скрипт от max1976, выбросил лишнее, и вот что получилось:

     

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use utf8;
    use Config::Simple;
    use DBI;
    use File::Basename;
    use Log::Log4perl;
    use Net::IP qw(:PROC);
    use Net::CIDR::Lite;
    
    binmode(STDOUT,':utf8');
    binmode(STDERR,':utf8');
    
    my $dir = File::Basename::dirname($0);
    
    my $Config = {};
    Config::Simple->import_from($dir.'/zapret-ipset.conf', $Config) or die "Can't open ".$dir."/zapret-ipset.conf for reading!\n";
    Log::Log4perl::init( $dir.'/zapret-ipset-log.conf' );
    
    my $logger=Log::Log4perl->get_logger();
    
    my $db_host = $Config->{'DB.host'} || die "DB.host not defined.";
    my $db_user = $Config->{'DB.user'} || die "DB.user not defined.";
    my $db_pass = $Config->{'DB.password'} || die "DB.password not defined.";
    my $db_name = $Config->{'DB.name'} || die "DB.name not defined.";
    
    ###my @resolvers = $Config->{'NS.resolvers'} || ();
    
    my $dbh = DBI->connect("DBI:mysql:database=".$db_name.";host=".$db_host,$db_user,$db_pass,{mysql_enable_utf8 => 1}) or die DBI->errstr;
    $dbh->do("set names utf8");
    
    my $only_ip=0;
    my $total_entry=0;
    my %ip_s;
    my %ip6_s;
    my %ip_s_null;
    my %ip6_s_null;
    my %already_out;
    
    my $ip_cidr=new Net::CIDR::Lite;
    my $ip_cidr_null=new Net::CIDR::Lite;
    my $ip6_cidr=new Net::CIDR::Lite;
    my $ip6_cidr_null=new Net::CIDR::Lite;
    
    my @ip_list;
    my @ip6_list;
    my @ip_list_null;
    my @ip6_list_null;
    
    # Выборка IP из таблицы zap2_ips
    my $sth = $dbh->prepare("SELECT ip FROM zap2_ips UNION SELECT ip FROM zap2_only_ips");
    $sth->execute;
    while (my $ips = $sth->fetchrow_hashref())
    {
    my $ip=get_ip($ips->{ip});
    next if($ip eq "0.0.0.0" || $ip eq "0000:0000:0000:0000:0000:0000:0000:0000");
    my $ip_version=ip_get_version($ip);
    if($ip_version == 4)
    {
    	$ip_cidr->add_any($ip);
    } elsif ($ip_version == 6)
    {
    	$ip6_cidr->add_any($ip);
    }
    }
    $sth->finish();
    # Конец выборки IP из таблицы zap2_ips
    
    # Выборка IP из таблицы zap2_only_ips
    $sth = $dbh->prepare("SELECT ip FROM zap2_only_ips");
    $sth->execute;
    while (my $ips = $sth->fetchrow_hashref())
    {
    my $ip=get_ip($ips->{ip});
    next if($ip eq "0.0.0.0" || $ip eq "0000:0000:0000:0000:0000:0000:0000:0000");
    my $ip_version=ip_get_version($ip);
    if($ip_version == 4)
    {
    	$ip_cidr_null->add_any($ip);
    } elsif ($ip_version == 6)
    {
    	$ip6_cidr_null->add_any($ip);
    }
    }
    $sth->finish();
    # Конец выборки IP из таблицы zap2_only_ips
    
    @ip_list=$ip_cidr->list();
    %ip_s = map { $_ => 1 } @ip_list;
    @ip6_list=$ip6_cidr->list();
    %ip6_s = map { $_ => 1 } @ip6_list;
    @ip_list_null=$ip_cidr_null->list();
    %ip_s_null = map { $_ => 1 } @ip_list_null;
    @ip6_list_null=$ip6_cidr_null->list();
    %ip6_s_null = map { $_ => 1 } @ip6_list_null;
    
    $logger->debug("ipset flush tofilternets");
    system("ipset", "flush", "tofilternets");
    foreach my $ip (@ip_list)
    {
    system("ipset", "add", "tofilternets", $ip);
    }
    $logger->debug("ipset swap tofilternets");
    system("ipset", "swap", "tofilternets", "tofilternetsrunning");
    
    $logger->debug("ipset flush dropnets");
    system("ipset", "flush", "dropnets");
    foreach my $ip (@ip_list_null)
    {
    system("ipset", "add", "dropnets", $ip);
    }
    $logger->debug("ipset swap dropnets");
    system("ipset", "swap", "dropnets", "dropnetsrunning");
    
    $dbh->disconnect();
    
    sub get_ip
    {
    my $ip_address=shift;
    my $d_size=length($ip_address);
    my $result;
    if($d_size == 4)
    {
    	$result=ip_bintoip(unpack("B*",$ip_address),4);
    } else {
    	$result=ip_bintoip(unpack("B*",$ip_address),6);
    }
    return $result;
    }
    

     

  8. А поподробнее? Просто если вручную то все хорошо запускается а через крон ни в какую

    Нужна правильная переменная PATH. Пропишите настройки запуска скрипта примерно таким образом:

    cat /etc/cron.d/zapret
    SHELL=/bin/bash
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    35 * * * * root /path/to/zapret.pl

  9. Тут каждый должен понять что он хочет, сделать систему,

    что бы не один запрещенный пакет не прошел, тогда это DPI однозначно.

    Или систему для отмаза типа пришли проверили ну типа фильтрует и ушли.

    ИМХО абсолютная глупость заниматься скурпулезным фильтрованием. Самый правильный вариант - сделать так, чтобы тебя не наказали после очередной проверки, но при этом не заблокировать пол Интернета своим абонентам, что как раз получается при блокировании по IP. Вот потому и затеваются пляски с DPI.

  10. ndpi линкуется статически, остальное - надо править configure.ac.

     

    В переменную CFLAGS добавлял -static - не помогло. Направьте, пожалуйста, как правильно сделать. Надо играться с флагом static или все нужные библиотеки в переменной LIBS достаточно перечислить?

  11. taf_321, так он изначально был заявлен как 64-only.

    Товарищи коллеги, я правильно понимаю, что на Debian 8 с архитектурой i686 даже не стоит пытаться собирать? Ткните носом, где написано 64-only

  12. Сейчас выключил debug и вот теперь:

    Character in 'C' format wrapped in pack at /usr/lib/perl5/Net/DNS.pm line 530

    Таких строк несколько десятков вываливается. С включенным debug не замечал их потому как там и так слишком много всего выводилось в STDOUT.

  13. Сделал сразу после коннекта `set names utf8`, попробуйте сейчас

    Да, теперь с кириллицей порядок, по крайней мере в таблице zap2_records.

    Добавил опцию

    Спасибо. И, да, удачного отпуска, коллега.

  14. В 175 строке похоже опечатка в расширении:

    unlink $dir.'/dump.xlm';

     

    Кириллица в БД кракозябрами.

    Танцы с изменением кодировки БД на cp1251 не помогли (в sql файле со структурой базы CHARSET=utf8).

    Не помогла и переконвертация dump.xml из cp1251 в utf8.

    Локаль на машине ru_RU.UTF-8

  15. Wingman, что-то у меня не работает...

    $ ./zapret.pl
    Type of arg 1 to keys must be hash (not hash element) at ./zapret.pl line 359, near "}) "
    Execution of ./zapret.pl aborted due to compilation errors.

     

    со строки 359 в скрипте такой код:

        foreach my $k (keys $data->{content}) {
    eval {
    my ( $decision_number, $decision_org, $decision_date, $entry_type, $include_time );
    $decision_number = $decision_org = $decision_date = $entry_type = '';
    my $decision_id = $k;
    $entry_type = '';

     

    Что не так делаю?

     

    Upd:

    Уж не знаю на сколько корректно выкрутился, но кажется помогло вот что:

        foreach my $k (keys %{$data->{content}}) {

    То есть заключил $data->{content} в %{}. Спасибо яндексу на этот раз.

  16. p.s. Вынес конфиг в отдельный файл; небольшие косметические правки; положил на гитхаб: https://github.com/ircop/zapret

     

    Спасибо за скриптик, коллега. Только пришел на форум спросить о непонятных =comment и =cut в 960-й и 966-й строчках соответственно, как вижу уже обновленная версия есть.

    Хотел вот еще что... предложить заменить "# This must be in cp1251:" на нечто вроде "/usr/bin/iconv -f UTF8 -t WINDOWS-1251 $req_file -o $req_file". Что думаете?