Проверяем HTTP-трафик на лету Андрей Маркелов # mkdir /var/tmp/havp # chown nobody /var/tmp/havp # chgrp nobody /var/tmp/havp # mount -t tmpfs -o size=100M,mand tmpfs /var/tmp/havp # tmpfs /var/tmp/havp tmpfs auto,size=100M,mand 0 0 # df -h /var/tmp/havp # mkdir /var/log/havp # chown nobody /var/log/havp # chgrp nobody /var/log/havp # tar zxvf havp-0.62.tar.gz # mkdir /var/log/havp # chown nobody /var/log/havp # chgrp nobody /var/log/havp Теперь развернем предварительно скачанный со странички [4] исходные коды прокси-сервера. # tar zxvf havp-0.62.tar.gz Далее, заходим в директорию havp-0.62 и начинаем править файл havp/default.h. Изменить требуется следующее: #define GROUP "nobody" // В дополнение к пользователю, из-под которого будет запускаться служба, меняем на nobody и группу #define PARENTPROXY "localhost" #define PARENTPORT 3128 // Указываем хост и порт, на котором установлен кэширующий прокси-сервер, например Squid. Если «родительского» // прокси у вас нет, то комментируем #define SCANTEMPFILE "/var/tmp/havp-XXXXXX" #define ACCESSLOG "/var/log/havp/access.txt" #define ERRORLOG "/var/log/havp/error.txt" // Указываем шаблон временных файлов и имена файлов журналов. При этом все три указанные директории и два // файла журналов должны быть созданы вручную и иметь соответствующие разрешения для пользователя, // из-под которого запускается HAVP. Естественно, вы можете изменить пути и названия файлов по своему усмотрению # ./configure # make # make install # groupadd clamav # useradd -g clamav -s /bin/false clamav # ./configure # make # make install 1 * * * * /usr/local/bin/freshclam -quiet LocalSocket /var/run/clamd.sock StreamSaveToDisk Example # /usr/local/sbin/clamd ----------------------------------------------------------------------------------------------------------------- DansGuardian + ClamAV: фильтруем веб-содержимое и строим антивирусную защиту Андрей Авраменко ./configure make make install ./configure –-prefix=/usr make make install ./configure --sysconfdir=/etc/dansguardian/ --cgidir=/var/www/cgi-bin/ --runas_usr=squid --runas_grp=squid make make instal reportinglevel = 3 languagedir = '/etc/dansguardian/languages' # К сожалению, русского языка в списке нет. Я сделал перевод и в ближайшее время отправлю автору. Вы можете # скачать архив с сайта журнала http://www.samag.ru, раздел «Исходный код». Чтобы установить язык, необходимо # разархивировать файл в папку /etc/dansguardian/languages и в конфигурационном файле указать: language = 'russian' # Что записывать в лог # 0 = none 1 = just denied 2 = all text based # 3 = all requests loglevel = 2 # Протоколировать, если страница была передана пользователю logexceptionhits = on # формат ведения лога # 1 = DansGuardian format 2 = CSV-style format # 3 = Squid Log File Format 4 = Tab delimited logfileformat = 1 # Местонахождение лог-файла loglocation = '/var/log/dansguardian/access.log' # Сетевые опции # IP-адрес, на котором слушает dansguardian filterip = filterport = 8080 # IP-адрес и порт прокси-сервера (squid или oops) proxyip = 127.0.0.1 proxyport = 3128 # URL, на который произойдет переадресация при блокировке accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl' nonstandarddelimiter = on # Заменять запрещенную картинку какой-нибудь своей usecustombannedimage = 1 custombannedimagefile = '/etc/dansguardian/transparent1x1.gif' # Создать фильтр для группы пользователей. # Dansguardian будет автоматически смотреть в файл dansguardianfN.conf, где N – номер группы filtergroups = 1 # Чтобы поставить пользователей в соответствие с группами, отредактируйте файл filtergrouplist filtergroupslist = '/etc/dansguardian/filtergroupslistv # Местоположение файлов аутентификации bannediplist = '/etc/dansguardian/bannediplist' exceptioniplist = '/etc/dansguardian/exceptioniplist' banneduserlist = '/etc/dansguardian/banneduserlist' exceptionuserlist = '/etc/dansguardian/exceptionuserlist' # Записывать в лог найденные причины блокировки. showweightedfound = on # 0 = off – не использовать # 1 = on, normal – использовать в стандартном режиме # 2 = on, singular – записывать каждый аргумент, но только один раз для страницы weightedphrasemode = 2 urlcachenumber = 2000 urlcacheage = 900 # Фильтрация содержимого по фразам # 0 – фильтрация html вместе с мета-тэгами # 1 - удаление многочисленных пробелов и html-тэгов перед фильтрацией # 2 – оба метода phrasefiltermode = 2 preservecase = 0 # Перекодировка в hex для фильтрования документов с различными кодировками hexdecodecontent = 0 # Использовать алгоритм «Quick Search», в отличие от алгоритма DFA. Алгоритм DFA позволяет работать быстрее, # но его текущая версия не совсем совместима с 16-битными символами. Если вы хотите использовать 16-битные символы, # включите эту опцию. forcequicksearch = 0 reverseaddresslookups = off reverseclientiplookups = off # Создавать файлы bannedsitelist и bannedurllist со списком запрещенных сайтов и URL createlistcachefiles = on # Максимальный размер передаваемого от клиента файла в байтах # 0 – блокировать # -1 – не блокировать или размер файла maxuploadsize = -1 maxcontentfiltersize = 256 # Методы аутентификации пользователя на прокси-сервере usernameidmethodproxyauth = on # **На данный момент не работает** usernameidmethodntlm = off usernameidmethodident = off preemptivebanning = on # Добавлять заголовки X-Forwarded-For: forwardedfor = off usexforwardedfor = off logconnectionhandlingerrors = on # Опции дочерних процессов # Максимальное количество процессов maxchildren = 120 # Первоначальное количество процессов minchildren = 8 # Количество процессов, которые должны быть готовы к соединению minsparechildren = 4 preforkchildren = 6 # Максимальное количество бездействующих процессов maxsparechildren = 32 # Максимальное количество сайтов, обработанных процессом maxagechildren = 500 # Опции коммуникации между процессами ipcfilename = '/tmp/.dguardianipc' urlipcfilename = '/tmp/.dguardianurlipc' # PID filename pidfilename = '/var/run/dansguardian.pid' nodaemon = off nologger = off # Пользователь и группа, с чьими правами запускается dansguardian daemonuser = 'squid' daemongroup = 'squid' softrestart = off # Антивирусные настройки # -------------------- # Включить проверку на вирусы virusscan = on # Способ проверки clamdscan, clamav или kav virusengine = 'clamav' # Максимальное количество информации, переданной клиенту, если файл содержит вирус tricklelength = 32768 firsttrickledelay = 30 followingtrickledelay = 60 # Список типов MIME, не проверяемых на вирусы exceptionvirusmimetypelist = '/etc/dansguardian/exceptionvirusmimetypelist' # Максимальный размер содержимого для проверки, # если 0 – не ограничено maxcontentscansize = 0 # Файлы с определенными расширениями не будут проверяться exceptionvirusextensionlist = '/etc/dansguardian/exceptionvirusextensionlist' # Временная директория, в которую сохраняется файл для проверки downloaddir = '/tmp/dgvirus' # В директории /etc/dansguardian содержатся несколько файлов, в которых можно вписывать исключения, # т.е. информация с данных сайтов, url, ip или по запросам данных пользователей не будет фильтроваться. virusscanexceptions = on urlcachecleanonly = on virusscannertimeout = 60 # Использование почтового оповещения notify = 0 # Настройки CLAMDSCAN # -------------------- # Сокет демона clamd (указывается в clamd.conf) localsocket = '/tmp/clamd' # Настройки CLAMAV # -------------------- clmaxfiles = 1500 clmaxreclevel = 3 clmaxfilesize = 10485760 iptables -t nat -A PREROUTING --dst x.x.x.x -p tcp --dport 3128 -j DNAT --to-destination x.x.x.x:8080 ----------------------------------------------------------------------------------------------------------------- Запускаем spamd на FreeBSD Сергей Супрунов table persist rdr pass inet proto tcp from to any port smtp -> 1.2.3.25 port 8025 ${fwcmd} add 200 deny all from any to 127.0.0.0/8 ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any # cd /usr/ports/mail/spamd; make install pf_enable="YES" pf_flags="" pflog_enable="YES" pfspamd_enable="YES" pfspamd_flags="-v" # ./pfspamd.sh start all:\ :spamhaus:blacklist:whitelist: spamhaus:\ :black:\ :msg="SPAM. Your address %A is in the Spamhaus Block List\n\ See http://www.spamhaus.org/sbl and\ http://www.abuse.net/sbl.phtml?IP=%A for more details":\ :method=http:\ :file=www.openbsd.org/spamd/SBL.cidr.gz: blacklist:\ :black:\ :msg="SPAM. Blocked by me":\ :file=/usr/local/etc/spamd/blacklist.txt: whitelist:\ :white:\ :file=/usr/local/etc/spamd/whitelist.txt: # Пример черного списка 192.168.0.5 # Отдельный IP-адрес 10.0.0.1 – 10.0.2.255 # Диапазон адресов наглых спаммеров!!! 5.6.7.0/24 # Так можно задать подсеть # Попытка обмануть spamd: 255.255.255.254 # /usr/local/sbin/spamd-setup -d !spamd *.* /var/log/spamd.log # touch /var/log/spamd.log # kill –HUP `cat /var/run/syslog.pid` all:\ :blacklist: blacklist:\ :black:\ :msg="SPAM. Blocked by me":\ :file=/usr/local/etc/spamd/blacklist.txt: all:\ :blacklist:whitelist: blacklist:\ :black:\ :msg="SPAM. Blocked by me":\ :file=/usr/local/etc/spamd/blacklist.txt: whitelist:\ :white:\ :file=/usr/local/etc/spamd/whitelist.txt: table persist rdr pass inet proto tcp from ! to any port smtp -> 1.2.3.25 port spamd pfspamd_flags="-g –G 25:4:864 -v" # mount_fdescfs 7 /dev/fd/ # /usr/local/sbin/spamdb # pfctl -t spamd-white -Tshow # /usr/local/sbin/spamdb root# /usr/local/sbin/spamdb -d 10.0.0.203 root# /usr/local/sbin/spamdb root# /usr/local/sbin/spamdb -a 10.161.193.253 root# /usr/local/sbin/spamdb # /usr/local/sbin/spamdb -T -a "" # /usr/local/sbin/spamdb -t -a 10.0.0.225 # /usr/local/sbin/spamdb | grep TRAP Листинг 1. Сценарий a2w.py #!/usr/local/bin/python import sys, os def Usage(): print 'Usage: a2w.py filename' sys.exit(-1) # Подпрограмма «разворачивает» подсеть в список адресов def Expand(subnet): global whitelist if subnet.find(‘/’) == -1: subnet = subnet + '/32' netaddr, masklen = subnet.split('/') masklen = int(masklen) # Если ошибка – оставляем запись как есть if masklen < 1 or masklen > 32: whitelist.append(subnet) return # Здесь используется синтаксис «расширенного списка» – результат будет получен как список значений функции int # для каждого элемента в списке, возвращаемом функцией split o1, o2, o3, o4 = [int(o) for o in netaddr.split('.')] for i in range(0, 2 ** (32 - masklen + 1)): addr = '%d.%d.%d.%d' % (o1, o2, o3, o4) whitelist.append(addr) o4 += 1 if o4 == 256: o3 += 1; o4 = 0 if o3 == 256: o2 += 1; o3 = 0 if o2 == 256: o1 += 1; o2 = 0 # Если нельзя, но очень хочется – то можно! # (Это про несколько операторов в одной строке…) #---------------------------------------------- if len(sys.argv) != 2: Usage() DEBUG = 1 errcnt = 0 spamdbcmd = '/usr/local/sbin/spamdb' filelist = open(sys.argv[1], 'r').readlines() whitelist = [] for line in filelist: Expand(line[:-1]) for addr in whitelist: cmd = spamdbcmd + ' -a ' + addr # Запятая после аргументов команды print оставляет курсор на текущей строке if DEBUG: print 'Try: ' + cmd, # Функция os.system вернет 0, если указанная как аргумент команда будет выполнена успешно err = os.system(cmd) if err: errcnt += 1 if DEBUG: print 'Failed' else: if DEBUG: print 'ok' if errcnt: print 'WARNING: executed with errors (see above)' # cat wl.txt # ./a2w.py wl.txt # /usr/local/sbin/spamdb | grep WHITE ----------------------------------------------------------------------------------------------------------------- Развёртываем Heimdal Kerberos Михаил Кондрин tar xzvf heimdal-0.6.3.tar.gz cd heimdal-0.6.3 ./configure --prefix=/usr --enable-shared make make install mkdir /var/heimdal chmod 600 /var/heimdal [libdefaults] default_realm=MYREALM.RU [realms] MYREALM.RU={ kdc=kdc.myrealm.ru admin_server=kdc.myrealm.ru kpasswd_server = kdc.myrealm.ru } [logging] kdc=FILE:/var/log/krb5kdc.log admin_server=FILE:/var/log/kadmin.log default=FILE:/var/log/krb5.log _kerberos TXT "MYREALM.RU" kerberos CNAME kdc _kerberos._udp SRV 0 0 88 kdc _kerberos._tcp SRV 0 0 88 kdc _kerberos-adm._tcp SRV 0 0 749 kdc _kpasswd._udp SRV 0 0 464 kdc sudo /usr/sbin/kadmin -l kadmin>init MYREALM.RU kadmin>add admin/admin@MYREALM.RU kadmin>add mike@MYREALM.RU kadmin> add --random-key host/kdc.myrealm.ru@MYREALM.RU kadmin>ext */kdc.myrealm.ru@MYREALM.RU /usr/libexec/kdc -c /etc/krb5.conf --detach /usr/libexec/kadmind /usr/libexec/kpasswdd kerberos-adm stream tcp nowait root /usr/libexec/kadmind kadmindIN admin/admin@MYREALM.RU all *@MYREALM.RU cpw kinit -p admin/admin kadmin kadmin> list * kinit admin/admin kadmin kadmin>add --random-key host/server.myrealm.ru@MYREALM.RU kadmin>add --random-key ftp/server.myrealm.ru@MYREALM.RU kadmin>ext */server.myrealm.ru@MYREALM.RU telnet stream tcp nowait root /usr/libexec/telnetd telnetd -L /usr/bin/login ftp stream tcp nowait root /usr/libexec/ftpd ftpd shell stream tcp nowait root /usr/libexec/rshd rshd -vkshell stream tcp nowait root /usr/libexec/rshd rshd -k ekshell stream tcp nowait root /usr/libexec/rshd rshd -kx kx stream tcp nowait root /usr/libexec/kxd kxd time dgram udp wait root internal c1:123:respawn:/sbin/agetty 38400 tty1 linux c2:123:respawn:/sbin/agetty 38400 tty2 linux k1:5:respawn:/sbin/agetty -l /usr/bin/login 38400 tty1 linux k2:5:respawn:/sbin/agetty -l /usr/bin/login 38400 tty2 linux kinit admin/admin kadmin kadmin>add -pw passwordforWinXP host/xp.myrealm.ru@MYREALM.RU C:> ksetup /setdomain MYREALM.RU C:> ksetup /addkdc MYREALM.RU kdc.myrealm.ru C:> ksetup /setcomputerpassword passwordforWinXP C:> ksetup /mapuser * * C:> ksetup /mapuser mike@MYREALM.RU mikeXP set KRB5CCNAME = FILE:C:\Cygwin\tmp\krb5cc_1017 ms2mit HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters AllowTGTSessionKey = 0x01 (DWORD) HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos AllowTGTSessionKey = 0x01 (DWORD) ----------------------------------------------------------------------------------------------------------------- Настраиваем Kerberos поверх LDAP Алексей Барабанов # rpm -qa | grep heimdal # ldd /usr/lib/heimdal/sbin/kdc | grep ldap # rpm -ivh heimdal-0.6-67.src.rpm # cat /usr/src/packages/SPECS/heimdal.spec | sed -n "/^# building with openldap/,+14p" # rpmbuild -ba /usr/src/packages/SPECS/heimdal.spec # rpm -Uvh --force /usr/src/packages/RPMS/i586/heimdal-*.rpm # ldd /usr/lib/heimdal/sbin/kdc | grep ldap # cat /etc/sysconfig/openldap | grep LDAPI # cat /etc/openldap/slapd.conf | grep krb5 # cat /etc/openldap/slapd.access.conf | grep -v "^\(#\|$\)" # rcldap start # ps -eo user,args | grep slapd | grep -v grep | head -n 1 # ls -als /var/run/slapd # cat /etc/krb5.conf # verify_krb5_conf # cat kerberos.ldif # ldapadd -v -H ldap://localhost -D "cn=ldapadmin,dc=office,dc=localnet" -x -w secret -f kerberos.ldif # kstash # ls -als /var/heimdal # kadmin -l # kadmin -l # kadmin -l $ORIGIN .office.localnet. $TTL 86400 ; 1 day _kerberos TXT "OFFICE.LOCALNET." kdc A 192.168.0.1 kerberos A 192.168.0.1 $ORIGIN _tcp.office.localnet. $TTL 600 ; 10 minutes _kerberos SRV 0 100 88 kerberos.office.localnet. _kerberos-adm SRV 0 100 749 kerberos.office.localnet. _kpasswd SRV 0 100 464 kerberos.office.localnet. $ORIGIN _udp.office.localnet. $TTL 600 ; 10 minutes _kerberos SRV 0 100 88 kerberos.office.localnet. _kpasswd SRV 0 100 464 kerberos.office.localnet. # dig _kerberos._tcp.office.localnet any +short # rckdc start # netstat -apn | grep "\(kdc\|kadmin\|kpasswd\)" # kadmin -p sysadmin/admin # cat >/var/heimdal/kadmind.acl < kinit sysadmin/admin alekseybb@wsalekseybb:~> /usr/sbin/kadmin alekseybb@wsalekseybb:~> klist alekseybb@wsalekseybb:~> /usr/sbin/kadmin ----------------------------------------------------------------------------------------------------------------- Asterisk и Linux: миссия IP-телефония Действие 2 Михаил Платов # cd /root/src/oh323 # tar xfz ./pwlib-Janus_patch4-src-tar.gz # cd pwlib # ./configure # make opt # make install # cd .. # tar xfz ./openh323-v1_13_5-src.tar.gz # cd openh323 # ./configure # make opt # make install # cd .. # tar xfz ./asterisk-oh323-0.6.6.tar.gz # cd ./asterisk-oh323-0.6.6 # make # make install * CLI> show modules [general] listenAddress=IP_адрес_интерфейса fastStart=yes inBandDTMF=yes gatekeeper=IP_адрес_GateKeeper gatekeeperPassword=secret context=generic-inc [register] context=generic_inc alias=телефонный_номер_1_от_провайдера alias=телефонный_номер_2_от_провайдера [codecs] codec=G729 frames=6 codec=G711U frames=20 codec=G729A frames=6 codec=G729B frames=6 codec=G729AB frames=6 codec=GSM0610 frames=4 codec=G7231 frames=4 [generic-inc] exten => s,1,Wait, 1 exten => s, 2, Answer exten => s,3, BackGround(local-welcomе) exten => s,4, WaitExten exten => 200,1, Macro(stdexten,200,SIP/200) exten => 201,1, Macro(stdexten,201,SIP/201) exten => 202,1, Macro(stdexten,202,SIP/202) exten=> 8500,1, VoiceMailMain exten=> 8500,n, Hangup exten => _6 Dial(OH323/{EXTEN:1},20,rT) gatekeeper=DISABLE exten => _6 Dial(OH323/prefix{EXTEN:1}@gw_addr,20,rT) # lspci # modprobe zaptel # modprobe wcfxo # cat /proc/interrupts fxsls=1 loadzone=us defaultzone=us [channels] context=[generic-inc] signalling=fxs_ls group=1 callgroup=1 pickupgroup=1 busydetect=yes busycount=5 channel=1 callerid=asreceived callprogres=yes usecallerid=yes usecallingpres=yes callwaitingcallerid=yes threewaycalling=yes transfer=yes canpark=yes cancallforward=yes pulsedial=yes echocancel=yes echocancelwhenbridging=yes echotraining=yes txgain=0.0 rxgain=0.0 exten=> _5.,1,Dial(ZAP/g1/EXTEN:1,20,rT) [pstn-dialout] exten => s,1,Wait, 1 exten => s,2, Answer exten => s,3, BackGround(pstn-announce) exten => s,4, Read(ext) exten => s,5, Dial(ZAP/g1/${ext:1},20,rT) [office] exten => 101,1,Goto(pstn-dialout,s,1) AP200# conf AP200(config)# dial-peer voice 0 pots dial-peer voice 0 pots destination-pattern 9T port 0/0 user-name 100 user-password potsfxopwd1 AP200(config)# dial-peer voice 1000 voip dial-peer voice 1000 voip destination-pattern T session target sip-server session protocol sip dtmf-relay rtp-2833 no vad AP200(config)# sip-ua sip-ua user-register sip-server 192.168.0.20 register e164 AP200(config)# translation-rule 0 AP200(config-translation-rule#0)# rule 0 9T T AP200(config-translation-rule#0)# exit AP200(config)# dial-peer voice 0 AP200(config-dialpeer-pots-0)# translate-outgoing called-number 0 AP200(config)# write [100] ;AP200 type=friend host=dynamic username=100 secret= potsfxopwd1 dtmfmode=rfc2833 context=generic-inc exten => _9,Dial(SIP/EXTEN@100,20,rT) AP200# show sip [gsm-record] exten => 150,1,Wait(2) exten => 150,2,Record(testrecord:gsm) exten => 150,3,Wait(2) exten => 150,4,Hangup exten => 151,1,Playback(testrecord2) exten => 151,2,Wait(2) exten => 151,3,Hangup # sox inputfile.wav -r 8000 -c 1 outputfile.gsm resample -ql *CLI > reload 0 0 * * * root /etc/init/asterisk restart> /dev/nu ----------------------------------------------------------------------------------------------------------------- FreeBSD tips: работаем с TFTP Сергей Супрунов tftpd -clw -s /var/tftp/cisco -u tftp ----------------------------------------------------------------------------------------------------------------- Устанавливаем связку Postfix + Exchange Владимир Агапов # cd /usr/ports/net/openldap22-client/ # make install clean # gmake tidy # gmake makefiles CCARGS="-I/usr/local/include -DHAS_LDAP" AUXLIBS="-L/usr/local/lib -R/usr/local/lib -lldap -L/usr/local/lib -R/usr/local/lib -llber" # gmake install # имя Windows-домена ldapmap_search_base = dc=office, dc=company, dc=ru # IP-адрес PDC ldapmap_server_host = 192.168.16.1 # LDAP-порт ldapmap_server_port = 3268 ldap_timeout = 60 ldapmap_query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=contact))) ldapmap_result_filter = %s ldapmap_result_attribute = canonicalName ldapmap_special_result_attribute = ldapmap_scope = sub ldapmap_bind = yes ldapmap_bind_dn = ldapquery@office.company.ru ldapmap_bind_pw = LdaPassworD ldapmap_cache = no ldapmap_dereference = 0 ldapmap_domain = office.company.ru ldapmap_debuglevel = 0 virtual_mailbox_maps = ldap:ldapmap virtual_mailbox_domains = company.ru virtual_transport = hash:/etc/postfix/virtual_transport transport_maps = hash:/etc/postfix/virtual_transport company.ru smtp:[192.168.16.5] postmap /etc/postfix/virtual_transport ----------------------------------------------------------------------------------------------------------------- Автоматизация MS Windows, или AutoIt как мечта эникейщика Часть 4 Алексей Барабанов Листинг 1. Программа получения состава оборудования AutoItSetOption ( "WinTitleMatchMode", 2 ) AutoItSetOption ( "WinDetectHiddenText", 1 ) AutoItSetOption ( "SendAttachMode", 1 ) ; open free desktop WinMinimizeAll ( ) Sleep ( ‘1000’ ) ; run test Run ( @ComSpec & " /c cpuz.exe", '' ,@SW_HIDE ) If WinWaitActive ( 'CPU-Z','',10 ) == 0 Then Exit EndIf Send ( '{RIGHT}' ) Sleep ( '1000' ) Send ( '{LEFT 2}' ) Sleep ( '1000' ) Send ( '{RIGHT 5}' ) Sleep ( '1000' ) FileDelete ( @WindowsDir & '\' & @ComputerName & '.html') AutoItSetOption ( "MouseCoordMode", 0 ) MouseClick ( 'left', 147, 412, 1 ) If WinWaitActive ( 'Сохранить как','',10 ) == 0 Then ProcessClose ( 'cpuz.exe' ) Exit EndIf Send ( '{DEL}' ) Sleep ( '1000' ) Send ( @WindowsDir & '\' & @ComputerName & '.html') Sleep ( '1000' ) Send ( '{ENTER}' ) If WinWaitActive ( 'CPU-Z','',10 ) == 0 Then ProcessClose ( 'cpuz.exe' ) Exit EndIf Send ( '!{F4}' ) If WinWaitClose ( 'CPU-Z','',10 ) == 0 Then ProcessClose ( 'cpuz.exe' ) Exit EndIf If FileExists ( @WindowsDir & '\' & @ComputerName & '.html') == 1 Then ; run browser Run ( @ComSpec & " /c rundll32 url.dll, FileProtocolHandler " & @WindowsDir & ‘\’ & @ComputerName & '.html','',@SW_HIDE ) EndIf Exit Листинг 2. Вызов программы получения состава оборудования /heap/Windows/uawsp2 # grep cpu-z \$OEM\$/\$1/InstData/GuiRunOnce.cmd ----------------------------------------------------------------------------------------------------------------- Автоматизируем подключение баз 1С новой версии 8.0 Иван Коробко $Stream = CreateObject("ADODB.Stream") $Stream.Type =2 $Stream.CharSet = "Utf-8" $Stream.Open $Stream.LoadFromFile("1.txt") $GetFile = $Stream.Readtext() $Stream.Close $Stream = CreateObject("ADODB.Stream") $Stream.CharSet = "utf-8" $Stream.Mode = 3 $Stream.Open $Stream.WriteText("Записываемые данные") $Stream.SaveToFile("1.txt") $Stream.Close) [Тестовая локальная база] Connect=File="С:\Base"; ID=28f15724-3c41-4753-b5a4-42bb454b8be3 OrderInList=32768 Folder=/Тестовые базы OrderInTree=65536 [Тестовая сетевая база] Connect=Srvr="sql.server.domain.ru";Ref="Enterprise_test"; ID=28f15724-3c41-4753-b5a4-42bb454b8be3 OrderInList=16384 Folder=/ OrderInTree=32768 [Локальные базы] ID=7fa1d5a9-d087-4026-9eea-f18a233d618f OrderInList=-1 Folder=/ OrderInTree=16384 {"N",1},"ShowIBsAsTree", {"B",1},"AutoSortIBs", {"B",0},"ShowRecentIBs", {"B",0},"LRInfoBaseIDList", [1c8] ShowAsTree=1 AutoSort=1 DefaultBaseName=Сетевая база данных 1 … $DefaultBaseName=readprofilestring("$config_ini","1c8","DefaultBaseName") $meta_1c8=readprofilestring("$config_ini","1c8","base1c8prefix") $ShowAsTree=readprofilestring("$config_ini","1c8","ShowAsTree") $AutoSort=readprofilestring("$config_ini","1c8","AutoSort") … … if instr(ucase($des), ucase($DefaultBaseName))<>0 $default_guid=right( $infos[1],len( $infos[1])-3) Endif … $en=chr(13)+chr(10) … $cfg = $cfg + "{"+$en $cfg = $cfg + "{" + chr(34) + "LRInfoBaseIDListSize" + chr(34) + ","+$en $cfg = $cfg + "{" + chr(34) + "N" + chr(34) + ","+ $ShowAsTree+"}," + chr(34) + "ShowIBsAsTree" + chr(34) + ","+$en $cfg = $cfg + "{" + chr(34) + "B" + chr(34) + ","+ $AutoSort+"}," + chr(34) + "AutoSortIBs"+ chr(34) + ","+$en … $cfg = $cfg + "}"+$en Data\1C\1Cv8». $FSO = CreateObject("Scripting.FileSystemObject").GetFile($path_to_base+"1cv8strt.pfl") if @error=0 $FSO.Delete endif $FSO.close $Stream = CreateObject("ADODB.Stream") $Stream.CharSet = "utf-8" $Stream.Mode = 3 $Stream.Open $Stream.WriteText($cfg) $Stream.SaveToFile($path_to_base+"1cv8strt.pfl") $Stream.Closeendif $fso = CreateObject("Scripting.FileSystemObject") $fso.DeleteFile($f_name) $fso.close a[0]= "[Тестовая сетевая база]" + chr(13) + chr(10) + "Connect= File = " + chr(34) + "С:\Base" + chr(34) + ";" + chr(13) + chr(10) + "ID=28f15724-3c41-4753-b5a4-42bb454b8be3" + chr(13) + chr(10) + "OrderInList=16384" + chr(13) + chr(10) + "" + chr(13) + chr(10) + "Folder=/" + chr(13) + chr(10) + "OrderInTree=32768" $en=chr(13)+chr(10) … $temp="" ' расчленение строки на элементы массива. ' Признак – наличие "[" $array_0=split($GetFile,"[") for each $element in $array_0 ' "connect=file=" – признак локальности БД if instr(ucase($element),ucase("connect=file="))<>0 $element="["+$element $temp=$temp+$element endif next $array_base=split($temp, $en) ' массив локальных баз $virtual_local_folder="Локальные базы" for $i=0 to ubound($array_base) $element=$array_base[$i] if instr(ucase($array_base[$i]),ucase("orderin"))<>0 $array_base[$i]=left($element,instr($element,"=")) endif if instr(ucase($element),ucase("folder="))<>0 $array_base[$i]=left($element,instr($element,"=")+1)+$virtual_local_folder endif next $array_base[0]= "[Тестовая сетевая база]" $array_base[1]= "Connect=File="С:\Base";" $array_base[2]= "ID=28f15724-3c41-4753-b5a4-42bb454b8be3" $array_base[3]= "OrderInList=" $array_base[4]= "Folder=/ Локальные базы" $array_base[5]= "OrderInTree=" …………………………………. $i=0 $Temp="" Do $Group = EnumGroup($i) $i = $i + 1 If instr(ucase($group), ucase("1c8$_"))<>0 ………….. EndIf Until Len($Group) =0 MessageBox("$Temp","",0,0) ' определение имени текущено домена $Domain = "LDAP://"+GetObject("LDAP://RootDSE").Get("defaultNamingContext") $objConnection = CreateObject("ADODB.Connection") $objCommand = CreateObject("ADODB.Command") $objConnection.CommandTimeout = 120 $objConnection.Provider = "ADsDSOObject" $objConnection.Open ("Active Directory Provider") $objCommand.ActiveConnection = $objConnection $i=ubound($array_base) DO $Group = ENUMGROUP($p) if instr("$Group","$meta_1c8")<>0 $1c8_group=right($group,len($group)-instrrev($group,"\")) $strADSQuery = "SELECT name,info,description FROM '" +$domain+"' WHERE objectClass='group’ and samaccountname='"+$1c8_group+"'" $objCommand.CommandText = $strADSQuery $st = $objCommand.Execute $st.Movefirst Do $name = $St.Fields("name").Value $description = $St.Fields("description").Value $des="" For each $element in $description $des=$des+$element Next $infos = split($St.Fields("info").Value,chr(13)+chr(10)) ………………………………. $st.MoveNext Until $st.EOF endif $p=$p+1 UNTIL Len($Group) = 0 $1c8_group=right($group,len($group)-instrrev($group,"\")) $i=ubound($array_base) DO … $array_base[$i]="["+$des+"]" $infos = split($St.Fields("info").Value,chr(13)+chr(10)) $array_base[$i+1]= "Connect="+$infos[0] $array_base[$i+2]= $infos[1] $array_base[$i+3]= "OrderInList=" $array_base[$i+4]= $infos[2] $array_base[$i+5]= "OrderInTree=" $i=$i+6 … $path_to_base=CreateObject("WScript.Shell").SpecialFolders(5)+"\1C\1Cv8\" … $id_dir_name=$path_to_base+right( $infos[1],len( $infos[1])-3) … md $id_dir_name ; создание каталога ; создание файла def.usr $FSO = CreateObject("Scripting.FileSystemObject").GetFile($id_dir_name+"\def.usr") if @error=0 $FSO.Delete endif $FSO.close $Stream = CreateObject("ADODB.Stream") $Stream.CharSet = "utf-8" $Stream.Mode = 3 $Stream.Open $Stream.WriteText("{"+chr(34)+"У Вас нет доступа. Обратитесь к системному администратору."+chr(34)+"}") $Stream.SaveToFile($id_dir_name+"\def.usr") $Stream.Close … $local_folder = "[Локальные базы]" + $en + "ID=7fa1d5a9-d087-4026-9eea-f18a233d618f" + $en + "OrderInList=-1" + $en + "Folder=/" + $en + "OrderInTree=16384" $test_folder = "[Тестовые базы]" + $en + "ID=7fa1d5a9-d087-9636-9eea-f18a233d618f" + $en + "OrderInList=-1" + $en + "Folder=/" + $en + "OrderInTree=32768" $const_w=16384 $w_1=1 $w_2=3 for each $element in $array_base if instr(ucase($element),ucase("orderintree"))<>0 $s=$s+$element+cstr($const_w*$w_2)+$en $w_2=$w_2+1 else if instr(ucase($element), ucase("orderinlist"))<>0 $s=$s+$element+cstr ($const_w*$w_1)+$en $w_1=$w_1+1 else $s=$s+$element+$en endif endif next $en=chr(13)+chr(10) … $Stream = CreateObject("ADODB.Stream") $Stream.CharSet = "utf-8" $Stream.Mode = 3 $Stream.Open $Stream.WriteText($local_folder+$en+$test_folder+$en+$s) $Stream.SaveToFile($path_to_base+"v8ib.lst") $Stream.Close ----------------------------------------------------------------------------------------------------------------- bugtraq стр. 59 http://[target]/csv_db/csv_db.cgi?fil e=file.extention|command| ----------------------------------------------------------------------------------------------------------------- Open-Xchange – свободу группам! Павел Лебедев > cd $p_dir/java/jdk15 > sudo make install > sudo kldload linprocfs > sudo mount -t linprocfs linprocfs /compat/linux/proc > sudo make clean && sudo make install clean > java -version > cd $OX_install > unzip javamail-1_3_2.zip > sudo mv ./javamail-1.3.2 /usr/local/javamail > unzip jaf-1_0_2-upd.zip > sudo mv ./jaf-1.0.2 /usr/local/jaf > tar xzvf Xerces-J-bin.2.6.2.tar.gz > sudo mv ./xerces-2_6_2 /usr/local/xerces > tar xzvf jdom-1.0.tar.gz > sudo mv ./jdom-1.0 /usr/local/jdom > cd $p_dir/www/jakarta-tomcat5 > sudo make install clean > sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh start > lynx http://127.0.0.1:8180 > cd $p_dir/devel/p5-Storable > sudo make install clean > cd $p_dir/databases/postgresql80-server > sudo make install clean > sudo /usr/local/etc/rc.d/010.pgsql.sh initdb > sudo /usr/local/etc/rc.d/010.pgsql.sh start > sudo su -l -m pgsql %createuser –pwprompt %createdb -O openxchange -E UNICODE openxchange > sudo mkdir /usr/local/jdbc > sudo cp pg74.215.jdbc3.jar /usr/local/jdbc > cd $p_dir/www/apache2 > sudo make install clean > cd $p_dir/devel/apache-ant > sudo make install clean > cd $p_dir/www/mod_jk-apache2 > sudo make install clean > cd $p_dir/net/openldap22-server > sudo make -DWITH_ACI install clean slapd_enable="YES" slapd_flags='-h "ldap://127.0.0.1/"' > cd $OX_install > tar xzvf open-xchange-0.7.5.tar.gz > cd open-xchange-0.7.5 > ./configure -help > ./configure –prefix=$OX_home \ > --enable-webdav --enable-doc \ > --with-mailjar=/usr/local/javamail/mail.jar \ > --with-activationjar=/usr/local/jaf/activation.jar \ > --with-jdomjar=/usr/local/jdom/build/jdom.jar \ > --with-xercesjar=/usr/local/xerces/xercesImpl.jar \ > --with-jsdkjar=/usr/local/jakarta-tomcat5.0/common/lib/servlet-api.jar \ > --with-jdbcjar=/usr/local/jdbc/pg74.215.jdbc3.jar \ > --with-dbpass=open \ > --with-runuid=www –with-rungid=www > make > sudo make install > cd $OX_home/share/perl/ > sudo cp login.pl login.pm /usr/local/www/cgi-bin/ > sudo /usr/local/etc/rc.d/apache2.sh start > lynx http://127.0.0.1/cgi-bin/login.pl > cd /usr/local/jakarta-tomcat5.0/webapps > sudo mkdir -p servlet/WEB-INF/classes servlet/WEB-INF/lib > sudo cp $OX_home/share/servlets/*.class ./servlet/WEB-INF/classes > cd servlet/WEB-INF/ Servlet OpenXchange Servlet OpenXchange 0.7.5 intranet intranet OX Groupware OX intranet /intranet webmail webmail OX Webmail OX webmail /webmail > cd /usr/local/jakarta-tomcat5.0/webapps/servlet/WEB-INF/lib > sudo cp $OX_home/lib/*.jar . > sudo chown -R www:www /usr/local/jakarta-tomcat5.0/webapps/ > sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh stop > sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh start > lynx http://127.0.0.1:8180/servlet/intranet LoadModule jk_module libexec/apache2/mod_jk.so JkWorkersFile /usr/local/etc/apache2/workers.properties JkLogFile /var/log/apache2/mod_jk.log JkLogLevel error JkMount /servlet/* test Alias /servlet "/usr/local/jakarta-tomcat5.0/webapps/servlet" AllowOverride None deny from all worker.list=test worker.test.port=8009 worker.test.host=localhost worker.test.type=ajp13 worker.test.lbfactor=1 workers.tomcat_home=/usr/local/jakarta-tomcat5.0 workers.java_home=/usr/local/jdk1.5.0 > sudo su -l -m pgsql NAS_CON_CLASS_NAME: jdbc:postgresql://localhost/openexchange NAS_CON_USER: openexchange NAS_CON_CLASS_NAME: jdbc:postgresql://localhost/openxchange NAS_CON_USER: openxchange BASE dc=example,dc=org HOST localhost include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/nis.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/openxchange/share/openxchange.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args database bdb suffix "dc=example,dc=org" rootdn "cn=Manager,dc=example,dc=org" rootpw secret directory /var/db/openldap-data index objectClass eq index uid,mailEnabled,cn,sn,givenname,lnetMailAccess,alias,loginDestination eq,sub > sudo /usr/local/etc/rc.d/slapd.sh start userPassword: {CRYPT}newmailadminpass > perl -e 'print crypt(YOURPASSHERE,pack("C2",(int(rand 26)+65),(int(rand 26)+65)));' > sudo slapadd -l $OX_home/share/init_ldap.ldif > sudo ln -s /usr/local/etc/openldap/ldap.conf $OX_home/etc/groupware/ldap.conf > sudo ln -s /usr/local/etc/openldap/ldap.conf $OX_home/etc/webmail/ldap.conf > sudo ln -s /usr/local/bin/bash /bin/bash > sudo $OX_home/sbin/adduser_ox \ > --username="test" \ > --passwd="test" \ > --name="Pavel" \ > --sname="Lebedev" \ > --maildomain="example.org" \ > --ox_timezone="Europe/Kiev" DEFAULT_SQL_DB="openxchange" DEFAULT_SQL_USER="openxchange" > sudo $OX_home/sbin/addgroup_ox –group=developers > cd /usr/local/www/data > sudo mkdir -p cfintranet/webmail > cd $OX_home/share/groupware/data/ > sudo cp -R images css javascript/usr/local/www/data/cfintranet/ > cd $OX_home/share/webmail/data/ > sudo cp -R images css javascript/usr/local/www/data/cfintranet/webmail > cd $OX_home/sbin/ > sudo sh ./correctfilespool > cd $OX_install > tar xzvf ./OX-RU-Groupware.0.7.5.tar.gz > sudo cp -r ~/opt/html/RU $OX_home/share/groupware/data/templates/ > sudo cp -r ~/opt/locales/RU.dlc $OX_home/etc/groupware/locales/ > rm -r ./opt > tar xzvf ./OX-RU-Webmail.0.7.5.tar.gz > sudo cp -r ~/opt/html/RU $OX_home/share/webmail/data/templates/ > sudo cp -r ~/opt/locales/RU.dlc $OX_home/etc/webmail/locales/ > rm -r ./opt my $languages = ['DE','EN']; my $languages = ['EN','RU']; > sudo ln -s /usr/local/www/data/cfintranet/images/top/EN ./RU > sudo ln -s /usr/local/www/data/cfintranet/webmail/images/top/EN ./RU >cd /usr/local/etc/rc.d >sudo ./020.jakarta-tomcat50.sh stop >sudo ./020.jakarta-tomcat50.sh start >sudo ./apache2 .sh stop >sudo ./apache2.sh start sudo -u $USER $OX_BIN >> $LOGFILE 2>&1 & ps xao "pid args" | grep -E '.*java.*-DappName=groupwareApp' | grep -v grep | awk '{print $1}' ps axwww | grep -E '.*java.*-DappName=groupwareApp' | grep -v grep | awk '{print $1}' su $USER -s /bin/bash $OX_BIN >> $LOGFILE 2>&1 & > sudo $OX_home/etc/init.d/openexchange start SERVER=$(test "$HOSTTYPE" == "i386" && echo "-server") SERVER=$(test "$HOSTTYPE" == "FreeBSD" && echo "-server") ----------------------------------------------------------------------------------------------------------------- Удаленно управляем BIOS Setup Крис Касперски Листинг 1. Перехватчик передает управление нашему коду в момент загрузки Boot-сектора ; перехватываем INT 01h MOV ax, CS XOR bx,bx MOV DS,bx ; смещение нашего обработчика MOV [bx], offset our_vx_code ; относительно сегмента 0000h MOV [bx+2],bx MOV DS, ax ; устанавливаем точку останова на исполнение MOV eax,302h ; линейный физический адрес точки останова MOV ebx,7С00h ; Заносим значения в отладочные регистры MOV dr7,eax mov dr0,ebx ----------------------------------------------------------------------------------------------------------------- Разрабатываем информационные системы на PHP методом визуального программирования Евгений Воякин ----------------------------------------------------------------------------------------------------------------- Кто, куда, зачем пришел, или анализируем логи веб-сервера? Денис Городецкий # rpm -qa | grep gd # Определяет журнал сервера LogFile /usr/local/etc/httpd/logs/access_log # Определяет месторасположение отчетов Webalizer OutputDir /usr/local/etc/httpd/usage # Имя хоста, который мониторится HostName www.example.com # Задает имя файла, в котором будет содержаться информация о посещении веб-сервера на протяжении одного года HistoryName HistoryName webalizer.hist # Возрастающая обработка позволяет использовать несколько относительно небольших файлов журналов вместо одного # огромного. Данная опция полезна для больших сайтов, период ротации журналов которых меньше, чем период # ротации обыкновенных веб-серверов. Incremental # Задает заголовок отчета. Русские заголовки поддерживаются (при условии настроенной локализации системы) ReportTitle # Определяет расширение для файлов-отчетов HTMLExtension # Позволяет использовать безопасное соединение HTTPS для просмотра статистики UseHTTPS # Директива PageType указывает расширения файлов, которые будут считаться веб-страницами. PageType htm* PageType cgi PageType phtml PageType php* PageType pl #GraphLegend #GraphLines #TopSites 30 #TopKSites 10 #TopURLs 30 #TopKURLs 10 #TopReferrers 30 #TopAgents 15 #TopCountries 30 #TopEntry 10 #TopExit 10 #TopSearch 20 #TopUsers 20 #IgnoreSite bad.site.net #IgnoreURL /test* #IgnoreReferrer file:/* #IgnoreAgent RealPlayer #IgnoreUser root Alias /usage/ "/home/httpd/usage/" Options None AllowOverride None Order deny,allow Deny from all Allow from 192.168.1.0/24 * 2 * * * /usr/local/bin/webalizer * 2 * * * /usr/local/bin/webalizer -c /etc/call-net.webalizer.conf * 2 * * * /usr/local/bin/webalizer -c /etc/webalizer.hotoffice.conf # Путь к файлу с логами LogFile="/usr/apache/logs/access_log" # Формат логов. Поддерживаются следующие типы: # 1 - combined log format # 2 - Old IIS log format # 3 - Webstar native log format. # 4 - common log format LogFormat=1 # Где хранить данные от анализатора DirData="/awstatsdatadir" # Размещение ваших CGI, сюда необходимо класть awstats.pl DirCgi="/cgi-bin" SiteDomain="www.domain.com" # Разрешать или нет обновлять статистику через браузер (Wbalizer такого не позволяет) AllowToUpdateStatsFromBrowser=1 Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/" Alias /awstatscss "/usr/local/awstats/wwwroot/css/" Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/" ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/" Options None AllowOverride None Order allow,deny Allow from all # ./awstats.pl -config=www.domain.com # ./awststs.pl -help LOGFILE /usr/local/apache/logs/access_log OUTFILE /usr/local/apache/htdocs/report.html HOSTNAME "myname" LANGFILE ru.lng LANGFILE /usr/etc/httpd/analog/lang/ru.lng