четверг, 12 сентября 2019 г.

Эмуляция port-mapping в cisco

Часто бывает необходимо, при пробросе  извне NAT вовнутрь сети, сменить не только destination, но и source (wan) IP  адреса, чтобы не заморачиваться с наличием маршрута по умолчанию на локальном устройстве куда идет перенаправление (в этом случае достаточно иметь локальную доступность (маршрутизацию) между пограничным роутером и  целевым внутренним  пунктом назначения). В Cisco появилась опция на интерфейсах ip nat enable (в дополнении к ip nat inside,outside), которая позволяет NAT-транслировать поток 2 раза, как по входу, так и по выходу одновременно. Т.е. входящие из WAN пакеты приходят на стандартный ip nat inside source..  (стандартная конструкция на интерфейсах: ip nat outside, inside), при этом подменивается только адрес назначения на локальный, но исх. адрес (wan ip) остается прежним. Затем мы можем включить ещё одну трансляцию, которая, для уже ранее преобразованного  destinaton IP, подменяет и source IP на применяемые во внутреннем интерфейсе. Этого нельзя было достигнуть раньше, т.к. надо было иметь роли inside, outside на обоих интерфейсах одновременно. Сейчас применив команду ip nat enable мы объясняем роутеру, что нам именно это и нужно. Конфиг выглядит примерно так:

interface Vlan1
description WAN
ip address 10.100.105.224 255.255.255.0
 ip nat outside
 ip nat enable
!
interface Vlan3
 description LAN
 ip address 192.168.224.1 255.255.255.0
 ip nat inside
 ip nat enable
!
ip route 10.144.0.0 255.255.0.0 192.168.224.8
!- узлы в сети 10.144.0.0/16 знают только 192.168.224.0/24, ни ничего не знает о 10.100.105.224
!- и других IP  (10.0.1.0/24) за WAN интерфейсом
ip route 10.0.1.0 255.255.255.0 10.100.105.1
!-- нат для приема из WAN соединений на 222 порт и пересылке его во внутрь на 10.144.0.157
!-- 22 порт
ip nat inside source static tcp 10.144.0.157 22 10.100.105.224 222 extendable
!--- подменяем исх. IP с 10.0.1.ХХХ на 192.168.224.1 (Vlan3)
ip nat source list 101 interface Vlan3 overload
!-- указываем что подменяем только для 10.144.0.157  порт 22
access-list 101 permit tcp 10.0.1.0 0.0.0.255 host 10.144.0.157 eq 22

Сети 10.0.1.0/24 и 10.144.0.0/16  не имеют никакой связности, и маршрутной информации друг о друге, маршруты по умолчанию указывают на другие роутеры и т.д. Но в итоге, с узлов сети 10.0.1.0/24 можно подключиться, через примапленный порт 222  (10.100.105.224 ) и уже с другого IP (192.168.224.1) инициировать подключение к 10.144.0.157 22.







пятница, 19 октября 2018 г.

Редкий случай relay на postfix

В один прекрасный момент заметил, что MTA на входящую почту  (только) попал в список RBL (sorbs). Проверять удобно на:

http://www.anti-abuse.org/multi-rbl-check-results/?host=IP-ADDRESS_MTA

 Данный сервер был правильно настроен на запрет relay, и работал много лет, проходил все тесты:

http://www.aupads.org/cgi-bin/test-relay.cgi?host_to_test=IP_ADDRESS_MTA

ещё:

https://mxtoolbox.com/SuperTool.aspx?action=smtp:IP_ADDRESS_MTA&run=toolpage#

И при этом у него не было роли отправлять почту, и он её не получал для отправки.

Просмотрел логи и заметил, что мой MTA буквально атакует bounce сообщениями определенный домен. Почистил очередь полезной командой (в письмах был домен жертва с именем ...babyv...):
grep -l -r "babyv" |  xargs rm
Затем в  master.cf внес изменения:
#bounce    unix  -       -       n       -       0       bounce
bounce    unix  -       -       n       -       0       discard
#defer     unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       discard
#trace     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       discard

таким образом проблема решилась.




пятница, 14 сентября 2018 г.

Расширение размера диска на Ubuntu

Так получилось, что нарезали мне 100GB виртуалку не пустую, а из древнего шаблона, в котором изначально размер диска был 27GB. Вывод команды df -h был следующий:

Filesystem                1K-blocks     Used Available Use% Mounted on
udev                        1003072        0   1003072   0% /dev
tmpfs                        204812    13604    191208   7% /run
/dev/mapper/US16--vg-root  28269296 19417032   7502520  73% /
tmpfs                       1024052        0   1024052   0% /dev/shm
tmpfs                          5120        0      5120   0% /run/lock
tmpfs                       1024052        0   1024052   0% /sys/fs/cgroup
/dev/sda1                    482922   111019    346969  25% /boot
tmpfs                        204812        0    204812   0% /run/user/0


И вывод lvdisplay:

  --- Logical volume ---
  LV Path                /dev/US16-vg/root
  LV Name                root
  VG Name                US16-vg
  LV UUID                af1M0G-A0zc-fcGN-JsyM-ETuc-DOTW-YhH771
  LV Write Access        read/write
  LV Creation host, time US16, 2016-08-02 10:06:50 +0300
  LV Status              available
  # open                 1
  LV Size                <27,52 GiB
  Current LE             7044
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

Можно расширить без перезагрузки виртуальной машины, для этого (после расширения диска в конфигурации хоста в гипервизоре) выпоним команду сканирования жесткого диска:

 echo 1 > /sys/block/sda/device/rescan


дальше выполняем команду:

parted
p
(затем команду p)

Вывод: parted  (p)

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  512MB   511MB   primary   ext2         boot
 2      513MB   21,5GB  21,0GB  extended
 5      513MB   21,5GB  21,0GB  logical                lvm

Необходимо увеличить размер видимый ОС (21,5GB) до реального (107GB)
надо запомнить всё выделено зеленым и вставлять как параметры при выполнеии следующих команд:

Видно что существует extended партиция и в ней размещен логический диск
Сначала увеличим размер  extended партиции где 2 и 5 номера разделов, а 107G из отмеченных зеленым параметров, полученных ранее:

parted
(parted)  resizepart 2
End?  [21,5GB]? 107GB

(parted)  resizepart 5
End?  [21,5GB]? 107GB
(parted) quit

Затем выполняем (только для logical диска):

 pvresize  /dev/sda5

Вывод:  Physical volume "/dev/sda5" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Запустим на этом этапе:

 df -h

Вывод: 
Filesystem                 Size  Used Avail Use% Mounted on
udev                       980M     0  980M   0% /dev
tmpfs                      201M   16M  185M   8% /run
/dev/mapper/US16--vg-root   27G   19G  7,1G  73% /
tmpfs                     1001M     0 1001M   0% /dev/shm
tmpfs                      5,0M     0  5,0M   0% /run/lock
tmpfs                     1001M     0 1001M   0% /sys/fs/cgroup
/dev/sda1                  472M  109M  339M  25% /boot
tmpfs                      201M     0  201M   0% /run/user/0

Запусти команду ("/dev/mapper/US16--vg-root"  берем из  отмеченного зеленым, ранее):

 lvextend -r -l +100%FREE /dev/mapper/US16--vg-root

Вывод команды: 
  Size of logical volume US16-vg/root changed from <27,52 GiB (7044 extents) to <107,17 GiB (27435 extents).
  Logical volume US16-vg/root successfully resized.
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mapper/US16--vg-root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 7
The filesystem on /dev/mapper/US16--vg-root is now 28093440 (4k) blocks long.

Запустим снова:

 df -h
Filesystem                 Size  Used Avail Use% Mounted on
udev                       980M     0  980M   0% /dev
tmpfs                      201M   16M  185M   8% /run
/dev/mapper/US16--vg-root  106G   19G   83G  19% /
tmpfs                     1001M     0 1001M   0% /dev/shm
tmpfs                      5,0M     0  5,0M   0% /run/lock
tmpfs                     1001M     0 1001M   0% /sys/fs/cgroup
/dev/sda1                  472M  109M  339M  25% /boot
tmpfs                      201M     0  201M   0% /run/user/0

ОС увидела дополнительное место.
Перед началом каких-либо действий с дисковым пространством обязательно надо сделать snapshot виртуальной машины.







Установка Zabbix на Ubuntu

Появилась необходимость развернуть новый Zabbix под отдельный сектор мониторинга.
Т.к. прежний zabbix ставил давно и уже не помню тонкостей, решил оформить пост об актуальном процессе инсталляции.
Решаемые задачи:
1) Обновление ОС.
2) Установка необходимых компонентов ПО (mysql, apache, snmp, traceroute, nmap и т.д.)
3) Конфигурирование  mysql
4) Конфигурирование  apache
5) Конфигурирование  zabbix (zabbix.conf, глобальная автоинвентаризация, )
6) Составление списка хостов для мониторинга (nmap)
7) Настройка профилей автообнаружения (autodiscovery)
8) Настройка и запуск автообнаружения.

1.
Обновляем ubuntu по предыдущему сообщению. Дополнительно пропишем в файле
/etc/hosts названия хоста на которой будем ставить zabbix (в моем случае hostname машины был "zabbix")

127.0.0.1 zabbix
"your lan ip" zabbix

2.
Ставим утилиты snmp:

apt-get install snmp snmp-mibs-downloader

В файле /etc/snmp/snmp.conf
комментируем секцию "mibs :" (добавляем перед ней "#"):

# mibs :

запускаем скачивание mibs

sudo download-mibs
-------------------
Так получилось, что дистрибутив zabbix оказался с включенным в него mysql, я решил ставить в расчете, что mysql будет полностью изначально подготовлен для связки с zabbix (но это не так). Поэтому можно ставить mysql как обычно, если в zabbix не включает mysql:

sudo apt install mysql-server mysql-client

ввести пароль пользователя mysql "root", если спросит при инсталляции, или поставить его позже.
----------------
Если apache не стоит, то ставим (у меня уже стоял)

sudo apt install apache2
-------------------
Качаем дистрибутив zabbix:

wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb

dpkg -i zabbix-release_3.4-1+bionic_all.deb

apt update

apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
----------------
ставим остальные утилиты:

apg-get install traceroute

(если ругается, то можно добавлять  ключ --fix-missing при любой инсталляции пакетов)

apt install inetutils-traceroute --fix-missing
apt install nmap

3.
Конфигурирование Mysql. Необходимо создать БД для zabbix и наделить пользователя zabbix необходимыми правами:

если при инсталляции mysql не был задан пароль для root, то установим его сначала:
зайдем  клиентом mysql:
mysql -u root -p
получим приглашение:
mysql>

use mysql;
update user set authentication_string=PASSWORD("root-pass") where User='root';

создадим БД для zabbix:

create database zabbix character set utf8 collate utf8_bin;

дадим права:

grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix-pass';
quit;

Установим структуру таблиц для БД zabbix (я расcчитывал, что они там уже будут, если я устанавливал zabbix в одном дистрибутиве с mysql, но это было не так):

cd /usr/share/doc/zabbix-server-mysql/
gzip -d create.sql.gz
mysql -u zabbix -p zabbix < create.sql

-----------------
4.
Конфигурирование Apache:
надо раcкоментарить и установить правильную date.timezone в файле /etc/zabbix/apache.conf:
<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Moscow
</IfModule>
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Moscow
</IfModule>

5.
Конфигурирование zabbix. По умолчанию zabbix имеет минимальные настройки для своей работы, поэтому их надо сразу увеличивать, чтобы он быстро определял новые узлы и не ругался на отсутствие ресурсов. В файле /etc/zabbix/zabbix_server.conf увеличить до ~:

StartPollers=50
StartPreprocessors=64
StartPollersUnreachable=10
StartDiscoverers=64
CacheSize=128M
HistoryCacheSize=64M
HistoryIndexCacheSize=16M
TrendCacheSize=16M
ValueCacheSize=32M

Затем надо все компоненты перестартовать и зайти через веб интерфейс http://"your lan ip"/zabbix
логин: Admin (c заглавной буквы!)
пароль: zabbix
далее откроется "мастер" который запросит имя БД, пользователя БД и его пароль.
после чего zabbix начнет работать.

6.
Составим список хостов. (Хоть zabbix и имеет функционал поиска хостов по маске сети, но работает очень медленно, даже если интервал автообнаружения выставлен минимальный, 10-20 сек.). Опытным путем выяснилось, что он быстро находит хосты если они ему подаются в виде списка конкретных IP адресов. Поэтому этот список составим отдельной процедурой, используя NMAP (мне нужны были устройства Cisco):

nmap 192.168.0-255.1-254 -A -O -sU -p U:161 -oG - | grep -i cisco | awk '/161\/open/{print $2","}'

будет ответ типа:
192.168.1.1,
192.168.2.1,
и т.д. , запятые нужны чтобы их не вставлять самому, т.к. заббиксу они нужны.

7.
Настройка профилей автообнаружения
а) В глобальных настройках: Administaration>General>Other
указать: Default host inventory mode - Automatic
(это нужно, что бы обнаруженные хосты вносили свои инвентарные данные (название узла, версия софта, шасси и т.д.) в таблицу сразу, иначе в каждый хост
придется заходить и править эту опцию).


б) Создадим профили автообнаружения:
для начала создадим "host group", это нужно чтобы увидеть его на главном дашборде.
Сonfiguration> host groups> create host group
назовем его "Discovered hosts"
Затем создадим шаблон: configuration> host groups> create template
Назовем его: "1-auto-discover"
в нем укажем, что он принадлежит хост группе "Discovered hosts"
в  "linked templates" выбрать "Template Net Cisco IOS SNMPv2" (в нем все для Cisco, что мне нужно),
затем в "Macros" добавить {$SNMP_COMMUNITY} , если community  отличается от "public".

Теперь настроим правило автообнаружения:
Сonfiguration>Discovery>Create riscovery rule
назовем его "routers"
"Update interval" укажем 20
в поле "Check" добавим snmp v2 agent и укажем community
в OID  укажем "SNMPv2-MIB::sysDescr.0",
создадим и второй "Check" с OID  "SNMPv2-MIB::sysName.0"
в "IP range" вставляем наш список полученный NMAP, с запятыми (после последнего ip адреса ставить ничего не надо)
ОБЯЗАТЕЛЬНО убираем галочку "Enable".

Создадим будущее действие с обнаруженными хостами (поэтому и не включали ещё правило обнаружение):
Сonfiguration>Actions>Create action
Назовем его: "Auto discovery routers move to 1-auto-discover"
Type of calculation - AND
Conditions  -
A) discovery rule routers
B) Discovery status = Up
C) Service type = SNMPv2 agent

переходим  в секцию "Operations"
Operations:
Add to host groups: Discovered hosts
Link to templates: auto-1-cisco
Добавляем-сохраняем, проверяем что  галочка Еnable на данном Action "Auto discovery routers move to 1-auto-discover" установлена.
затем переходим снова на Сonfiguration>Discovery> Разрешаем наше правило обнаружения "routers"
переходим на дашборд и ожидаем появления обнаруженных хостов в группе "Discovered hosts"


четверг, 6 сентября 2018 г.

обновление bind в ubuntu

Обновление версий конкретного пакета в линуксах, и убунту в часности, приводит к необходимости полного апдейта всей операционной системы, т.к. зависимости нового пакета часто касаются и системных библиотек. В устаревшей системе, как правило репозитории тоже устарели и новых версий пакетов в них нет. В Убунту у каждого релиза есть кодовое имя, а сервера с дистрибутивами одни и те же. Т.о. первым делом надо обновить файл:
 /etc/apt/sources.list
(обновлять надо последовательно, от версии к версии, если Убунта не говорит прямо что можно перескакивать через несколько версий , проверить можно  здесь:
https://help.ubuntu.com/community/UpgradeNotes
т.е. сценарий перехода с 15.04 к 18.04 будет следующим: 15.04 -> 16.04 -> 18.04)

закоментарить старые записи и внести новые, взять их можно здесь (для 18.04):
https://gist.github.com/jackw1111/d31140946901fab417131ff4d9ae92e3
или по аналогии поиском.
Затем убедиться что репо подхватились командой:
apt-get update
затем:
apt-get upgrade -f bind9  --fix-missing
(опцию fix-missing добавляем , если вдруг не захочет ставиться)
затем:
do-release-upgrade (если понадобится)

проверить релиз можно командой:
lsb_release -r

проверить версию bind можно:
apt-cache policy bind9

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

Затем надо перезагрузиться с консоли и удостовериться что всё загрузилось и работает штатно.




вторник, 13 марта 2018 г.

Обновление прошивки свистка

Как-то попался свисток MF823, решил проверить и собрать  рабочие выдержки с 4pda 
1) https://4pda.ru/forum/index.php?showtopic=484477&st=6260#entry57780759
- качаем прошивку от билайна MF823WEBDL_B04.exe http://homenet.beeline.ru/files/usb/MF823WEBDL_B04.rar&e=57780759
2)  включаем USB-РОУТЕР  без сим карты, запускаем программу  MF823WEBDL_B04.exe. Ждем когда в процессе обновления прошивки в каталоге  C:\Users\(ваш аватар)\AppData\Local\Temp\ (или  C:\Windows\Temp) появится папка OneKeyUpdate,  а в ней файл  Channel0.nv , копируем его себе в отдельный каталог.
3)  генерируем себе имеи от андроид или видовсфоне на ресурсе http://www.nokiaport.de/tacdatabase/index.php?s=imeitools&lng=
4)  на ресурсе https://docs.google.com/spreadsheets/d/1mOYZd8DB2nZq77gJdMHuZXsfkEWol6CoPQsknlpPDFw/edit?copiedFromTrash#gid=0
5)  вставляем этот имеи и получаем 9 чисел.
6)  через HEX-editor  открываем файл Channel0.nv и смотрим Ofsset 0xBF44 он же 48960,
и меняем 9 чисел на табличные (сверху вниз)



7)  ждем когда успешно пройдет прошивка. Вытаскиваем роутрер, и включаем заново. Удаляем каталог  OneKeyUpdate (от предыдущего прошивания).
8)  Запускаем прошивку заново, ждем снова  появления каталога OneKeyUpdate, а в нём файла Channel0.nv, заменяем нашим и ждем окончания прошивки.
9)  Вставить чужую симку, и включить в USB, зайти на 192.168.0.1. имеи д.б. новый.

Разлочка:
1)  https://4pda.ru/forum/index.php?showtopic=484477&st=0#entry26861883
2)  Скачать и установить драйвера https://4pda.ru/forum/dl/post/3741344/ZTEDrvSetup.zip
3)  Воткнуть роутер (без симки) , и перейти по ссылке:
http://192.168.0.1/goform/goform_process?goformId=MODE_SWITCH&switchCmd=FACTORY
в Диспетчере Устройств появится 3 устройства - ZTE Diagnostics Interface, ZTE Proprietary USB Modem и ZTE NMEA Device.  Если номер порта ZTE Diagnostics Interface получился >9, то измените его в свойствах ДУ на порт из диапазона 1...9. Запомнить этот номер. Для примера, пусть это будет COM5. Если номер пришлось изменить, то ОТКЛЮЧИТЬ модем и подключите снова.
4) Скачать и распоковать файл
https://4pda.ru/forum/dl/post/3741352/diag1F40_F0AA.zip
5) Запустить CMD.exe с правами Администратора. Выполнит команду:
 copy /b diag1F40_F0AA.bin COM5 (или другой порт, который был назначен в п.3)
заходим терминалкой на сом-порт ZTE NMEA Device (номер смотреть в ДУ)
6) Отключить cd-rom: AT+ZCDRUN=8
7) Вернуться в рабочий режим: AT+ZCDRUN=F

Фиксацция TTL:
1) По https://4pda.ru/forum/index.php?showtopic=484477&st=2680#entry42332369
Включаем роутер (он уже разлочен и выходит в интернет) , подключаемся телнетом к 192.168.0.1 , логин root пароль zte9x15 , переходим в корневой каталог: cd /, качаем файлик:
wget http://vve.su/files/misc/MF823/ttl64.tgz
распаковываем: tar zxvf ttl64.tgz
затем удаляем архив: rm ttl64.tgz
перезагружаемся: reboot

проверяем: iptables -t mangle -L

Включение TLS в postfix

Недавно понадобилось поставить на SUSE MTA Postfix и  включить TLS в нем.
После инсталляции МТА упорно не хотел принимать подключения на все интерфейсы кроме loopback, даже после прописи всех нужных строк в  /etc/postfix/main.cf 
 inet_interfaces = all
mynetworks_style = subnet
mynetworks = 10.0.2.0/24, 127.0.0.0/8
раньше этого было достаточно, но в этом случае по прежнему не принимал соединения.

пришлось погуглить и поправить еще одну строчку в файле /etc/postfix/master.cf
было - smtp inet n - n - - smtpd
стало - 0.0.0.0:smtp inet n - n - - smtpd

Затем пришла очередь включать TLS:

- сгенерировать приватный ключ и сертификат:
openssl req -new -x509 -nodes -out postfix.pem -keyout postfix.pem -days 3650 
 (оба запишутся в один файл postfix.pem, который можно скопировать в /etc/postfix/)
затем прописать в /etc/postfix/main.cf  следующие строки:

smtpd_tls_cert_file = /etc/postfix/postfix.pem
smtpd_tls_key_file = /etc/postfix/postfix.pem
smtpd_use_tls = yes
smtp_use_tls = yes
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom

раньше этого было достаточно, но сейчас только появилась, в списке доступных команд, STARTTLS, но криптосоединение неустанавливалось с 
Error: "TLS not available due to local problem"
- всё перерыл, менял версии, но помогло только включение опции в /etc/postfix/master.cf
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
(по умолчанию выключена, причем она выключена и в старых машинках, где TLS исправно работает) 

проверить TLS можно на след. ресурсе:
https://www.checktls.com/perl/live/TestReceiver.pl

ругнетёся на selfsigned сертификат, но рисковать настоящим, выставляя его на почтовый сервер я не решился.

Можно поднять немного безопасность в виде указания SPF записи в DNS для почтового домена, где указать другим MTA, что почту можно принимать только с mail exchanger, которые есть в MX записи для домена, типа:
     IN      TXT     v=spf1 mx  -all