- PVSM.RU - https://www.pvsm.ru -
Примерно 9 лет назад, когда в моем городе появились первые безлимитные тарифы (что-то вроде 128 кбит/сек за 500 руб.), я принял решение держать в квартире собственный «сервер» для решения различных задач. Одной из первых идей было поднятие зеркала для проекта FreeBSD.org. Проработало оно где-то 2 года. Далее в этом уже не было смысла, ввиду расширения каналов и других причин.
Помимо этого, сервер принимал на себя в разные периоды времени и другие задачи:
Общая мысль – в руках был конструктор с кучей разноцветных деталей и большое желание прикрутить еще что-нибудь эдакое. В общем то обычная ситуация для большинства системных администраторов, знающих и любящих *nix-системы.
В качестве операционной системы первые 4-5 лет у меня была FreeBSD. В определенный момент, когда я сменил работу и стал усиленно погружаться в технологии Microsoft – мне стало абсолютно некогда заниматься своим домашним сервером. Еще помню, что мне здорово надоело тратить время на portupgrade. Может и другие причины были, точно не помню. Но итогом был переезд на Debian (полдня) и сервер оказался надолго заброшен (использовал, но не модифицировал – лишь изредка обновлял).
И вот совсем недавно, в январские праздники, состоялся очередной возврат к истокам – сервер был вновь переустановлен – уже на FreeBSD 11. И причина тому – мое знакомство и восхищение проектом CBSD (www.bsdstore.ru [1]).
Для этого нужно вспомнить причины, по которым я ушел с FreeBSD лет 5 назад – отсутствие свободного времени, устаревшая система установки бинарных пакетов (pkg_*), неудобное управление Jails. Сложно точно сказать почему я перешел с FreeBSD на Linux тогда. Но в чем я уверен сейчас – использование проекта CBSD вместе с FreeBSD на моем сервере позволяет мне наконец то совместить и удобство, и безопасность.
Все прошлые инсталляции были у меня настроены по принципу – все яйца в одной корзине. Компрометация одного сервиса автоматически означала компрометацию всех. С приходом CBSD на мой сервер я взял за правило каждый сервис размещать в своей клетке, ограничивая взаимодействие и оставляя только самый необходимый минимум.
Итак – мои причины:
Отдельное огромное спасибо хочу сказать создателям pkgng. Без разработки новой современной системы пакетного(бинарного) менеджмента проект CBSD не был бы настолько удобным как сейчас.
Появление pkgng повод «почти полностью» отказаться от /usr/ports – а точнее рассматривать его как дополнение к pkg. Я пользуюсь следующими принципами:
1. Все возможное ПО устанавливаю через pkg. При этом обновления получаю из ветки latest (правка файла /etc/pkg/FreeBSD.conf);
2. Если я понимаю (pkg info ), что какое-то ПО собрано в репозитории pkg с флагами, которые меня не устраивают, я монтирую /usr/ports внутрь клетки (причем не руками, а через фреймворк CBSD — cbsd jset mode=quiet jname=dokuwiki mount_ports=«1»), и собираю данное ПО из портов с нужными USE флагами;
3. С помощью pkg lock данное ПО, собранное с уникальными опциями, закрывается от дальнейшего автоматического обновления через pkg upgrade;
Итог – на любом количестве клеток я могу обновить 99% программ одним скриптом и с вероятностью 99% не сломаю при этом работу сервисов. Увы – 1 % всегда остается. НО – есть автоматизированные бекапы клеток. А также есть каталог с кэшем предыдущих установленных пакетов. Поэтому есть два варианта отката (откатить пакет либо откатить всю клетку). Напомню – у меня одна клетка – одна служба/сервис.
echo «Checking local SYSTEM»
pkg audit -F
echo ""
echo «Checking DokuWiki JAIL»
/usr/local/bin/cbsd jexec jname=dokuwiki pkg audit -F
echo ""
echo «Checking OwnCloud JAIL»
/usr/local/bin/cbsd jexec jname=owncloud pkg audit -F
echo ""
echo «Checking FTP Backup JAIL»
/usr/local/bin/cbsd jexec jname=ftpbackup pkg audit -F
echo ""
echo «Checking SAMBA JAIL»
/usr/local/bin/cbsd jexec jname=samba pkg audit –F
Checking DokuWiki JAIL
vulnxml file up-to-date
0 problem(s) in the installed packages found.
Checking OwnCloud JAIL
vulnxml file up-to-date
0 problem(s) in the installed packages found.
Checking FTP Backup JAIL
vulnxml file up-to-date
0 problem(s) in the installed packages found.
Checking SAMBA JAIL
vulnxml file up-to-date
0 problem(s) in the installed packages found.
echo «Checking local SYSTEM»
pkg upgrade -n
echo ""
echo «Checking DokuWiki JAIL»
/usr/local/bin/cbsd jexec jname=dokuwiki pkg upgrade -n
echo ""
echo «Checking OwnCloud JAIL»
/usr/local/bin/cbsd jexec jname=owncloud pkg upgrade -n
echo ""
echo «Checking FTP Backup JAIL»
/usr/local/bin/cbsd jexec jname=ftpbackup pkg upgrade -n
echo ""
echo «Checking SAMBA JAIL»
/usr/local/bin/cbsd jexec jname=samba pkg upgrade –n
sleep 1
echo «To: vershinin.e@gmail.com» > /root/Scripts/audit-pkg.mail
echo «Subject: Audit PKG on MAIN and JAILed systems!!!» >> /root/Scripts/audit-pkg.mail
echo "" >> /root/Scripts/audit-pkg.mail
echo "" >> /root/Scripts/audit-pkg.mail
sleep 1
`/root/Scripts/pkg-audit-all-sys.sh >> /root/Scripts/audit-pkg.mail`
sleep 1
`/root/Scripts/pkg-upgrade-all-sys.sh >> /root/Scripts/audit-pkg.mail`
sleep 1
`cat /root/Scripts/audit-pkg.mail | /usr/local/bin/msmtp vershinin.e@gmail.com`
sleep 1
###### DokuWiki ########
# Default block rule
block from $dokuwiki to any
block from any to $dokuwiki
# Pass from ANY to Dokuwiki Apache HTTP
pass proto tcp from any to $dokuwiki port 80 keep state
###### FTP BACKUP ######
# Default block rule
block from $ftpbackup to any
block from any to $ftpbackup
# Pass from LAN to FTP Ports:
pass proto tcp from $mylans to $ftpbackup port 21
pass proto tcp from $mylans to $ftpbackup port {20000><20100}
###### OwnCloud ########
# Default block rule
block from $owncloud to any
block from any to $owncloud
# Pass from LAN to OwnCloud HTTP port
pass proto tcp from $mylans to $owncloud port 80 keep state
# Pass from WAN to OwnCloud HTTPS port
pass proto tcp from any to $owncloud port 443 keep state
###### ALL Rules for JAILs #######
pass proto icmp from $mylans to $mylans
pass proto udp from $mylans to {$dns_local $dns_google} port 53 keep state
pass proto tcp from $mylans to {$pkg_mirror1 $pkg_mirror2 $pkg_mirror3 $pkg_mirror4} keep state
Ее вывод:
jailname=$1
CBSDPATH=/CBSD
JAILBACKUPTARGET=/data/JAILS
backupdate=`/bin/date "+%Y-%m-%d"`
jstatus=`/usr/local/bin/cbsd jstatus $jailname`
if [ $jstatus -ne «0» ]; then
/usr/local/bin/cbsd jstop $jailname
sleep 15
fi
jstatus2=`/usr/local/bin/cbsd jstatus $jailname`
if [ $jstatus2 -eq «0» ]; then
/usr/local/bin/cbsd jexport jname=$jailname compress=0
sleep 15
fi
if [ -f $CBSDPATH/export/$jailname.img ]; then
cp $CBSDPATH/export/$jailname.img $JAILBACKUPTARGET/$jailname-$backupdate.img
sleep 5
fi
jstatus3=`/usr/local/bin/cbsd jstatus $jailname`
if [ $jstatus3 -eq «0» ]; then
/usr/local/bin/cbsd jstart $jailname
sleep 5
fi
jstatus4=`/usr/local/bin/cbsd jstatus $jailname`
if [ $jstatus4 -ne «0» ]; then
echo «Backup JAIL Finish Successfull! Jail restarted!»
fi
CBSD [1] весьма интересный проект, с которым я рекомендую познакомиться поближе и иметь его в своем «портфеле готовых и удачных решений».
Автор: Егор Вершинин
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/freebsd/257048
Ссылки в тексте:
[1] www.bsdstore.ru: https://www.bsdstore.ru/ru/about.html
[2] Источник: https://habrahabr.ru/post/330168/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.