Skip to content

By Тодор in Uncategorized

Както всички телефони, и моят се препълни със снимки и клипове.
Включвам го с УСБ кабел към компютъра и започвам да копирам. По най-стандартния уиндоусовски начин – копи от телефона, пасте на диска на компютъра. Да, ама върви със скорост все едно през телефонна линия го правя. Беше късно, не ми се занимаваше, реших да го оставя да се изкопира през нощта. На другия ден поглеждам какво става и за около 10 часа беше изкопирало 9%. А данните общо са около 30ГБ. Надушвам конспирация! Нарочно са го направили така, за да не могат хората да си копират файловете, а да им ползват облаците. Прекратих го. Обмислях варианта просто да извадя картата памет от телефона и да си взема файловете директно от нея, но исках да опитам и още нещо.

Дали няма да мога да си помогна с Android Debug Bridge?

Необходимо е да се активира “Отстраняване на УСБ грешки”, което се намира в “Настройки > Опции на програмиста”. Менюто “Опции на програмиста” по принцип е скрито, и за да се покаже е необходимо първо да отворим “Всичко за телефона” и да натискаме бързо 10-15 пъти върху “Номер на версията”.

ADB e разархивиран някъде на компютъра. Пускам командния ред (cmd) и отивам в директорията на ADB.
Първо влизам в телефона и проверявам къде точно са снимките или файловете, които ще копирам:

>adb shell
HWVNS-H:/ $ df -h
Filesystem                          Size  Used Avail Use% Mounted on
rootfs                              1.3G   14M  1.3G   2% /
tmpfs                               1.3G  544K  1.3G   1% /dev
tmpfs                               1.3G     0  1.3G   0% /mnt
none                                1.3G     0  1.3G   0% /sys/fs/cgroup
/dev/block/dm-0                     1.8G  1.8G   17M  100% /system
/dev/block/dm-1                     580M  394M  173M  70% /vendor
/dev/block/dm-2                     182M  101M   77M  57% /product
/dev/block/dm-3                      27M  412K   26M   2% /version
/dev/block/dm-4                     182M   95M   83M  54% /cust
/dev/block/bootdevice/by-name/cache 248M  164K  243M   1% /cache
tmpfs                               1.3G     0  1.3G   0% /storage
/dev/block/dm-5                      10G  8.9G  1.4G  87% /data
/data/media                          10G  8.9G  1.3G  87% /storage/emulated
/dev/fuse                            30G   28G  2.0G  94% /storage/4308-131B

32GB-товата ми SD-карта е ясна – /storage/4308-131B.

Още малко ориентиране:

$ cd /storage/4308-131B
HWVNS-H:/storage/4308-131B $ ls
Android DCIM Download Huawei HuaweiBackup LOST.DIR Pictures backup z

Директорията със снимките е DCIM. Излизам от телефона:
exit

Копиране:
adb pull /storage/4308-131B/DCIM/Camera c:\todor\

След няколко секунди става ясно, че скоростта на копиране е коренно различна. Сега е сравнимо с нормална USB2 флашка. 30те ми ГБ се изкопираха за по-малко от час.

Има и противоположна команда push, с която пък могат да бъдат копирани файлове в другата посока – към телефона.

Наздраве!

Tags: , , , , , , , , , , , ,

By Тодор in Cisco, Linux

Маршрутизаторите и комутаторите също имат нужда от архивиране! Не че това ще направи подмяната на изгорял рутер удоволствие, но ще е значително по-лесно. А и решението е почти контрол на версиите – с един commit на ден, което помага и при синдрома “вчера работеше”.
Най-лесния начин, за който се сещам е автоматична бекъпвачка с Ansible.

Попълваме инвентара в текстов файл горе-долу по тоя пример (ios-inventory):

[all:vars]
backup_dest="/ios_backups/"
date_stamp="{{ ansible_date_time.year }}{{ ansible_date_time.month }}{{ ansible_date_time.day }}-{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}"
ansible_connection=local
ansible_user=ansible
ansible_password=na-baba-mi-parolata
ansible_become_method=enable

[sw1]
192.168.0.254
[sw2]
192.168.0.253
[sw3]
192.168.0.252

После създаваме следния ямълски плейбук (playbook.yml):

---
- name: Cisco IOS backup job
  hosts: all
  gather_facts: yes
  strategy: free

  tasks:
    - name: Collecting remote facts
      ios_facts:
        gather_subset:
          - all
    - name: Create backup root folder
      file:
        path: "{{ backup_dest }}"
        state: directory
      run_once: yes
    - name: Create backup device folder
      file:
        path: "{{ backup_dest }}{{ ansible_net_hostname }}"
        state: directory
      run_once: yes
    - name: Saving configuration to file
      copy:
        content: "{{ ansible_net_config }}"
        dest: "{{ backup_dest }}{{ ansible_net_hostname }}/{{ inventory_hostname }}-{{ date_stamp }}.txt"

Изпълняваме ето така:
ansible-playbook -i ios-inventory playbook.yml

Добавяйки абсолютните пътища до файловете, тоя ред го мушваме в крон за ежедневно изпълнение и с това връзваме гащите.
Ако имената и паролите за достъп до техниката са различни, то, където е необходимо, променливите с името и паролата ги слагаме на реда с ИП адреса, разделени с интервал.
Ретеншън може да се поддържа с logrotate.

Сега може да си пиете бирата все едно мрежата е архивирана 🙂
Наздраве!

Tags: , , , ,

By Тодор in Linux

Изходни данни за ситуацията

  • Трябва да се инсталира линукс сървър.
  • Нямаме фиизчески достъп до сървъра.
  • Сървъра няма out-of-band управление (iLO, LOM, IPMI и т.н.).
  • Сървъра разполага с ethernet връзка към Интернет.
  • На място (при сървъра) има човек, който може да окаже някакво съдействие. Ще го наречем бай Иван.

План за действие

  • Ще направим имидж (ISO), който ще изпратим на бай Иван, за да го качи на флашка и да зареди сървъра от него.
  • От флашката ще се заредят достатъчно “неща”, които да ни осигурят отдалечен и сигурен достъп до машината, за да продължим инсталацията.

Изпълнение

Ще използваме minimal образ на Ubuntu 20.04 LTS, защото е изключително малък и ще бъде лесно да бъде изпратен на бай Иван.
Образа е наличен тук.
Отваряме ISO-то и редактираме txt.cfg. Той би трябвало да съдържа следните редове:

label install
menu label ^Install
menu default
kernel linux
append vga=788 initrd=initrd.gz --- quiet

Редактираме последният ред (всичко е на един ред):
append vga=788 initrd=initrd.gz console-setup/layoutcode=us locale=en_US.UTF-8 keyboard-configuration/layoutcode=us languagechooser/language-name=English countrychooser/shortlist=BG localechooser/supported-locales=en_US.UTF-8 hostname=ubuntuserver domain=local interface=auto url=http://kamenitza.org/files/preseed.cfg ipv6.disable=1 ---

Нещата, които този ред върши са сравнително ясни и самообясняващи се. По-интересни са

  • interface=auto – Автоматична настройка на мрежовия интерфейс (DHCP).
  • url=http://kamenitza.org/files/preseed.cfg – Съдържа предврителен избор на опции от инсталацията.

Ако в мрежата няма DHCP сървър и IP-то трябва да се настрои ръчно, interface=autо се замества със следните примерни параметри:
netcfg/get_ipaddress=192.168.150.111 netcfg/get_netmask=255.255.255.0 netcfg/get_gateway=192.168.150.1 netcfg/get_nameservers=8.8.8.8 netcfg/disable_dhcp=true

За редакция на ISO файл в Уиндоус няма особено работещи безплатни програмчета. Аз ползвах WinISO, което в триал/демо режим върши работа за малки образи.
По наша преценка се прави бутваща USB флашка (с Rufus) или CD или DVD.
Горещо препоръчвам ползването на възможно най-пълен preseed.cfg, за да се елиминира ръчния труд при повторно изпълнение на задачата:

d-i preseed/early_command                   string anna-install network-console
d-i debian-installer/locale                 string en_US.UTF-8
d-i localechooser/supported-locales         multiselect en_US.UTF-8
d-i console-setup/ask_detect                boolean false
d-i keyboard-configuration/layoutcode       string en
d-i anna/choose_modules                     string network-console
d-i network-console/authorized_keys_url     string http://kamenitza.org/files/ssh-key.txt
d-i mirror/country                          string Bulgaria
d-i mirror/http/hostname                    string bg.archive.ubuntu.com
d-i mirror/http/mirror                      select bg.archive.ubuntu.com
d-i mirror/http/proxy                       string
d-i passwd/user-fullname                    string Todor Kandev
d-i passwd/username                         string tkandev
d-i passwd/user-password-crypted            password $5$ceFBePtE$n0S0.mW1tQQUYH4RPfshNIWd/vilV3E2NhBkUWk/yd0
d-i clock-setup/utc                         boolean false
d-i time/zone                               string Europe/Sofia
d-i clock-setup/ntp                         boolean true
d-i clock-setup/ntp-server                  string bg.pool.ntp.org
d-i pkgsel/update-policy                    select none
d-i apt-setup/services-select               none
d-i apt-setup/universe                      boolean true
d-i tasksel/first multiselect               standard system utilities, OpenSSH server
d-i preseed/late_command                    string \
    in-target mkdir -p /home/tkandev/.ssh; \
    echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN1hQH5HHB8U2PUbUn7nwYUHm0jdz3URoFdYZY1+QSVk kandev-v2" > /target/home/tkandev/.ssh/authorized_keys; \
    in-target chown tkandev:tkandev /home/tkandev/.ssh -R; \
    in-target sed -i s/#PasswordAuthentication\ yes/PasswordAuthentication\ no/g /etc/ssh/sshd_config; \
    apt-install mc net-tools
d-i finish-install/reboot_in_progress       note

Опциите са достатъчно говорящи и самообясняващи се. Основна опция тук е network-console/authorized_keys_url. Представлява URL адрес до SSH ключа, който ще се ползва за автентикация при инсталацията. Трябва да е достъпен по HTTP (не HTTPS). Друго интересно е създаването на потребител, задаването на парола, добавянето на SSH ключ, включването на този потребител в sudoers и забраняването за ползване на пароли при влизане през SSH. Паролата на потребителя се генерира ето така:
mkpasswd -m sha-256

Сега бай Иван трябва да буутне сървъра с нашия имидж и да избере опцията за инсталация по подразбиране. След няколко минути всичко спира на следния екран:
Linux network instal
Може да си знаем адреса, а може и бай Иван да ни го изпрати по някакъв начин. Инструкциите са ясни. Свързваме се с дадения IP адрес по SSH с потребител installer, като се автентикираме с личния си ключ. Довършваме инсталацията с всичко, което липсва от preseed фйла.

Наздраве! 🙂

Tags: , , , , ,

By Тодор in Uncategorized

Ползвал съм собственоръчно направени НАС-ове, било то полу-готови с Freenas, изградени от стандартна Linux дистрибуция или напълно готови хардуерни решения, за които съм писал и преди. В крайна сметка най-доволен останах от Synology. Не защото е перфектно, а защото има най-малко проблеми и бъгове.
Разбира се че е пълно с бъгове! Пакетът му с основни приложения е абсолютен качамак! Нито снимките можеш да си архивираш по някакъв полезен начин, нито файловете. Но целта на поста не е да правя ревю на продукта, а да споделя един особено дразнещ и неприятен дефект.

Притежавам един от малките модели – DS218+. Машинката е закачена за APC UPS, има и комуникационен кабел между нея и UPS-a, за да ѝ е по-ясно каква е ситуацията с тока. Включена е 24/7, като е разрешено единствено да гаси дисковете, ако не се ползват известно време.
Няколко пъти намирам НАС-а загасен. Ама все едно съм му натиснал копчето и се е изключил. А още по-неприятното е, че не може и да се включи. След натискане на бутона, светва, развърта вентилатора, но не развърта дисковете и след 10сек се изключва отново. После пак натискам бутона и стискам палци. И така понякога от 5-тия, понякога от 10-тия опит, вземе, че развърти дисковете и тръгне.

Актуализирах софтуера. Сканирах за грешки. Проверявах захранващия блок. Не открих проблем.
Единствената закономерност, която открих е, че, ако извадя единия или и двата диска, след като се е самозагасил, и натисна копчето, зарежда веднага. Не открих в Интернет някой да е писал за дискова несъвместимост, а и ползвам доста стандартни дискове – 4TB HGST (HDN726040ALE614).
Все още не се предавам и не звъня в гаранционния сервиз за рекламация!

След поредната проверка на конфигурацията и търсене на скрити детайли или каквито и да е улики за проблема из интерфейса на устройството се натъквам на следната опция:
DS218+ Problem

Естествено това беше включено. Даже кой би си помислил, че такава екстра няма да си я има бай-дизайн вградена и ще се налага ръчно да я пускаш и спираш!?

Ами изключих я и проблемите изчезнаха! Вече повече от година не се е самоизключвало.

Наздраве!

Tags: , , , , , , , , , , , , , , ,

By Тодор in Linux

Натъкнах се на неочаквана мотика при комуникацията от контейнер към самия себе си, но през публичния му адрес.

Очаквано тук трябва да се случат някои гимнастики с iptables, за да има двупосочна транслиране, известно още като nat reflection или hairpin nat. Да, обаче пак не работи!

В крайна сметка се оказва, че Docker си прави всичко сам, ама само, ако си поискаме 🙂

Вградената userland proxy услуга трябва да бъде спряна, за да се получи това, което желаем, а именно, ако контейнера ни е с адрес 172.17.0.2, който от Интернет е достъпен на 70.80.90.100, да можем от самия контейнер да се свържем към адреса 70.80.90.100 и това да бъде правилно транслирано от хоста обратно към контейнера.

На кратко:

Създаваме файл /etc/docker/daemon.json със следното съдържание:

{
"userland-proxy": false
}

И рестартираме докер услугата:

systemctl restart docker

Дали се е получило можем да видим от следния параметър на ядрото на ОС съдържаща контейнерите (трябва да е със стойност 1):

# sysctl net.ipv4.conf.docker0.route_localnet
net.ipv4.conf.docker0.route_localnet = 1

Tags: , , , , , , , , , , , ,

By Тодор in Фун

Като млад, зелен и бесен метъл пишех разни щуротии на Паскал и Делфи. Прости инструментчета или шеговити програми от сорта на тази в чиято памет е този пост. Писана е някъде 1999-2000-та година – сиреч преди ДВАЕСЕ години! Т.е. аз съм вече чичка…

Компютъра ми по онова време беше Cyrix 6×86 PR166 с 16MB RAM и чернобял монитор. Уиндоуса беше ’95, а линукса – Red Hat 5 (Hurricane) с ядро 2.0. Най бързата връзка с Интернет беше 2.5КБ/с през домашния телефон на дядо ми и съм чакал по цяла нощ, за да сваля новата песен на Гуано Ейпс от Напстера…

Качвам си играта ТУК, да ми седи за спомен, че хостинга на официалния ѝ сайт фалира преди години. Бахур Хак Тийм също се оказаха няк’ви несериозници…

Хав фун! 😉

Tags: , , , ,

By Тодор in Linux

Онлайн скенерите, с които Интернет е претъпкан са основна отправна точка за “втвърдяването” (hardening) на всеки уеб сървър. Много от препоръките, които дават са ясни, точни и лесни за изпълнение. Голяма част от тях обаче правят така, че някои уеб страници спират да работят или в най-добрия случай започват да се държат неадекватно.

Едни от най-популярните са internet.nl и ssllabs.

Основни настройки на Apache

ServerSignature Off
ServerTokens Prod
Header set X-Frame-Options: "sameorigin"
Header set X-XSS-Protection "1; mode=block"
Header set Referrer-Policy "no-referrer"
Header set X-Content-Type-Options: "nosniff"
SSLStrictSNIVHostCheck On
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
SSLOpenSSLConfCmd DHParameters /etc/apache2/dhparam
Options -Indexes -FollowSymLinks
SSLProtocol TLSv1.2

А следното трябва да фигурира в конфигурацията на всеки виртуален сайт:

SSLProtocol TLSv1.2
Protocols h2 http/1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Изтегляне на правилните Дифи-Хелман параметри (файла вече сме го посочили по-горе):
curl https://ssl-config.mozilla.org/ffdhe4096.txt > /etc/apache2/dhparam

Изтеглянето на този файл наистина е важно и има значение. По последни данни саморъчното генериране на DH е пълна скръб и не трябва да се практикува. Задълбано инфо по темата има тук.

Примера е за Апач, но хедърите са същите какъвто и да е уеб сървъра. Разлика има единствено в това, как се подават в конфигурацията.

 

Tags: , , , , , , , , , ,

By Тодор in Linux

Що пък да не си направим LAMP (linux+apache+mysql+php) в докер контейнер?

  • Портативно
  • Съвместимо
  • Лесно за размножаване и разкрасяване
  • Винаги подходящата версия за претенциозни приложения

Започнах с Alpine Linux, като един от най-подходящите за подобни цели, но се оказа че пакета на Апач има редица проблеми, а и разнообразието от готови допълнителни пакети е леко бедно и щеше да се наложи ръчна компилация на това-онова.

В крайна сметка се спрях на последния наличен Ubuntu Server, който към този момент е 18.04. А до няколко дни ще излезе 20.04 и ще актуализирам.

Готов контейнер качвам в Docker Hub. А изходния код и рецептата за забъркване, в Github.

На кратко:

  • Файловете на уеб сайтовете, базата данни, логовете и сертификатите са съхранени извън контейнера.
  • Контейнера онаследява часовата зона на основния сървър.
  • Ползва се PHP-FPM. Процеса е сравнително оптимизиран за стандартно ползване.
  • MariaDB работи в режим TCP/IP, като поддържа SSL/TLS криптиране на трафика. Конфигурацията е оптимизирана.
  • Ежедневна крон задача проверява сертификатите на уеб сайтовете и автоматично издава Letsencrypt сертификати при нужда.
  • Конфигурацията на Апач е оптимизирана по всички основни препоръки за сигурност и съвместимост.

Ще се радвам, ако свърши работа и на някой друг, освен мен 🙂

Tags: , , , , , , ,

By Тодор in Мрън-мрън

След многобройни промени през годините и подскачане от шрифт на шрифт, винаги с частичен и никога задоволителен успех, попаднах на подходящ, който мога да приема за стандарт в сайта. Шрифта се нарича Iosevka и е с отворен код. Чист, ясен и лесен за очите.
Изглежда ми много добре! Доволен съм!

By Тодор in Linux

Според издателя на квалифицирания електронен подпис, инсталацията му в линукс е предизвикателство от различно ниво. Приемам, че подписа е коректно инсталиран според заводската му документация, и че плъгина на Firefox работи.

Това е достатъчно, за да се влезе в почти всеки сайт искащ удостоверяване с КЕП. Включително и в портала с електронни услуги, предоставяни от Националната Агенция по Приходите (НАП).

За да свършим някаква работа в този портал, обаче, само удостоверяването при влизане не е достатъчно. Всичко, което се попълва и изпраща, трябва да е допълнително подписано. А това става с… Java приложение разбира се 🙂

В Linux Mint 19.03 е необходимо да се инсталира icedtea-netx:

sudo apt install icedtea-netx

След това вече jnlp-то може да се изпълни, за да видим това:

StampIT LocalServices cannot start: access denied (“java.util.PropertyPermission” “com.sun.net.httpserver.HttpserverProvider” “read”)

И тук приказквата свършва.

Всичкото търсене води до стари документи обясняващи как да ползваме вече не съществуващи плъгини и методи. Firefox ликвидира Java плъгина преди време, защото е твърде голяма дупка.

Необходимо е да се инсталира “оригиналният” пакет Oracle Java.

Изтегляме актуалната Жава от https://java.com/en/download/linux_manual.jsp

След, като се разкомпресира пакета, се мести на подходящо място:

sudo mkdir -p -v /opt/java/64
sudo mv -v jre1.* /opt/java/64

Правим новото JRE по подразбиране:

sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/64/jre1.8.0_241/bin/java" 1
sudo update-alternatives --set java /opt/java/64/jre1.8.0_241/bin/java

Добра идея е да ограничим размера на дисковия кеш след това:

/opt/java/64/jre1.8.0_241/bin/ControlPanel

 

И сега, най-ключовия момент – да кажем на icedtea да ползва новата Жава, вместо вградената:

Това е всичко.

Приятно подаване и подписване!

Tags: , , , , , , , , , , ,

By Тодор in Linux

Най-бързия начин за генериране на частен ключ и SSL сертификат известен на човечеството:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 42000 -subj "/C=BG/ST=Plovdiv/L=Plovdiv/O=Kamenitza.ORG/OU=IT Department/CN=kamenitza.org"
И съответно да се конвертира във формат разбираем от Windows:
openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem
А за да може да се ползва и от MySQL/MariaDB, личният ключ трябва да се превърне във формат PKCS#1:
openssl rsa -in key.pem -out key.pem

By Тодор in Mikrotik

Вероятно много “колеги” ще си помислят, че да се конфигурира IPSec/L2TP тунелче е далеч по-съвместимо откъм клиентксата част – поддържа се “извън кутията” от всичко от Windows XP насам. Андроид, IOS, Windows имат вграден клиент за такъв тип тунел, което значи, че не е необходимо да се инсталира допълнителен софтуер. Не, че не може, но не е задължително.
Напрактика обаче, не е толкова сладко, колкото звучи 🙂
Ще го обясня максимално разбираемо и минимално подробно – ipsec-esp, ike и l2tp трафика е гаден за рутиране и често нещата изобщо не се случват, ако в мрежата има NAT. Най-обичайната ситуация е да седнете в заведение с наличен свободен безжичен Интернет, който изглежда като да работи, обаче VPN тунела не успява да се закачи. И всичко това, защото са сложили рутер, който се е паднал от пакет зрънчо или нарочно са блокирали nat-traversal, без който ще видим ipsec само през крив макарон.

И така, следващото достатъчно съвместимо, достъпно, безплатно и т.н. решение се явява OpenVPN. Има клиенти за всякакви устройства и операционни системи. Може да се ползва в режим dial-up за пътуващи “работници”, а може и като site-to-site, свързвайки цели мрежи. Изключително гъвкав протокол, може да работи по TCP или по UDP на порт по избор. Минава през всякакви рутери, нескопосано маршрутизиране и куци NAT-ове.
Сървър може да се конфигурира на OpenWRT, Mikrotik и други достъпни решения, както за вкъщи, така и за офиса.

Ще опиша пример със сървър на Mikrotik.

Създаване на пул от адреси за клиентите:
/ip pool add name=remote-pool ranges=10.10.10.100-10.10.10.120

Добавяме профил:
/ppp profile add local-address=10.10.10.1 name=openvpn remote-address=remote-pool use-encryption=required
10.10.10.1 е ИП-то на LAN (вътрешния) интерфейса.

Създаваме си потребител:
/ppp secret add name=todor password=p4ssW00 profile=openvpn

Без сертификат, обаче няма да минем:

/certificate add name=vpn-cert common-name=vpn.kamenitza.org days-valid=3650
/certificate sign 0
/certificate export-certificate 0

С тези команди ще бъде издаден, подписан и експортнат 10 годишен сертификат за домейна vpn.kamenitza.org. Изнесения сертификат е съхранен във файл на рутера.

Вземаме публичния ключ:

/file print detail
 0 name="flash" type="disk" creation-time=jan/01/1970 02:00:03
 1 name="cert_export_vpn-cert.crt" type=".crt file" size=1192 
   creation-time=nov/28/2018 22:34:18 contents=
     -----BEGIN CERTIFICATE-----
     MIIDQzCCAiugAwIBAgIIS74buY1yHXAwDQYJKoZIhvcNAQELBQAwHDEaMBgGA1UE
     AwwRdnBuLmthbWVuaXR6YS5vcmcwHhcNMTgxMTI4MjAzMzIyWhcNMjgxMTI1MjAz
     MzIyWjAcMRowGAYDVQQDDBF2cG4ua2FtZW5pdHphLm9yZzCCASIwDQYJKoZIhvcN
     AQEBBQADggEPADCCAQoCggEBAMBP8cDeknHKYPXCvgZkT+KeNXmjazXmcShNtGY6
     uUcuVbPBOn6FcqA/VwSAdVeNnkY0IqZM1zHCr/kXtgWVGNld2/GnkGCoNgm6SrkZ
     O6dZraC/B3LRIRLp0OR0aZ8/vTO3TwSP+/M/3rWKcs5LdpS8SoheHZBbcK43/qB1
     dR2si5sWJ4l34ketjuJrduzxxD+TE4QLwovMzNyE9S+tKidBBN+/PEJDv3njUZwe
     II+CN0JwosEZ2FfW7MYsx1kUyYZtrBUjCjxerMom9iQR9gWUpsey3yhNKGCDHe/v
     z1h3vkZ5znDAjf/uRbnwGRHkUbIiZ1XKIhmOnPnlgqw4qasCAwEAAaOBiDCBhTAP
     BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBtjAdBgNVHSUEFjAUBggrBgEF
     BQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFBHDtmEAUdv54tr/tRHkHWu9BA5lMCQG
     CWCGSAGG+EIBDQQXFhVHZW5lcmF0ZWQgYnkgUm91dGVyT1MwDQYJKoZIhvcNAQEL
     BQADggEBACa76JK+oUgYddfrfABWGEQDDvSUv37Sfo4WqqokM1r4xuQsF8V+/oEO
     ifdTTX4r/48tohct+jRBCW5vh6Jkx5mVie8MlhFG5oY1dxtd/M9F1Kc6PpyRipCw
     yvuJFOU8ESxEQSwFsElckvaamc09fw55rUgaFmMebuhleXUuyg7WAPUlLSgeGqyd
     RB4lOitA4qmOgEBIUs7Y6jiUe44orWzgGrQGP9zoI8aPwRGvKJoe11PCocrEJvIM
     xMcHyOdrqECY4LlgNLoDGRXJYASWSqTzPvl4TAH1ffKhdp+aUP3/EoHYaF2nu8fD
     wYHuD/lP0Cy21zbobDaFPF4iKdAk2qc=
     -----END CERTIFICATE-----

Всичко между BEGIN CERTIFICATE и END CERTIFICATE, включително, ще ни трябва за конфигурирането на клиента.

Остана и интерфейса:

/interface ovpn-server server
set auth=sha1 certificate=vpn-cert cipher=aes256 default-profile=openvpn 
    enabled=yes mode=ip netmask=24 port=1194 require-client-certificate=no

Евентуално ще трябва да отворим tcp/1194 на фиревала.

Харесва ми възможността отдалечените клиенти да са в същата мрежа, в която са и LAN клиентите, но за да работи изобщо тази екстра, която е на ръба на стандартите, трябва да се активира proxyarp на вътрешния интерфейс.

Клиенската конфигурация изглежда по следния начин:

dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
auth-user-pass
resolv-retry infinite
remote vpn.kamenitza.org 1194 tcp-client
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDQzCCAiugAwIBAgIIS74buY1yHXAwDQYJKoZIhvcNAQELBQAwHDEaMBgGA1UE
AwwRdnBuLmthbWVuaXR6YS5vcmcwHhcNMTgxMTI4MjAzMzIyWhcNMjgxMTI1MjAz
MzIyWjAcMRowGAYDVQQDDBF2cG4ua2FtZW5pdHphLm9yZzCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMBP8cDeknHKYPXCvgZkT+KeNXmjazXmcShNtGY6
uUcuVbPBOn6FcqA/VwSAdVeNnkY0IqZM1zHCr/kXtgWVGNld2/GnkGCoNgm6SrkZ
O6dZraC/B3LRIRLp0OR0aZ8/vTO3TwSP+/M/3rWKcs5LdpS8SoheHZBbcK43/qB1
dR2si5sWJ4l34ketjuJrduzxxD+TE4QLwovMzNyE9S+tKidBBN+/PEJDv3njUZwe
II+CN0JwosEZ2FfW7MYsx1kUyYZtrBUjCjxerMom9iQR9gWUpsey3yhNKGCDHe/v
z1h3vkZ5znDAjf/uRbnwGRHkUbIiZ1XKIhmOnPnlgqw4qasCAwEAAaOBiDCBhTAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBtjAdBgNVHSUEFjAUBggrBgEF
BQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFBHDtmEAUdv54tr/tRHkHWu9BA5lMCQG
CWCGSAGG+EIBDQQXFhVHZW5lcmF0ZWQgYnkgUm91dGVyT1MwDQYJKoZIhvcNAQEL
BQADggEBACa76JK+oUgYddfrfABWGEQDDvSUv37Sfo4WqqokM1r4xuQsF8V+/oEO
ifdTTX4r/48tohct+jRBCW5vh6Jkx5mVie8MlhFG5oY1dxtd/M9F1Kc6PpyRipCw
yvuJFOU8ESxEQSwFsElckvaamc09fw55rUgaFmMebuhleXUuyg7WAPUlLSgeGqyd
RB4lOitA4qmOgEBIUs7Y6jiUe44orWzgGrQGP9zoI8aPwRGvKJoe11PCocrEJvIM
xMcHyOdrqECY4LlgNLoDGRXJYASWSqTzPvl4TAH1ffKhdp+aUP3/EoHYaF2nu8fD
wYHuD/lP0Cy21zbobDaFPF4iKdAk2qc=
-----END CERTIFICATE-----
</ca>

Съхранява се във файл с разширение .ovpn и се импортира в желания клиент или устройство. При свързване ще попита за име и парола.

С тази конфигурация през тунела ще има връзка единствено до отдалечената вътрешна мрежа.
Към момента Микротик не поддържа “route-push” – възможността да изпрати към клиента маршрути за допълнителни мрежи, които да се рутират през тунела. И така, ако има нужда от рутиране на допълнителни мрежи през тунела или изобщо за целия Интернет трафик, ще трябва към клиентската конфигурация да се добавят следните редове:
route 10.0.0.0 255.0.0.0
или
route 0.0.0.0 0.0.0.0 vpn_gateway 0

Дано не съм забравил нещо 🙂

By Тодор in Mikrotik

След купищата натрошени Микротици трябва на всички да е станало ясно, че тая работа не е като оная работа 🙂 Полянката си трябва малко косене и поливане.
Как да си направим фиревала вече писах. Ето още един копи/пасте мурафет, който ще върже гащите за известно време:

/ip service disable telnet,ftp,www,api,api-ssl
/ip service set ssh port=2222
/tool mac-server set allowed-interface-list=none
/tool mac-server mac-winbox set allowed-interface-list=none
/tool mac-server ping set enabled=no
/ip neighbor discovery-settings set discover-interface-list=none 
/tool bandwidth-server set enabled=no 
/ip proxy set enabled=no
/ip socks set enabled=no
/ip upnp set enabled=no
/ip cloud set ddns-enabled=no update-time=no
/ip ssh set strong-crypto=yes
/user set [find name=admin] name=mincho

Главното за отбелязване, което се случва след изпълнението на тези команди за който не му се чете е:
– спира се всякакъв достъп до рутера/свича освен за SSH и Winbox
– SSH порта се сменя от 22 на 2222
admin потребителското име се сменя на mincho (на галено от админчо)

Наздраве!

By Тодор in Linux, Mikrotik

Все по-често започнах да се сблъсквам с динамични ИП адреси, което понякога прави някои мероприятия като GRE/VPN тунели, предизвикателство,
Ще опиша основно конфигурацията на сървърната част (bind). Клиентските скриптове са въпрос на фантазия, но по-късно ще добавя няколко.
– Дистрибуция CentOS и вградения bind9
– Зоната, в която ще се добавят динамичните записи е dyn.kamenitza.org

Генериране на ключа за актуализацията:
dnssec-keygen -a hmac-md5 -b 128 -n HOST dyn.kamenitza.org.
Ще създаде 2 файла, от които взимаме ключа и го добавяме в named.conf следното:

key "my-key" {
    algorithm hmac-md5;
    secret "4SHxlLTukl587eafb4wxvg==";
};

В named.conf ще добавим и зоната:
zone "dyn.kamenitza.org" IN {
        type master;
        file "dyn.kamenitza.org";
        allow-update { key my-key; };
};

Това е съдържанието на файла със зоната:
$ORIGIN .
$TTL 86400      ; 1 day
dyn.kamenitza.org          IN SOA  ns1.kamenitza.org. admin.kamenitza.org. (
                                2018051200 ; serial
                                7200       ; refresh (2 hours)
                                900        ; retry (15 minutes)
                                1209600    ; expire (2 weeks)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.kamenitza.org.
                        NS      ns2.kamenitza.org.

Файла със зоната, както и директорията, в която се намира трябва да са с достатъчни права, за да може bind/named потребителя да пише.

Проба може да направим със следния скрипт:

nsupdate -y 'my-key:4SHxlLTukl587eafb4wxvg==' -d
>update add test.dyn.kamenitza.org 300 A 1.2.3.4
>send

На екрана би трябвало да излезе детайлна информация за това, какво се случва. Ако няма грешки, това ще създаде А запис test.dyn.kamenitza.org, с живот 5 минути, сочещ към 1.2.3.4.

Скриптче за Микротик:

:local ownip [ /ip address get [/ip address find interface=WAN ] address ]
:local ownip [:pick $ownip 0 [:find $ownip "/"]]
/tool dns-update name=mikrotik zone=dyn.kamenitza.org address=$ownip key-name=dyn-key key="4SHxlLTukl587eafb4wxvg==" dns-server=1.1.1.1
:log info ("Dynamic DNS updated to $ownip") ttl=300