Архивы автора
Старые алгоритмы авторизации на новых сисиетмах
# update-crypto-policies --set LEGACY
Возможные варианты:
DEFAULT
The default system-wide cryptographic policy level offers secure settings for current threat models. It allows the TLS 1.2 and 1.3 protocols, as well as the IKEv2 and SSH2 protocols. The RSA keys and Diffie-Hellman parameters are accepted if they are at least 2048 bits long.
LEGACY
This policy ensures maximum compatibility with Red Hat Enterprise Linux 5 and earlier; it is less secure due to an increased attack surface. In addition to the DEFAULT level algorithms and protocols, it includes support for the TLS 1.0 and 1.1 protocols. The algorithms DSA, 3DES, and RC4 are allowed, while RSA keys and Diffie-Hellman parameters are accepted if they are at least 1023 bits long.
FUTURE
A conservative security level that is believed to withstand any near-term future attacks. This level does not allow the use of SHA-1 in signature algorithms. The RSA keys and Diffie-Hellman parameters are accepted if they are at least 3072 bits long.
FIPS
A policy level that conforms with the FIPS 140-2 requirements. This is used internally by the fips-mode-setup tool, which switches the RHEL system into FIPS mode.
Источник: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening
Избавляемся от русского aliexpress
var links = document.getElementsByTagName('a'); for (var i = 0; i < links.length; i++){ if ( links[i].href.match('aliexpress.ru') ) { console.log(links[i].href); links[i].href = links[i].href.replace('aliexpress.ru', 'aliexpress.com'); } }
chroot вместо порчи хоста
Использую Debian 8 и 9 для разных целей зачастую очень грязных в плане установки кучи пакетов и сборки чего-то кастомного и/или опасного/дырявого. В связи с чем есть два выхода:
1. lxc — когда надо управлять ресурсами и не позволять их выжрать все,
2. простой chroot — когда точно знаешь что делаешь.
Подготовка для chroot очень простая:
apt-get install debootstrap
Далее ставим нужную систему. Я ставлю такую же как на хосте. Вот сейчас это Debian 8:
debootstrap jessie /usr/local/jessie http://mirror.yandex.ru/debian
Создаём скрипт для монтирования и запуска чего-то нужного в этом chroot:
/usr/local/sbin/jessie.sh:
#!/bin/bash
cd /usr/local/jessie || exit
[ -z "`mount | grep /usr/local/jessie/proc`" ] && mount proc -t proc ./proc
[ -z "`mount | grep /usr/local/jessie/sys`" ] && mount sys -t sysfs ./sys
[ -z "`mount | grep /usr/local/jessie/dev`" ] && mount --bind /dev ./dev
[ -z "`mount | grep /usr/local/jessie/dev/pts`" ] && mount --bind /dev/pts ./dev/pts
chroot /usr/local/jessie /runme.sh
Теперь вешаем этот скрипт в crontab на хосте или запускаем вручную при старте хоста или вручную.
RAID’ы
Года полтора назад столкнулся с заменой винта в RAID10. Всё прошло гладко, но возникла мысль о его устойчивости.
RAID10 почему-то слишком часто считается самым быстрым и одним из надёжных из существующих. Но! Очевидно, что он не может потерять больше 1 диска с сохранением всех данных. Нет, он конечно может потерять 2 диска, но только в одном случае из 3х, т.е. по удачному стечению обстоятельств.
Так вот что получается. Imho RAID10 не выгоден ни с точки зрения использования дискового пространства, ни с точки зрения устойчивости, ни даже с точки зрения производительности в общем случае. Разумеется речь идёт об аппаратных массивах, т.е. где основной процессор(ы) системы не задействован.
Итак.
RAID 10 требует минимум 4 дисков. Их и рассмотрим как самый попсовый вариант для небольших серверов.
RAID5:
+ даёт на треть больше дискового пространства;
= устойчив к потере одного любого диска;
+ в теории позволяет наращивать массив по одному диску (в моей практике не было таких наращиваний);
+ производительность на чтение уделывает RAID 10. На запись — тот же уровень.
RAID6:
= даёт такой же объём;
+ устойчив к потере двух абсолютно любых дисков;
+ в теории позволяет наращивать массив по одному диску (в моей практике не было таких наращиваний);
= производительность чтения и записи такая же.
О производительности надо оговорить следующее:
— аппаратный RAID берёт на себя всё обсчёты данных для их «размазыванию» по физическим дискам и это не заметно на уровне ОС;
— большинство попсовых систем больше читают данные, чем пишут;
— при количестве дисков больше 4х есть куда более производительные и надёжные варианты.
Беспонтовый lvm cache
/dev/sda — основной винт
/dev/sdb — ssd
data — lvgroup
DataLV — lv
# pvcreate /dev/sdb
# vgextend data /dev/sdb
Два раздела под данные и под метаданные. Под данные в 1000 раз больше места надо чем под меты.
# lvcreate -n DataLVcache -L19.9G data /dev/sdb
# lvcreate -n DataLVcacheMeta -L20M data /dev/sdb
# lvconvert —type cache-pool —cachemode writethrough —poolmetadata data/DataLVcacheMeta data/DataLVcache
writeback VS writethrough — неясно. Типа writethrough более надёжный, а writeback более быстрый. На чтение вообще никак не влияет.
# lvconvert —type cache —cachepool data/DataLVcache data/DataLV
Типа готово.
Режим кэширования меняется так:
# lvconvert —cachemode writethrough|writeback VG/CacheLV
Плюс нашёл только один — всё меняется на лету. Без перемонтирования и перезагрузок. Данные не страдают.
Огромный минус — не смог загрузиться с кэшированной rootfs. Предлагают только танцы с бубном с пересборкой ядра. А это не наш метод.
Ненавистный audit в Fedora
Боремся:
You can quickly disable audit temporarily with
$ sudo auditctl -e 0
and temporarily remove all the rules with
$ sudo auditctl -D
For future boots you could try disabling its start with
$ sudo systemctl disable auditd
До кучи:
# systemctl disable systemd-journald-audit.socket
# systemctl stop systemd-journald-audit.socket
Назлоамерикосам: замена батареи в APC BX650CI
В инструкции написано, что юзер не может сам заменить батарею и требуется нести его в сервисный центр. Но почему-то нигде не написано как вырвать мерзкую пищалку которая не переставая сверлит мозг если УПС решил, что ему надо заменить батарейку.
С пищалкой я так и не разобрался, но до батарейки добрался и теперь знаю как её ЛЕГКО сменить не сломав УПС. Итак, батарейка за передней крышкой, которая из себя представляет кусок пластмассы и больше ничего. Прежде чем туда лезть — выдерните предохранитель (желтый такой) с задней стенки УПСа.
Чтобы снять эту крышку нужно:
1. открутить крестовой отвёрткой два самореза внизу передней панели.
2. нажать на панель сверху вниз и она съедет на 1-1.5 см. вниз
3. потянуть панель на себя
В итоге перед вами стоящий на боку аккумулятор GP1272F2. Дальше всё еще проще:
1. скидываете клеммы и вытягиваете аккумулятор на себя
2. ставите новый и накидываете клеммы обратно
3. в обратном порядке ставите панель назад
4. возвращаете предохранитель
5. включаете УПС
Поздравляю. А я пока допёр до этого всего сломал три защёлки на передней панеле. 😉
Почта для кириллических доменов
На текущий момент только один почтовик заявляет и выпускает хоть какие-то релизы с поддержкой SMTPUTF8 или RFC 6531. Это экспериментальные релизы Postfix 2.12.
Но даже при наличии поддержки в нём система доставки кириллической почты просто так не заработает. Поэтому запасаемся напильником.
Настраивать сервер будем под Debian 7. В моём случает он внутри VZ контейнера, а эксперименты проводились внутри LXC контейнера.
После создания контейнера сносим оттуда штатный почтовик, если он есть:
apt-get purge exim* sendmail* и пр.
Качаем последнюю версию Postfix 2.12 experimental release:
wget http://mirrors-ru.go-parts.com/postfix/source/experimental/postfix-2.12-20140905.tar.gz
Заранее создаём юзера и группу:
useradd postfix -s /bin/false groupadd postdrop
Распаковываем:
tar -zxf postfix-2.12-20140905.tar.gz
Патчим src/smtpd/smtpd.c:
apt-get install patch patch postfix-2.12-20140905/src/smtpd/smtpd.c smtpd.patch
где smtpd.patch имеет содержимое:
--- smtpd.c 2014-10-06 00:15:18.000000000 +0400 +++ smtpd.c.force.smtputf8 2014-10-07 15:36:21.352884670 +0400 @@ -2317,21 +2317,8 @@ return (-1); } - /* - * XXX The sender address comes first, but the optional SMTPUTF8 - * parameter determines what address syntax is permitted. We must process - * this parameter early. - */ - if (var_smtputf8_enable - && (state->ehlo_discard_mask & EHLO_MASK_SMTPUTF8) == 0) { - for (narg = 3; narg < argc; narg++) { - arg = argv[narg].strval; - if (strcasecmp(arg, "SMTPUTF8") == 0) { /* RFC 6531 */ - smtputf8 = 1; - break; - } - } - } + smtputf8 = 1; + if (extract_addr(state, argv + 2, PERMIT_EMPTY_ADDR, var_strict_rfc821_env, smtputf8) != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL;
Нужно это для того, чтобы почтовые клиенты, которые на данный момент не готовы полностью к таким серверам, могли через них всё-таки почту отправлять.
Дело в том, что эта сборка Postfix для активации SMTPUTF8 режима должна на входе получить:
RCPT TO:< юзер@домен.рус> SMTPUTF8
Быстрая проверка показала, что даже почтовые клиенты заявившие о поддержке IDN почты не отправляют SMTPUTF8 в RCPT TO и тем самым создают себе проблемы с отправкой.
Готовимся к сборке:
apt-get install build-essential libdb-dev libicu-dev libssl-dev apt-get install checkinstall apt-get install rsyslog telnet
Заодно готовимся к использованию Dovecot в качестве средства авторизации:
apt-get install dovecot-imapd dovecot-pop3d
Собираем с поддержкой SASL и TLS:
cd postfix-2.12-20140905 make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -DUSE_TLS' AUXLIBS="-ldb -lnsl -lresolv -lssl" make make install
Теперь надо это всё настроить:
В /etc/dovecot/conf.d/10-master.conf правим сокет для авторизации (95 строка примерно):
# Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }
В /etc/dovecot/conf.d/10-auth.conf (99 строка примерно) добавляем любимые способы авторизации, например:
auth_mechanisms = plain login
Перезапускаем:
/etc/init.d/dovecot restart
Должно заработать.
После правки конфиг Postfix /etc/postfix/main.cf получился такой:
queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix myhostname = postfix.regtime.net mydomain = postfix.regtime.net inet_interfaces = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases home_mailbox = Mailbox mail_spool_directory = /var/mail debug_peer_level = 6 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq setgid_group = postdrop html_directory = no manpage_directory = /usr/local/man sample_directory = /etc/postfix readme_directory = no inet_protocols = ipv4 meta_directory = /etc/postfix shlib_directory = no smtputf8_autodetect_classes = all smtputf8_enable = yes virtual_mailbox_domains = русскийдомен.рф virtual_mailbox_base = /var/spool/mail virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 smtpd_sasl_type = dovecot smtpd_sasl_path = /var/spool/postfix/private/auth smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination smtpd_tls_CAfile = /etc/ssl/certs/ca.pem smtpd_tls_CApath = /etc/ssl/certs smtpd_tls_cert_file = /etc/dovecot/dovecot.pem smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache smtpd_use_tls = yes # Enable STARTTLS encryption smtp_use_tls = yes smtp_tls_CAfile = /etc/ssl/certs/ca.pem smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache smtpd_tls_security_level = may smtpd_tls_received_header = yes smtpd_tls_loglevel = 1 smtpd_tls_auth_only = no tls_random_source = dev:/dev/urandom
Настройка для довольно простого использования обычных системых mailbox’ов на одном кириллическом домене. Те кто разбирается в Postfix чуть более глубоко — может это легко перенастроить под более привычные ему варианты.
В /etc/postfix/virtual_mailbox пишем:
имя.фамилия@русскийдомен.рф user1
где user1 — системный юзер, которого нужно добавить штатной командой:
useradd user1 -s /bin/false
А в /etc/postfix/uid_maps:
имя.фамилия@русскийдомен.рф 1000
где 1000 — это uid для user1.
Тут же становится понятно, что для авторизации будет использован классический ASCII логин user1 и пароль к нему. В качестве POP3/IMAP4/SMTP сервера postfix.regtime.net.
Преобразуем это в хэш:
postmap /etc/postfix/aliases postmap /etc/postfix/virtual_mailbox postmap /etc/postfix/uid_maps
Перечитываем конфиг или запускаем, перезапускаем Postfix:
postfix reload/stop/start
Проверяем:
# telnet localhost 25 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 postfix.regtime.net ESMTP Postfix EHLO localhost 250-postfix.regtime.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 SMTPUTF8 quit 221 2.0.0 Bye Connection closed by foreign host.
Теперь когда сервер умеет работать с кириллическими адресами настало время выбрать клиента.
Гарантировано работает Claws Mail начиная с версии 3.9.3.
Evolution 3.10.4 тоже справляется с этой задачей.
Есть специальный клиент — EAI-SMTPUTF8 v.2.0
Гарантированно не работает Mozilla Thunderbird.
Mustek 1248UB and Fedora 20
Напомню себе, что в Fedora недостаточно поставить sane и xsane со всеми зависимостями, чтобы Mustek 1248UB заработал. Закачать прошивку с оффсайта http://www.meier-geinitz.de/sane/gt68xx-backend/index_ru.html тоже не поможет. Еще нужен sane-backends-drivers-scanners
Это логично, но не очевидно. 😉
Пробрасываем порты
Существует как минимум два самых известных способа пробросить порт через Linux машину.
1. iptables
2. ssh
Недавно начал использовать еще один очень просто вариант — xinetd.
Сначала поставим его: apt-get install xinetd
Теперь настраиваем произвольные порты, например:
service proxy7001 { disable = no type = UNLISTED socket_type = stream protocol = tcp wait = no bind = 127.0.0.1 user = www-data redirect = 172.18.1.3 7001 port = 7001 }
Что имеем? Локальный порт tcp 7001, который форвардится на сервер с IP 172.18.1.3 и порт 7001.
В некоторых случаях это проще и легче, чем iptables и ssh. Действуйте по ситуации. 😉