apog
-
Публикации
68 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем apog
-
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
Коллеги, а кто использует zabbix_data для мониторинга extfilter'а? Собрал, пробую вручную запустить для проверки - zabbix_data extfilter.discovery отрабатывает как надо, а все остальное, к примеру zabbix_data worker.core.2.total_packets вываливается с ошибкой сегментирования. ОС Debian 10, ядро 4.19.0-8-amd64.
-
Кому нужен был рабочий рецепт с 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; }
-
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.
-
Пропуски на 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
-
Через мегафон удалось войти в ЛК, но отчеты не формируются
-
-
Может всё таки Вам всем объединиться в один больше пользы всем будет
https://github.com/max197616/nfqfilter
Плюсую. Мужики, спасибо, полезное дело делаете... Только заморочно метаться между репозиториями.
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
Есть ли в открытом виде вариант с использованием 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; }
-
max1976, в файле настроек конфигуратора можно указать адреса DNS для локального блэклиста. Как правильно пользоваться этим блэклистом?
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
А поподробнее? Просто если вручную то все хорошо запускается а через крон ни в какую
Нужна правильная переменная 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
-
Куплю оптический усилитель на 16 или более выходов с WDM мультиплексором. Мощность не менее 19 дБм на выход.
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
Тут каждый должен понять что он хочет, сделать систему,
что бы не один запрещенный пакет не прошел, тогда это DPI однозначно.
Или систему для отмаза типа пришли проверили ну типа фильтрует и ушли.
ИМХО абсолютная глупость заниматься скурпулезным фильтрованием. Самый правильный вариант - сделать так, чтобы тебя не наказали после очередной проверки, но при этом не заблокировать пол Интернета своим абонентам, что как раз получается при блокировании по IP. Вот потому и затеваются пляски с DPI.
-
ndpi линкуется статически, остальное - надо править configure.ac.
В переменную CFLAGS добавлял -static - не помогло. Направьте, пожалуйста, как правильно сделать. Надо играться с флагом static или все нужные библиотеки в переменной LIBS достаточно перечислить?
-
max1976, как собрать nfqfilter со статической линковкой библиотек?
-
Спасибо dnvk, буду пробовать на amd64. Авторам тоже респект.
А про параллельные процессы можно в ридми упомянуть.
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
taf_321, так он изначально был заявлен как 64-only.
Товарищи коллеги, я правильно понимаю, что на Debian 8 с архитектурой i686 даже не стоит пытаться собирать? Ткните носом, где написано 64-only
-
Сейчас выключил debug и вот теперь:
Character in 'C' format wrapped in pack at /usr/lib/perl5/Net/DNS.pm line 530
Таких строк несколько десятков вываливается. С включенным debug не замечал их потому как там и так слишком много всего выводилось в STDOUT.
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
Сделал сразу после коннекта `set names utf8`, попробуйте сейчас
Да, теперь с кириллицей порядок, по крайней мере в таблице zap2_records.
Добавил опцию
Спасибо. И, да, удачного отпуска, коллега.
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
И еще, можно в конфиг добавить опцию отключения аутентификации на SMTP сервере (на случай если свой сервер, например)?
-
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
В 175 строке похоже опечатка в расширении:
unlink $dir.'/dump.xlm';
Кириллица в БД кракозябрами.
Танцы с изменением кодировки БД на cp1251 не помогли (в sql файле со структурой базы CHARSET=utf8).
Не помогла и переконвертация dump.xml из cp1251 в utf8.
Локаль на машине ru_RU.UTF-8
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
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} в %{}. Спасибо яндексу на этот раз.
-
Думаю, лучше вообще считывать темплейт-файл запроса, заполняемый вами по своему усмотрению, а скриптом - перезаписывать в нём только requestTime
Да, спасибо, так хорошо.
-
Опубликовано · Изменено пользователем apog · Жалоба на ответ
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". Что думаете?
Блокировка сайтов провайдерами
в Программное обеспечение, биллинг и *unix системы
Опубликовано · Жалоба на ответ
Да, спасибо. Возможно на гитхабе ошибка. В getdata.h добавил строку
char* getvalue(char* s);
и заработало как надо.