Подробное руководство по настройке тонких клиентов на основе дистрибутива Thinstation и протокола NX Евгений Бушков SESSION_0_TYPE=vncviewer SESSION_0_TITLE="VNC" SESSION_0_VNCVIEWER_SERVER=10.10.10.10:5901 xkbcomp :0 ru.xkb xkbcomp -xkm ru.xkb ru.xkm cp -f ru.xkm ~/thinstation/packages/keymaps-ru/x-common/lib/kmaps/xkb # Накладываем NX patch patch -p0 < NX-lfs_hint.diff # Собираем X – самая длительная часть, может занять до часа времени pushd nx-X11 make World popd # nxproxy pushd nxproxy ./configure --prefix=/srv/NX make popd # Сборка RFB-агента pushd nxviewer xmkmf -a cp -a /usr/X11R6/lib/libXp.so* ../nx-X11/exports/lib/ make 2> /dev/null popd # Сборка RDP-агента pushd nxdesktop ./configure --prefix=/srv/NX --sharedir=/srv/NX/share make popd # Вся серверная часть будет находиться в каталоге /srv/NX, создаем некоторые из подкаталогов mkdir -p /srv/NX/bin mkdir -p /srv/NX/lib mkdir -p /srv/NX/man/man1 mkdir -p /srv/NX/share/doc # Инсталлируем собранные библиотеки и агенты cp -a nx-X11/lib/X11/libX11.so.* nx-X11/lib/Xext/libXext.so.* nx-X11/lib/Xrender/libXrender.so.* /srv/NX/lib install -m 755 nx-X11/programs/Xserver/nxagent /srv/NX/lib # Создаем скрипт nxagent, который будет управлять всеми программами cat > nxagent << "EOF" #!/bin/sh NXCOMMAND=$(basename $0) export LD_LIBRARY_PATH=/srv/NX/lib:$LD_LIBRARY_PATH exec /srv/NX/lib/$NXCOMMAND ${1+"$@"} EOF # И устанавливаем его: install -m 755 nxagent /srv/NX/bin # Устанавливаем библиотеки сжатия и прокси cp -a nxcomp/libXcomp.so.* /srv/NX/lib cp -a nxcompext/libXcompext.so.* /srv/NX/lib install -m 755 nxproxy/nxproxy /srv/NX/lib ln -snf nxagent /srv/NX/bin/nxproxy # Установка RFB-агента pushd nxviewer make install DESTDIR=/srv/NX mv /srv/NX/usr/X11R6/bin/nxviewer /srv/NX/lib ln -snf nxagent /srv/NX/bin/nxviewer chmod 755 /srv/NX/bin/nxviewer mv /srv/NX/usr/X11R6/bin/nxpasswd /srv/NX/bin popd # Установка RDP-агента pushd nxdesktop make install mv /srv/NX/bin/nxdesktop /srv/NX/lib ln -snf nxagent /srv/NX/bin/nxdesktop chmod 755 /srv/NX/bin/nxdesktop rm -rf /srv/NX/usr popd # Установка скриптов cp -r nxscripts /srv/NX/share/doc # установка FreeNX mkdir -p /srv/NX/etc mkdir -p /srv/NX/var mkdir -p /srv/NX/var/db mkdir -p /srv/NX/home mkdir -p /srv/NX/home/nx pushd freenx-0.4.4 # Накладываем патч freenx, в основном здесь правятся пути на соответствие /srv/NX patch -p0 < ../freenx-lfs_hint.diff cp -a nxnode /srv/NX/bin cp -a nxserver /srv/NX/bin cp -a nxsetup /srv/NX/bin cp -a nxkeygen /srv/NX/bin cp -a nxnode-login /srv/NX/bin cp -a nxloadconfig /srv/NX/bin cp -a nxclient /srv/NX/bin cp -a nxprint /srv/NX/bin install -m 755 node.conf.sample /srv/NX/etc popd # Добавляем пользователя и группу nx groupadd -g 77 nx useradd -c 'FreeNX user' -d /srv/NX/home/nx -g nx -s /bin/bash -u 77 nx chown -R root.root /srv/NX chown -R nx.nx /srv/NX/home/nx # Далее важный момент, прежде чем запускать, ознакомьтесь с параметрами запуска команды: /srv/NX/bin/nxsetup –help. # Если хотите использовать аутентификацию пользователей с помощью ключей, уберите параметр –setup-nomachine-key. # Для работы с тонкими клиентами можно ничего не менять /srv/NX/bin/nxsetup --install --uid 77 --gid 77 --setup-nomachine-key # Проверяем, работает ли сервер NX: /srv/NX/bin/nxserver --status # Устанавливаем конфигурационный файл freenx: mv /srv/NX/etc/node.conf.sample /srv/NX/etc/node.conf ENABLE_1_5_0_BACKEND="1" module serial module intel-agp module via-agp module 8139too module floppy module vfat module supermount pkg xorg6-ati pkg xorg6-i810 pkg xorg6-nv package xorg6-s3 pkg xorg6-s3virge pkg xorg6-sis pkg xorg6-trident package keymaps-ru package nx pkg lprng pkg sshd pkg samba-server param rootpasswd pleasechangeme param xorgvncpasswd pleasechangeme param bootlogo false param bootresolution 800x600 param defaultconfig thinstation.conf.buildtime param basename thinstation param basepath . param knownhosts ./known_hosts param localpkgs true param fulllocales false param bootverbosity 3 param nxurl file://home/zhen/sources/nx/bin/nxclient-1.5.0-141.i386.tar.gz echo "$PRINTER_X_NAME:lp=$PRINTER_X_DEVICE:wd=$PRINTER_X_DRIVER:br=$PRINTER_X_OPTIONS:lf=/var/log/spooler.log:sh:sf" >> /etc/printcap echo "$PRINTER_X_NAME:lp=$PRINTER_X_DEVICE:wd=$PRINTER_X_DRIVER:br=$PRINTER_X_OPTIONS:if=/bin/lpf:lf=/var/log/spooler.log:sh:sf" >> /etc/printcap #!/bin/sh echo PRINTER TEST to /dev/printers/0 1>&2 for i in 1 2 3 4 5 6 7 8 9; do echo PRINTER /dev/printers/0 $i > /dev/printers/0; done echo -e \\r\\f > /dev/printers/0 exit 0; ssh-keyscan -t rsa nxserver_ip>>~/thinstation/known_hosts otd146_57158 00e04d08d710 smb_flop_hard TUX1C monitor #very important PC thinstation.nbi.zpxe"; make World BOOTSTRAPCFLAGS="-m32" ENABLE_2_0_0_BACKEND="1" #!/bin/sh tar -xzf nxclient-2.1.0-9.i386.tar.gz cp ~/NX/bin/* ~/thinstation/packages/nx/usr/NX/bin cp -fl ~/NX/lib/libXcomp.so.* ~/thinstation/packages/nx/usr/NX/lib/ ln -sf libXcomp.so.2.1.0 ~/thinstation/packages/nx/usr/NX/lib/libXcomp.so.1.5.0 cp ~/NX/share/keys/server.id_dsa.key ~/thinstation/packages/nx/usr/NX/share/keys cp ~/NX/share/keyboards ~/thinstation/packages/nx/usr/NX/share/ cp -R ~/NX/share/images ~/thinstation/packages/nx/usr/NX/share/ touch ~/thinstation/packages/nx/build/installed # Патч просто копирует файл(ы) настроек NX-клиента из стандартного места в корень ls $HOME/.nx/config/.>nxsessions if [ -s nxsessions ] ; then (cat nxsessions ) | while read filename ; do probe=${filename%*.nxs} if [ "$filename" != "$probe" ] then cp $HOME/.nx/config/$filename /$probe fi done fi rm nxsessions 1 0 * * * root /srv/NX/bin/nxserver –cleanup ----------------------------------------------------------------------------------------------------------------- Кластеризация + виртуализация: Linux HA + OpenVZ Часть 2: Виртуализация на практике Евгений Прокопьев [root@m1 ~]# apt-get install kernel-image-ovz-smp kernel-modules-drbd-ovz-smp vzctl vzquota boot=/dev/hda map=/boot/map default=linux image=/boot/vmlinuz label=linux root=/dev/hda2 initrd=/boot/initrd.img read-only [root@m1 ~]# ls -l /boot/ [root@m1 ~]# mkdir /d0/vz [root@m1 ~]# mkdir /d0/vz/etc [root@m1 ~]# mkdir /d0/vz/etc/sysconfig [root@m1 ~]# mkdir /d0/vz/var [root@m1 ~]# mkdir /d0/vz/var/lib [root@m1 ~]# cp -r /etc/vz /d0/vz/etc [root@m1 ~]# cp -r /etc/sysconfig/vz-scripts /d0/vz/etc/sysconfig [root@m1 ~]# cp -r /var/lib/vz /d0/vz/var/lib [root@m1 ~]# cp -r /var/lib/vzquota /d0/vz/var/lib [root@m1 ~]# rm -rf /etc/vz [root@m1 ~]# rm -rf /etc/sysconfig/vz-scripts [root@m1 ~]# rm -rf /var/lib/vz [root@m1 ~]# rm -rf /var/lib/vzquota [root@m1 ~]# ln -s /d0/vz/etc/vz /etc/vz [root@m1 ~]# ln -s /d0/vz/etc/sysconfig/vz-scripts /etc/sysconfig/vz-scripts [root@m1 ~]# ln -s /d0/vz/var/lib/vz /var/lib/vz [root@m1 ~]# ln -s /d0/vz/var/lib/vzquota /var/lib/vzquota m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3 vz basesystem passwd apt apt-conf-sisyphus etcnet glibc sysklogd mc openssh-server openssh-clients cat >> /etc/apt/sources.list.d/sisyphus.local.list < /etc/net/ifaces/eth1/ipv4address [root@router /]# echo default via 192.168.46.1 dev eth1 > /etc/net/ifaces/eth1/ipv4route [root@router /]# echo "BOOTPROTO=static > ONBOOT=yes > TYPE=eth" > /etc/net/ifaces/eth1/options [root@router /]# service network restart $ ping 192.168.46.200 [root@m1 ~]# vzctl create 102 --ostemplate altlinux-sisyphus --config vps.basic [root@m1 ~]# vzctl set 102 --name mail --save [root@m1 ~]# vzctl set mail --onboot yes --save [root@m1 ~]# vzctl set mail --hostname mail.mydomain.com --save [root@m1 ~]# vzctl start mail [root@m1 ~]# vzctl create 103 --ostemplate altlinux-sisyphus --config vps.basic [root@m1 ~]# vzctl set 103 --name dbms --save [root@m1 ~]# vzctl set dbms --onboot yes --save [root@m1 ~]# vzctl set dbms --hostname dbms.mydomain.com --save [root@m1 ~]# vzctl start dbms [root@m1 ~]# vzctl set router --veth_add veth1,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B --save [root@m1 ~]# vzctl exec router ip address add 192.168.199.1/24 dev eth0 [root@m1 ~]# vzctl exec router ip link set eth0 up [root@m1 ~]# vzctl set mail --veth_add veth2,00:12:34:56:78:9C,eth0,00:12:34:56:78:9D --save [root@m1 ~]# vzctl exec mail ip address add 192.168.199.2/24 dev eth0 [root@m1 ~]# vzctl exec mail ip link set eth0 up [root@m1 ~]# vzctl set dbms --veth_add veth3,00:12:34:56:78:9E,eth0,00:12:34:56:78:9F --save [root@m1 ~]# vzctl exec dbms ip address add 192.168.199.3/24 dev eth0 [root@m1 ~]# vzctl exec dbms ip link set eth0 up [root@m1 ~]# ip link set veth1 up [root@m1 ~]# ip link set veth2 up [root@m1 ~]# ip link set veth3 up [root@m1 ~]# brctl addbr br0 [root@m1 ~]# brctl addif br0 veth1 [root@m1 ~]# brctl addif br0 veth2 [root@m1 ~]# brctl addif br0 veth3 [root@m1 ~]# ip link set br0 up [root@m1 ~]# vzctl exec router ping 192.168.199.2 [root@m1 ~]# vzctl exec router ping 192.168.199.3 [root@m1 ~]# vzctl exec mail ip route add 192.168.0.0/16 via 192.168.199.1 [root@m1 ~]# vzctl exec dbms ip route add 192.168.0.0/16 via 192.168.199.1 [root@m1 ~]# vzctl exec router sysctl -w net.ipv4.ip_forward=1 [root@m1 ~]# vzctl exec mail ping 192.168.46.1 [root@m1 ~]# vzctl enter mail [root@mail /]# mkdir /etc/net/ifaces/eth0 [root@mail /]# echo 192.168.199.2/24 > /etc/net/ifaces/eth0/ipv4address [root@mail /]# echo 192.168.0.0/16 via 192.168.199.1 dev eth0 > /etc/net/ifaces/eth0/ipv4route [root@mail /]# echo "BOOTPROTO=static > ONBOOT=yes > TYPE=eth" > /etc/net/ifaces/eth0/options [root@m1 ~]# vzctl enter dbms [root@dbms /]# mkdir /etc/net/ifaces/eth0 [root@dbms /]# echo 192.168.199.3/24 > /etc/net/ifaces/eth0/ipv4address [root@dbms /]# echo 192.168.0.0/16 via 192.168.199.1 dev eth0 > /etc/net/ifaces/eth0/ipv4route [root@dbms /]# echo "BOOTPROTO=static > ONBOOT=yes > TYPE=eth" > /etc/net/ifaces/eth0/options brctl addif br0 ${dev} [root@m1 ~]# mkdir /etc/net/ifaces/br0 [root@m1 ~]# echo TYPE=bri > /etc/net/ifaces/br0/options [root@m1 ~]# vzctl exec mail ip route add_ip() { local i ip if [ -n "$IP_ADDR" ]; then if [ "$VE_STATE" = "starting" ]; then setup_network fi backup_configs "$IPDELALL" i=0 for ip in ${IP_ADDR}; do i="$(find_unused_alias "$((i+1))")" create_alias "$ip" "$i" done move_configs if [ "$VE_STATE" = "running" ]; then # synchronyze config files & interfaces ifdown "$VENET_DEV" ifup "$VENET_DEV" fi fi } [root@m1 ~]# vzctl exec router rm -rf /etc/net/ifaces/venet0 [root@m1 ~]# vzctl exec mail rm -rf /etc/net/ifaces/venet0 [root@m1 ~]# vzctl exec dbms rm -rf /etc/net/ifaces/venet0 $ ping 192.168.199.2 ----------------------------------------------------------------------------------------------------------------- Настраиваем шлюз в Интернет на базе FreeBSD Алексей Бережной # ifconfig # more /usr/src/sys/i386/conf/ GENERIC # vi /etc/rc.conf # Задаем внутренний интерфейс ifconfig_xl0="inet 192.168.9.2 netmask 255.255.255.0" # Задаем внешний интерфейс ifconfig_rl0="inet 83.xxx.xxx.xxx netmask 255.255.255.224" # Задаем шлюз провайдера по умолчанию defaultrouter="83.xxx.xxx.1" # Имя хоста hostname="ourhost.ourdomain.ru" # Указываем, что сервер будет работать как маршрутизатор gateway_enable="YES" # reboot # ifconfig # cd /usr/src/sys/i386/conf # cp GENERIC ourkernel # vi ourkernel # options IPFIREWALL #firewall options IPFIREWALL_VERBOSE ? #enable logging to syslogd(8) options IPFIREWALL_FORWARD ? #enable transparent proxy support options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default # options DUMMYNET # options IPDIVERT #divert sockets # config ourkernel # cd /usr/src/sys/i386/compile/ourkernel # make depend # make # make install # reboot # Set to YES to enable firewall functionality firewall_enable="NO" # Which script to run to set up the firewall firewall_script="/etc/rc.firewall" firewall_quiet="NO" firewall_logging="NO" firewall_type="UNKNOWN" firewall_type="/etc/rc.firewall.newconfig" # vi rc.firewall.run #!/bin/sh extip="83.xxx.xxx.xxx" intip="192.168.9.2" intnet="192.168.9.0/24" mailserver="83.xxx.xxx.2" intgateway="83.xxx.xxx.1" # /sbin/ipfw -f flush & # /sbin/ipfw add 180 divert natd ip from ${intnet} to any out xmit fxp0 /sbin/ipfw add 190 divert natd ip from any to ${extip} # ICMP /sbin/ipfw add 500 allow icmp from any to any # SSH /sbin/ipfw add 10000 allow tcp from any to any 22 /sbin/ipfw add 10010 allow tcp from any 22 to any # DNS /sbin/ipfw add 11000 allow tcp from any to any 53 /sbin/ipfw add 11010 allow tcp from any 53 to any /sbin/ipfw add 11020 allow udp from any to any 53 /sbin/ipfw add 11030 allow udp from any 53 to any # Web FTP /sbin/ipfw add 12000 allow tcp from me to any 20,21,80,443 /sbin/ipfw add 12010 allow tcp from any 20,21,80,443 to me /sbin/ipfw add 12020 allow udp from me to any 20,21 /sbin/ipfw add 12030 allow udp from any 20,21 to me # # Script for the privilege group /bin/sh /etc/rc.firewall.local.inet # Deny other computer of LAN /sbin/ipfw add 12960 deny tcp from ${intnet} to any 20,21,80,443 /sbin/ipfw add 12970 deny tcp from any 20,21,80,443 to ${intnet} /sbin/ipfw add 12980 deny udp from ${intnet} to any 20,21 /sbin/ipfw add 12990 deny udp from any 20,21 to ${intnet} # # /sbin/ipfw add 13000 allow tcp from ${intnet} to ${mailserver} 25,110 /sbin/ipfw add 13010 allow tcp from ${mailserver} 25,110 to ${intnet} # /sbin/ipfw add 55010 allow tcp from any to any 1024-65534 /sbin/ipfw add 55020 allow tcp from any 1024-65534 to any /sbin/ipfw add 55030 allow tcp from any 1024-65534 to any /sbin/ipfw add 55040 allow tcp from any to any 1024-65534 /sbin/ipfw add 55050 allow udp from any to any 1024-65534 /sbin/ipfw add 55060 allow udp from any 1024-65534 to any /sbin/ipfw add 55070 allow udp from any 1024-65534 to any /sbin/ipfw add 55080 allow udp from any to any 1024-65534 # Deny all /sbin/ipfw add 65534 deny ip from any to any # vi /etc/ rc.firewall.local.inet #!/bin/sh intnet="192.168.9.0/24" privgroup={31,32} # /sbin/ipfw delete 12310 /sbin/ipfw delete 12320 /sbin/ipfw delete 12330 /sbin/ipfw delete 12340 # /sbin/ipfw add 12310 allow tcp from ${intnet}${privgroup} to any 20,21,80,443,1025-65535 /sbin/ipfw add 12320 allow tcp from any 20,21,80,443,1025-65535 to ${intnet}${privgroup} /sbin/ipfw add 12330 allow udp from ${intnet}${privgroup} to any 20,21,1025-65535 /sbin/ipfw add 12340 allow udp from any 20,21,1025-65535 to ${intnet}${privgroup} # /bin/sh rc.firewall.local.inet # /bin/sh rc.firewall.run # -- путь к самому файлу natd natd_program="/sbin/natd" # Разрешить NAT (если firewall_enable == YES) natd_enable="YES" # Внешний интерфейс или IPaddress для использования natd_interface="" # Дополнительный флаги запуска natd natd_flags="" # vi /etc/rc.local ----------------------------------------------------------------------------------------------------------------- В поисках анонимного прокси-сервера Иван Максимов #!/bin/bash # Переменная счетчик n=1 echo "Всего ресурсов "`wc -l ./site.list` while [ 1 ] do # Текстовым редактором sed построчно читаем файл site.list и заносим значение в переменную f1=`sed -n ''$n'p' ./sity.list` # Если переменная пуста, что означает конец файла – выходим из цикла if [ "$f1" = "" ]; then echo "Список обработан" exit 1 fi # Для наглядности выводим каждый раз номер строки и название ресурса echo "$n $f1" # Считываем информацию с ресурса curl $f1 --user-agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" | grep -o "[0-9.]\+[0-9.]\+[0-9.]\+:[0-9]\+" >> proxy.list # Счетчик увеличивается на 1 let "n += 1" done # Количество прокси-серверов до удаления дубликатов echo "Всего найдено"`wc -l proxy.list` cat proxy.list | sort | uniq > proxy.list # Количество прокси-серверов после удаления дубликатов echo "После сортировки осталось"`wc -l proxy.list` http://www.proxy.com http://www.proxy-list.com/list1.html http://www.proxy-list.com/list2.html http://www.proxy-list.com/listN.html ----------------------------------------------------------------------------------------------------------------- MeTA1: почтовый сервер на новый лад Сергей Супрунов smtps { log_level = 11; log { facility=mail; ident="smtps"; } CDB_gid = 262; wait_for_server = 4; listen_socket { type=inet; port = 25; } start_action = pass; pass_fd_socket = smtps/smtpsfd; user = smxs; path = "/usr/local/libexec/smtps"; arguments = "smtps -f /etc/meta1/meta1.conf"; } smtps SERV1 { ... } smtps SERV2 { ... } # grep smx /etc/passwd # grep smx /etc/group $ make check 127.0.0.1 localhost toshiba toshiba.notebook.my $ sudo make install # cd /var/spool/meta1 # ./mcp.sh start # ps axouser,command | egrep "mcp|qmgr|smtp|smar" $ cd /var/log $ ls -l mail.* $ cd meta1-1.0.PreAlpha12.0/misc $ ls -l mail.* ----------------------------------------------------------------------------------------------------------------- Интеграция BIND + PostgreSQL Сергей Алаев # cd /usr/ports/databases/postgresql80-server # make && make install # cd /var/db # mkdir pgsql # chmod 700 pgsql && chown pgsql:pgsql pgsql # mcedit /etc/rc.conf postgresql_enable=”YES” postgresql_user=”pgsql” postgresql_data=”/var/db/pgsql” # /usr/local/etc/rc.d/010.pgsql.sh initdb # mcedit /var/db/pgsql/postgresql.conf listen_addresses=’localhost’ tcpip_socket = true virtual_host = ‘127.0.0.1’ # /usr/local/etc/rc.d/010.pgsql.sh start # mkdir /usr/local/src # cd /usr/local/src/ # fetch ftp://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz # cd bind-9.3.2 # mcedit contrib/sdb/pgsql/pgsqldb.c // Заменяем строку «# include » на #include // Заменяем строку «# include “pgsqldb.h”» на # include “named/pgsqldb.h” # ./add_pgsqldb.sh # ./configure --prefix=/usr/local && make && make install # mcedit /etc/namedb/named.conf options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; }; key rndc-key { algorithm hmac-md5; secret "X4JdLjgWj2acEqQ2gyKhPw=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; }; zone "example.net" { type master; database "pgsql bind zone_example_net 127.0.0.1 bind 123456"; allow-transfer { 192.168.7.2; }; }; zone "7.168.192.in-addr.arpa" { type master; database "pgsql bind zone_192_168_7 127.0.0.1 bind 123456"; allow-transfer { 192.168.7.2; }; }; # psql –h 192.168.7.1 -d template1 -U pgsql template1=# CREATE USER bind WITH SYSID 100 PASSWORD '123456' template1=# CREATE DATABASE bind WITH OWNER = bind; # cd /usr/local/src/bind-9.3.2/contrib/sdb/pgsql # gcc -g `isc-config.sh --cflags isc dns` -c zonetodb.c # gcc -g -o zonetodb zonetodb.o `isc-config.sh --libs isc dns` -lpq # cp zonetodb /usr/local/bin/zonetodb # mcedit /etc/namedb/example.net.hosts $ttl 38400 example.net. IN SOA freebsd.example.net. bsdadmin3.mail.ru ( 1161450241 10800 3600 604800 38400 ) example.net. IN NS freebsd.example.net. example.net. IN A 192.168.7.1 freebsd.example.net. IN A 192.168.7.1 boss.example.net. IN A 192.168.7.2 semen.example.net. IN A 192.168.7.3 ignat.example.net. IN A 192.168.7.4 www.example.net. IN CNAME freebsd.example.net. example.net. IN MX 50 freebsd.example.net. example.net. IN MX 100 boss.example.net. # export PGHOST=127.0.0.1 # export PGUSER=bind # /usr/local/bin/zonetodb example.net. example.net.hosts bind zone_example_net root@localhost# mcedit 192.168.7.rev $ttl 38400 7.168.192.in-addr.arpa. IN SOA freebsd.example.net. bsdadmin3.mail.ru ( 1161450262 10800 3600 604800 38400 ) 7.168.192.in-addr.arpa. IN NS freebsd.example.net. 1.7.168.192.in-addr.arpa. IN PTR freebsd.example.net. 2.7.168.192.in-addr.arpa. IN PTR boss.example.net. 3.7.168.192.in-addr.arpa. IN PTR semen.example.net. 4.7.168.192.in-addr.arpa. IN PTR ignat.example.net. root@localhost# /usr/local/bin/zonetodb 7.168.192.in-addr.arpa. 192.168.7.rev bind zone_192_168_7 # mcedit /etc/rc.conf named_enable=”YES” named_program=”/usr/local/sbin/named” named_chroot_dir=”/var/named” named_flags=”-u bind –c /etc/namedb/named.conf” # mcedit /usr/local/etc/rc.d/010.pgsql.sh # PROVIDE: postgresql # REQUIRE: NETWORKING SERVERS # KEYWORD: FreeBSD shutdown # BEFORE: # /etc/rc.d/named start # cd /usr/ports/dns/bind9-dlz # make clean && make && make install # mcedit /etc/namedb/named.conf options { directory "/etc/namedb"; pid-file "/var/run/named.pid"; listen-on { 192.168.7.1; }; }; key rndc-key { algorithm hmac-md5; secret "3lyE4327kU/qr6C/THQflg=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; }; dlz "postgres zone" { database "postgres 1 // Определяем параметры подключения к базе данных {host=192.168.7.1 port=5432 dbname=bind ? user=bind password=123456} // Определяем запрос для поиска зоны в таблице dns_records. Все зоны будут храниться в этой таблице. // Вместо переменной %zone% во время обработки DNS-запроса подставляется название требуемой зоны {select zone from dns_records where zone = '%zone%'} // Определяем запрос для поиска записи в таблице. Данный запрос используется, например, для обработки // запросов на получение имени по IP-адресу и наоборот. Вместо переменной %record% вставляется название записи // (DNS имя или IP адрес). {select ttl, type, mx_priority, case ? when lower(type)='txt' then '\"' || data || '\"' when lower(type)='soa' then data || ' ' || resp_person || ' ' || serial || ' ' || refresh || ' ' || retry || ' ' || expire || ' ' || minimum else data end from dns_records where zone = '%zone%' and host = '%record%'} {} // Определяем запрос для получения содержимого всей зоны {select ttl, type, host, mx_priority, case when lower(type)='txt' then '\"' || data || '\"' else data end, resp_person, serial, refresh, retry, expire, minimum from dns_records where zone = '%zone%'} // Формируем запрос для получения адресов клиентов, которым разрешено получать содержимое зоны {select zone from xfr_table where zone = '%zone%' and client = '%client%'}"; }; # psql –h 192.168.7.1 -d template1 -U pgsql template1=# CREATE USER bind WITH SYSID 100 PASSWORD '123456' template1=# CREATE DATABASE bind WITH OWNER = bind; template1=# \c bind bind =# CREATE TABLE dns_records ( "zone" text, host text ttl int8, "type" text, mx_priority text, data text, resp_person text, serial int8, refresh int8, retry int8, expire int8, minimum int8 ) WITH OIDS; bind =# CREATE INDEX host_index ON dns_records USING btree (host); bind =# CREATE INDEX type_index ON dns_records USING btree ("type"); bind =# CREATE INDEX zone_index ON dns_records USING btree ("zone"); bind =# CREATE TABLE xfr_table ( "zone" text, client text ) WITH OIDS; bind =# INSERT INTO dns_records("zone", host, ttl, "type", data, resp_person, serial, refresh, retry, expire, minimum) VALUES ('example.net', '@',38400, 'SOA','freebsd.example.net.','bsdadmin3.mail.ru.', 1161450241,10800,3600,604800,38400); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', '@','NS','freebsd.example.net.') bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', '@','A','192.168.7.1'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', 'freebsd','A','192.168.7.1'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', 'boss','A','192.168.7.2'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', 'semen','A','192.168.7.3'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', 'ignat','A','192.168.7.4'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('example.net', 'www','CNAME','freebsd.example.net.'); bind =# INSERT INTO dns_records("zone", host, "type", mx_priority, data) VALUES ('example.net', 'example.net','MX',50,'freebsd.example.net.'); bind =# INSERT INTO dns_records("zone", host, "type", mx_priority, data) VALUES ('example.net', 'example.net','MX',100,'boss.example.net.'); bind =# INSERT INTO dns_records("zone", host, ttl, "type", data, resp_person, serial, refresh, retry, expire, minimum) VALUES ('7.168.192.in-addr.arpa', '@',38400, 'SOA','freebsd.example.net.','bsdadmin3.mail.ru.', 1161450262,10800,3600,604800,38400); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('7.168.192.in-addr.arpa', '@','NS', 'freebsd.example.net.'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('7.168.192.in-addr.arpa ', '1','PTR','freebsd.example.net.'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('7.168.192.in-addr.arpa ', '2','PTR','boss.example.net.'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('7.168.192.in-addr.arpa ', '3','PTR','semen.example.net.'); bind =# INSERT INTO dns_records("zone", host, "type", data) VALUES ('7.168.192.in-addr.arpa ', '4','PTR','ignat.example.net.'); bind =# INSERT INTO xfr_table VALUES ('example.net', '192.168.7.2'); bind =# INSERT INTO xfr_table VALUES ('7.168.192.in-addr.arpa', '192.168.7.2'); # /etc/rc.d/named start ----------------------------------------------------------------------------------------------------------------- Выдержит ли нагрузку ваш веб-сервер? Обзор программ для стресс-тестирования Сергей Яремчук $ bin/jmeter -H proxy.server -P 8000 -u username -a password ----------------------------------------------------------------------------------------------------------------- Как надо и как не надо защищать веб-контент от кражи Крис Касперски Листинг 1. Листинг Java-скрипта, блокирующий правую кнопку мыши Листинг 2. Исходный код Java-скрипта, блокирующего не только правую кнопку мыши, но еще и выделение текста всеми доступными способами Листинг 3. Вывод содержимого сайта через скрипты и, как следствие, препятствующий их отключению -----------------------------------------------------------------------------------------------------------------