Архивы автора

Старые алгоритмы авторизации на новых сисиетмах

# 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. Действуйте по ситуации. 😉