Archive for the ‘Servers’ Category
You are currently browsing the archives for the Servers category.
You are currently browsing the archives for the Servers category.
Имам 3 Jail-a искам да си инсталирам и в 3те нещо от /usr/ports :
mount_nullfs /usr/ports/ /usr/jails/ns/usr/ports
mount_nullfs /usr/ports/ /usr/jails/mail/usr/ports
mount_nullfs /usr/ports/ /usr/jails/www/usr/ports
Леко скриптче за проверка дали даден процес е жив (в случая snmpd) :
#!/bin/bash
hostname=b2.sysadmins-bg.net
email=billy@microsoft.com
snmpd_test=`pgrep snmpd`
# SNMPD TEST
if [ $snmpd_test != 1 ]
then
echo `echo host $hostname report: SNMPD DAEMON NOT RUNNING !!!|mail -s CHECK-IT-NOW $email`
fi
в crontab на 5 минути:
*/5 * * * * check-snmpd.sh > /dev/null 2>&1
толкоз .
Ако ви се налага да направите нов secondary dns сървърили просто да ъпдейтвате с нови зони съществуващ такъв , новите зони се налага да ги описвате на ръка . Ето едно решение за динамичен ъпдейт (не DDNS) на конфига на secondary (slave) dns сървъра, което копира конфигурационня файл на primary сървъра и след това прейменува зоните на slave.
Ще трябва да си направите и ключ за ssh за да може скрипта да влиза без парола , ще пиша и за това , но в друга статия.
master dns : 192.168.0.1
slave dns : 192.168.0.2
И самия скрипт (нищо сложно) :
#!/bin/sh
# Script to copy slave dns zones from master dns
# release 1.0
# b2 (at) playtime.bg
# first we need master dns zone config local to make changes on it
# this is how we do it
scp user@192.168.0.1:/etc/namedb/named.conf /root/work/named_master.conf
# now we need to change some things in the config and save it as slave
for domain in `grep ^zone /root/work/named_master.conf |awk ‘{print $2}’ |sed ’s/\(.*\)./\1/’ |sed ’s/.\(.*\)/\1/’`
do
/usr/bin/printf “
zone \“$domain\“ {
type slave;
file \“/etc/bind/slaves/$domain\“;
masters { 192.168.0.1; };
};\n“
done > /root/work/slavefile.conf
# now it is time to (smoke some weed and) move it on /etc/bind && reload our server
cp slavefile.conf /etc/bind/named.conf.local && /etc/init.d/bind9 reload
# let’s do some checks to be sure bind daemon is up & running
bind_status=`/etc/init.d/bind9 status`
status_ok=“bind9 is running.“
if [ "$bind_status" = "$status_ok" ];
then
# all done – mail admins and go to sleep ![]()
echo „MASTER/SLAVE ZONES SYNCRONIZATION COMPLETED – YOU CAN GET DRUNK NOW !“ |mail -s „ZONES SYNCRONIZATION COMPLETED“ admin ( at ) playtime.bg
else
# fuck , something wrong here !
echo „SLAVE DNS SERVER NOT RUNNING ALTER SYNCRONIZATION – DO SOMETHING NOW !“ |mail -s „SLAVE DNS DOWN AFTER SYNCRONIZATION“ admin ( at ) playtime.bg
fi
exit 0
също и в crontab-а на root вмъкнете :
0 4 * * * /path/to/script
всеки ден в 4 часът през нощта скрипта ще се изпълнява.
Това е !
Доста елементарно се оказа но поради факта , че не ми се беше налагало – не го знаех
))
Искаме влан 100 да си го разтагнем на BSD машинката и да му вдигнем IP адрес – какво правим ?
Ето това :
Зареждаме модула в ядрото :
# kldload if_vlan
Създаваме VLAN-а :
# ifconfig vlan100 create
Вдигаме му IP адрес :
# ifconfig vlan100 10.17.0.71 netmask 255.255.255.252 vlan 100 vlandev nve0
И всичко спи
Intro :
FreeBSD е операционна система с отворен код , поне според мен най-подходяща за изграждане на сървъри , но също и с много добре развити мрежови приложения – перфектна за PPPoE концентратори или друг вид рутери да речем , като цяло доста стабилна операционна система с много възможности за настройки и много инструменти в помощ на системния администратор.Не на последно място ще кажа че проекта FreeBSD има изключително добра подръжка и много ама найстина много документация .
Какво е jail ?
Основната идея на jail-а е да повиши сигурността на системата като отдели един или повече процеси от другите и ги постави в chroot(2) среда. Чрез chroot(8) можем да променим root директорията на поредица процеси като ги отделим в сигурна среда от другите. Да речем , че недобронамерен потребител направи успешен exploit върху уязвим процес пуснат в jail и успешно компроментира системата , това няма да повлияе на цялата система както сами се досещате, а атакуващия ще има достъп само до процесите пуснати в jail-a. Разбира се има начини да се избяга от chroot средата, но за по-прости задачи (като service jails) e доста мощен инструмент.
Като цяло командата jail(8) служи за контрол над създадените jails.
Разбира се всички тези неща са доста добре обяснени във онлайн документацията на http://www.freebsd.org/doc/en/books/handbook/ , но основната ми идея е да ви покажа накратко как да си направите няколко service jails.
Изграждане на jails :
Тук ще ви покажа един елементарен пример за шаблон , лично аз използвам най-вече service jails – накратко това означава, че не е нужно да се прави пълен installworld на всеки jail. В този пример искаме крайният резултат да бъде HTTP, DNS и SMTP сървайси в отделни jails.Ще ни трябва една машина която ще наричаме хост и на която ще пуснем тези сървайси.На машината за примера имаме чисто нова инсталация на FreeBSD 6.3 със инсталиран пакет source , можете да вземете нужния сорс чрез :
#sysinstall -> configure -> distributions -> src
И така , да започваме
Кратко обяснение :
Сздаване на read-only темплейта :
* може да се наложи да инсталирате sysutils/cpdup на хост системата.
# mkdir /home/services /home/services/ro
# cd /usr/src
# make installworld DESTDIR=/home/services/ro
# cd /home/services/ro
# mkdir usr/ports
# portsnap -p /home/services/ro/usr/ports fetch extract
# cpdup /usr/src /home/services/ro/usr/src
# mkdir /home/services/skel /home/services/skel/home /home/services/skel/usr-X11R6 /home/services/skel/distfiles
# mv etc /home/services/skel
# mv usr/local /home/services/skel/usr-local
# mv tmp /home/services/skel
# mv var /home/services/skel
# mv root /home/services/skel
# mergemaster -t /home/services/skel/var/tmp/temproot -D /home/services/skel -i
# cd /home/services/skel
# rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev
# cd /home/services/ro
# mkdir rw
# ln -s rw/etc etc
# ln -s rw/home home
# ln -s rw/root root
# ln -s ../rw/usr-local usr/local
# ln -s ../rw/usr-X11R6 usr/X11R6
# ln -s ../../rw/distfiles usr/ports/distfiles
# ln -s rw/tmp tmp
# ln -s rw/var var
# echo "WRKDIRPREFIX?= /rw/portbuild" > /home/services/skel/etc/make.conf
ако всички тези операции минат успешно е време да добавите в /etc/fstab следните неща :
/home/services/ro /home/services/ns nullfs ro 0 0
/home/services/ro /home/services/mail nullfs ro 0 0
/home/services/ro /home/services/www nullfs ro 0 0
/home/jails/ns /home/services/ns/rw nullfs rw 0 0
/home/jails/mail /home/services/mail/rw nullfs rw 0 0
/home/jails/www /home/services/www/rw nullfs rw 0 0
след това добавяме в /etc/rc.conf следните редове :
jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/usr/home/services/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/usr/home/services/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="192.168.3.19"
jail_www_rootdir="/usr/home/services/www"
jail_www_devfs_enable="YES"
* За вески jail трябва да сме предвидили ip адрес – това е задължително (без значение частен или публичен)
* Сигурно ви прави впечатление че тука заместваме /home/services/ със /usr/home/services , това е така защото във FreeBSD директорията /home е линк към /usr/home
Да продължим нататък като създадем тези папки :
# mkdir /home/services/ns /home/services/mail /home/services/www
# mkdir /home/jails
# cpdup /home/services/skel /home/jails/ns
# cpdup /home/services/skel /home/jails/mail
# cpdup /home/services/skel /home/jails/www
И накрая :
# mount -a
# /etc/rc.d/jail start
Ако всичко е наред би трябвало да имате три стартирани jail-a (можете да проверите това с jls(8)):
# jls
JID IP Address Hostname Path
3 192.168.3.17 ns.example.org /home/services/ns
2 192.168.3.18 mail.example.org /home/services/mail
1 192.168.3.19 www.example.org /home/services/www
Всичко изглежда наред , сега можете да се логнете да речем в jail с ID 3 (ns) с командата :
# jexec 3 csh
Това е всичко
Тези дни ми се наложи да променям нещо по скриптовете на един от проектите по който работя , в случая исках да знам как ще се държи сървърът ми след промяна по накой от скриптовете . Решението е в инструмента ab (Apache Benchmark) който идва със Apache Web Server . Използва се много лесно и дава полезна информация (макар и не особено много) затова как се държи сървърът при определен брой заявки за определен период към определена страница от сайта ви. Имайте предвид че ab не емулира реално поведение на юзер на вашата страница , но може да ви помогне да разберете как сървърът ви поема заявките. Важно е да знаем , че не е препоръчително ab и сървърът който тестваме да са на един и същи хост , защото и двата процеса ще заемат ресурси (не много малко – зависи от машината) , и това със сигурност ще се отрази на резултатите. Има и доста други показатели от който зависят резултатите от теста, тъй че те не винаги ще бъдат абсолютно еднакви , затова най-добре би било да се сравняват тестовете след минимални промени по конфигурацията на уеб сървъра или скрипта по който сте работили и тествали . ab е доста лесна за ползване – в моя случая пуснах 1000 рекуеста (-n 1000) , по 10 наведнъж (-c 10):
$ab -n 1000 -c 10 http://b2.sysadmins-bg.net/test.html
Ето и резултата :
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking b2.sysadmins-bg.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache
Server Hostname: b2.sysadmins-bg.net
Server Port: 80
Document Path: /test.html
Document Length: 20711 bytes
Concurrency Level: 10
Time taken for tests: 1178.201 seconds
Complete requests: 1000
Failed requests: 414
(Connect: 0, Receive: 0, Length: 414, Exceptions: 0)
Write errors: 0
Total transferred: 20892586 bytes
HTML transferred: 20710586 bytes
Requests per second: 0.85 [#/sec] (mean)
Time per request: 11782.007 [ms] (mean)
Time per request: 1178.201 [ms] (mean, across all concurrent requests)
Transfer rate: 17.32 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.7 0 7
Processing: 2638 11766 2444.4 11625 37576
Waiting: 1000 8787 1969.5 8759 28169
Total: 2639 11766 2444.3 11625 37576
Percentage of the requests served within a certain time (ms)
50% 11625
66% 12268
75% 12657
80% 12975
90% 13992
95% 14918
98% 16899
99% 18568