25.04.2024

Fail2ban + PSD

 Router OS 6.4

PSD

/ip firewall filter 


add action=add-src-to-address-list address-list=DROP_BRUTFORCE address-list-timeout=1w3d chain=input comment="Port Scan" connection-state=invalid,new in-interface-list=WAN log=yes log-prefix=PSD_ psd=21,3s,3,1
 

Fail2ban for SSH

/ip firewall filter

add action=add-src-to-address-list address-list=DROP_BRUTFORCE address-list-timeout=1w3d chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage3
add action=add-src-to-address-list address-list=ssh_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage2
add action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage1
add action=add-src-to-address-list address-list=ssh_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp
 

Fail2Ban for Winbox

/ip firewall filter

add action=jump chain=output comment="F2B Winbox: Jump to Fail2Ban-Destination-IP chain" content="invalid user name or password" jump-target=Fail2Ban-Destination-IP protocol=tcp src-port=8291
add action=add-dst-to-address-list address-list=DROP_BRUTFORCE address-list-timeout=1w3d chain=Fail2Ban-Destination-IP comment="3 Attempt --> BlackList" dst-address-list=LoginFailure02
add action=add-dst-to-address-list address-list=LoginFailure02 address-list-timeout=2m chain=Fail2Ban-Destination-IP comment="2 Attempt --> LoginFailure02" dst-address-list=LoginFailure01
add action=add-dst-to-address-list address-list=LoginFailure01 address-list-timeout=1m chain=Fail2Ban-Destination-IP comment="1 Attempt --> LoginFailure01"

28.08.2017

Sox

sox welcome.wav -r 8000 -b 16 -c 1 -t wav Welcome.wav

24.11.2016

Tcpdump

tcpdump -i eth0 -n -s 0 udp port 5060 or tcp port 5060 or udp portrange 10000-20000 -vvv -w /tmp/capturefilename

ngrep -q -d any -p -W byline '' 'port 5060'
Взято здесь 

17.10.2016

Backup Stage4 Gentoo

Самым простым способом сохранить систему целиком, является архивирование корневого каталога, в gentoo терминологии Stage 4.

Монтируем раздел с системой

mount /dev/sda1 /mnt/linux

Переходим к подмонтированному каталогу
cd /mnt/linux/

Архивируем корень
tar cjpvf /path/to/save/at/stage4.tar.bz2 ./

c — создание архива
j — использование bzip2 алгоритма сжатия
p — сохранять атрибуты файлов(НЕ УДАЛЯТЬ!!)
v — во время выполнения записывать в консоли текущий архивируемый файл
f — выводить в файл (иначе — в стандартный вывод)

Подготовьте раздел, куда будет установлена система.
Монтируем раздел.
mount /dev/sda1 /mnt/linux

Переходим к подмонтированному каталогу
cd /mnt/linux/

Разархивируем
tar -xvjpf stage4.tar.bz2

Смените корень и войдите в систему
chroot /mnt/linux

Установите загрузчик

19.09.2016

Чтоб не забыть.

dd

Программа dd ( disk dump ), используется для копирования ( конвертирования ) дисков, разделов, и прочих операций копирования. Типичный пример:
# dd if= of= bs= conv=
Важные опции для conv:
  • notrunc не обрезать нули в файле на выходе, записывая их как нули
  • noerror продолжать после ошибок чтения
  • sync дополнять каждый входящий блок нулями до размера ibs-size

Размер входных данных по-умолчанию 512 байт (1 блок). Увеличение размера блока ускоряет процесс копирования, но требует больше памяти.

Резервное копирование и восстановление

# dd if=/dev/hda of=/dev/hdc bs=16065b                # Копировать с диска на диск с таким-же размером
# dd if=/dev/sda7 of=/home/root.img bs=4096 conv=notrunc,noerror # Резервное копирование в файл образа
# dd if=/home/root.img of=/dev/sda7 bs=4096 conv=notrunc,noerror # Восстановление из файла образа
# dd bs=1M if=/dev/ad4s3e | gzip -c > ad4s3e.gz                  # Сделать резервную копию и заархивировать в Zip
# gunzip -dc ad4s3e.gz | dd of=/dev/ad0s3e bs=1M                 # Восстановить из архива
# dd bs=1M if=/dev/ad4s3e | gzip | ssh eedcoba@fry 'dd of=ad4s3e.gz' # Что и выше, удаленно
# gunzip -dc ad4s3e.gz | ssh eedcoba@host 'dd of=/dev/ad0s3e bs=1M'
# dd if=/dev/ad0 of=/dev/ad2 skip=1 seek=1 bs=4k conv=noerror    # Пропустить MBR ( Master Boot Record ) 
# Необходимо если диск назначения (ad2) меньше.

Лечение

Программа dd считывает раздел поблочно, если на диске предположительно есть проблемы, нужно использовать опцию conv=sync,noerror, при этом dd будет пропускать битые блоки и записывать нули на диск назначения. Поэтому важно, установить размер блока, равным, или меньшим, чем размер блока на диске. Вполне подходящим будет размер блока в 1 килобайт, установить размер на входе и выходе можно опцией bs=1k. Если на диске имеются сбойные сектора, но основные данные нужно сохранить с данного раздела, можно создать файл образа, смонтировать образ и копировать данные на новый диск. С установленной опцией noerror, dd пропустит поврежденные блоки, записав на их место нули, при этом, потеряны будут, только данные, содержавшиеся в сбойных секторах диска.
# dd if=/dev/hda of=/dev/null bs=1m                   # Проверить на наличие бэд блоков
# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc | gzip | ssh \ # Отправить на удаленный хост
root@fry 'dd of=hda1.gz bs=1k'
# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc of=hda1.img    # Сохранить в образ
# mount -o loop /hda1.img /mnt                        # Создание и монтирование образа
# rsync -ax /mnt/ /newdisk/                           # Копировать на новый диск
# dd if=/dev/hda of=/dev/hda                          # Обновить 
# Обновление диска, безопасная операция, но диск при этом должен быть размонтирован.

Удаление данных

# dd if=/dev/zero of=/dev/hdc                         # Удалить все данные с диска ( забивает диск нулями )
# dd if=/dev/urandom of=/dev/hdc                      # Удалить все данные с диска ( более предпочтительный вариант )
# kill -USR1 PID                                      # Посмотреть текущее состояние dd (Linux)
# kill -INFO PID                                      # Посмотреть текущее состояние dd (FreeBSD)

Трюки с MBR ( master boot record )

MBR содержит код загрузчика и таблицу разделов. Первый 466 байт отводятся под загрузчик, 466-512 под таблицу размещения разделов.
# dd if=/dev/sda of=/mbr_sda.bak bs=512 count=1       # Сделать резервную копию MBR
# dd if=/dev/zero of=/dev/sda bs=512 count=1          # Удалить MBR и таблицу размещения разделов
# dd if=/mbr_sda.bak of=/dev/sda bs=512 count=1       # Восстановить MBR целиком
# dd if=/mbr_sda.bak of=/dev/sda bs=446 count=1       # Восстановить только загрузчик
# dd if=/mbr_sda.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # Восстановить таблицу размещения разделов

Оригинал

05.01.2016

ACL+Realtime

Создаем таблицу:
CREATE TABLE `acltable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL,
  `rule_order` int(11) NOT NULL,
  `sense` enum('permit','deny') NOT NULL DEFAULT 'deny',
  `rule` varchar(95) NOT NULL,
  PRIMARY KEY (`id`,`name`,`rule_order`,`sense`,`rule`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
В extconfig.conf говорим acls => mysql,asterisk,acltable

В данную таблицу вписываем данные:
name - имя ACL
rule_order - порядковый номер правила
sense - действие, возможно одно из 2-х: permit/deny
rule - IP/netmask 

Пример:
INSERT INTO `asterisk`.`acltable` (`name`, `rule_order`, `sense`, `rule`) VALUES ('lan', '1', 'permit', '10.0.10.0/24');
 
В таблице sippeers добавляем поле acl и добавляем имя ACL в это поле для нужного пира/транка.
  
При выполнении команды в CLI:  acl show  будет пустота.
При выполнении sip reload  применит нужный ACL.

Для обновления ACL кроме добавления записи в таблицу надо сделать module reload acl
При этом будет ошибка:
Named ACL 'lan' is already included in the ast_acl container.
chan_sip.c:31061 build_peer: Bad ACL entry in configuration line 11 : lan

Несмотря на ошибку ALC применяется, как пофиксить ошибку пока не разобрался.

Update 3.01.2016: Описание и патчи:
https://issues.asterisk.org/jira/browse/ASTERISK-24874
https://issues.asterisk.org/jira/browse/ASTERISK-24969

Realtime + register(row:callbackextension)+sip reload = Unregistered

Имеем проблему: если используем поле callbackextension в таблице Mysql и кол-во регистрации более 3-х, на меньшем не проявлялась, то при sip reload можем поиметь все регистрации со статусом Unregistered, помогает только рестарт * либо выгрузка/загрузка chan_sip.

Порывшись на просторах нашел вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23789
на момент публикации еще открытый. Патч помогает, насколько он правильный судить не могу.

--- asterisk-12.2.0/channels/chan_sip.c 2014-04-21 17:02:00.000000000 -0400
+++ asterisk-12.2.0-modified/channels/chan_sip.c        2014-05-24 20:44:28.559519094 -0400
@@ -6566,8 +6566,12 @@
        AST_SCHED_DEL(sched, reg->expire);
        AST_SCHED_DEL(sched, reg->timeout);

+       if ((reg->;registryadded))
+       {
+               ast_atomic_fetchadd_int(&regobjs, -1);
+       }
+
        ast_string_field_free_memory(reg);
-       ast_atomic_fetchadd_int(&regobjs, -1);
        ast_free(reg);
 }

@@ -9556,6 +9560,7 @@
                registry_unref(tmp, "throw away found registry");
        } else {
                ast_atomic_fetchadd_int(&regobjs, 1);
+               reg->;registryadded = 1;
                ASTOBJ_CONTAINER_LINK(&regl, reg);
        }

--- asterisk-12.2.0/channels/sip/include/sip.h  2014-04-21 17:02:00.000000000 -0400
+++ asterisk-12.2.0-modified/channels/sip/include/sip.h 2014-05-24 20:37:42.557555124 -0400
@@ -1414,6 +1414,7 @@
        struct ast_sockaddr us;  /*!< Who the server thinks we are */
        int noncecount;         /*!< Nonce-count */
        char lastmsg[256];      /*!< Last Message sent/received */
+       unsigned short registryadded:1; /*!< If this registry object is already added to registry list */

 };

 struct tcptls_packet {
Update 10.01.2016
Порывшись еще найдено еще вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23542
на момент публикации еще открытый.

--- channels/chan_sip.c    (revision 420532)
+++ channels/chan_sip.c    (working copy)
@@ -9218,11 +9218,12 @@
         reg->refresh = reg->expiry = reg->configured_expiry = default_expiry;
     }

+    ast_atomic_fetchadd_int(&regobjs, 1);
+
     /* Add the new registry entry to the list, but only if it isn't already there */
     if ((tmp = ASTOBJ_CONTAINER_FIND(&regl, reg->name))) {
         registry_unref(tmp, "throw away found registry");
     } else {
-        ast_atomic_fetchadd_int(&regobjs, 1);
         ASTOBJ_CONTAINER_LINK(&regl, reg);
     }