Uzix | микроблог

#Nix

Особенность маршрутизации в Linux

Про rp_filter в интернете не писал только ленивый. Но вот о чём редко пишут - rp_filter начисто игнорирует маркер пакета (nfmark, он же fwmark)! Т.е. если у вас настроена policy-based-routing с использованием ip rule fwmark, то обратный маршрут rp_filter будет рассчитывать неверно, что приведёт к тихому дропу пакетов. Что делать? Я вижу пару вариантов:

  • Отключить rp_filter на интерфейсе и прописать всё что он делает руками;
  • Использовать TOS для маркировки пакетов. Минусы - он восьмибитный, и ip rule не умеет применять к значению маску. К тому же нужно помнить, что TOS - не метаинформация внутри ядра, а реальное поле в IP-пакете со всеми вытекающими.

Есть также модуль iptables rpfilter. Он делает то же, что и встроенный в ядро rp_filter, но при этом его можно обвязать любыми (в рамках таблицы raw) правилами iptables. К сожалению, он доступен только для ядер >=3.3.

/dev во freebsd chroot

Не нашёл в интернете хорошего решения, поэтому выкладываю тут.

Т.к. во FreeBSD нельзя сделать просто mknod в произвольном месте фс (вернее можно, но результат работать не будет с ошибкой “operation not supported”), то для доступа к устройствам внутри chroot приходится немного шаманить - а именно монтировать devfs с нужными нам устройствами.

Покажу на примере php-fpm. Создаём файл /usr/local/etc/rc.conf.d/php_fpm со следующим содержимым:

mount_devs() {
    for i in $php_fpm_chroots; do
        umount "${i}/dev" 2>/dev/null || true
        devfs_domount "${i}/dev" devfsrules_hide_all
        devfs -m "${i}/dev" rule apply path null unhide
        devfs -m "${i}/dev" rule apply path random unhide
        devfs -m "${i}/dev" rule apply path urandom unhide
    done
}

start_precmd="$start_precmd && mount_devs"

и в rc.conf дописываем:

php_fpm_chroots="/var/www1 /var/www2"

Создаём по нужным путям dev/, делаем рестарт сервиса - и после этого всё должно заработать.

https

В связи с наметившейся тенденцией всяческого ущемления (понижение позиции в выдаче поисковиков, предупреждения о небезопасности в браузерах) сайтов, доступных только по http, а так же по причине необходимости повышения безопасности передаваемых данных, передо мной возникла задача внедрения https с минимальными материально-техническими затратами на внедрение и сопровождение.

Читать далее →

ГОСТ шифр

В данной статье решается задача создания защищённого соединения с сервером госзакупок с минимизацией необходимости дальнейшей поддержки решения.

Читать далее →

Расширение корневого раздела в LVM в RHEL6

Вводная: виртуальная машина с одним диском и корневой фс в lvm.

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

Решение:

  1. Увеличиваем размер диска средствами системы управления виртуальными машинами. В моём случае это Proxmox: qm resize 100 virtio0 +5G
  2. Далее нужно как-то подключить наше новое пространство к VolumeGroup. Вот тут кроется засада. Для RHEL5 можно увеличить размер раздела с PhysicalVolume и обновить таблицу разделов командой partprobe. Но начиная с RHEL6 она покажет шиш и откажется что-либо делать пока мы всё не остановим и не отмонтируем. Однако есть и обходной путь: создаём на этом же диске ещё один раздел с PhysicalVolume чтобы затем расширить нашу VolumeGroup на неё: parted /dev/vda mkpart primary ext2 НАЧАЛО_РАЗДЕЛА -1 parted set НОМЕР_РАЗДЕЛА lvm on Затем выполняем потенциально опасную операцию - обновляем наживую таблицу разделов. Существующие разделы при этом остаются на месте (даже если были изменены/удалены), новые же добавляются: partx -a /dev/vda
  3. Дальше дело техники - расширяем VolumeGroup: vgextend VolGroup /dev/vda3
  4. … расширяем LogicalVolume: lvextend -l +100%FREE VolGroup/lv_root
  5. … и, наконец, увеличиваем сам раздел: resize2fs /dev/VolGroup/lv_root

Готово.