Построение корпоративных VPN. Использование IPSec. Часть 2 Рашид Ачилов # Для работы IPSec в вашем ядре вы ОБЯЗАНЫ включить в него также device crypto options IPSEC # IP security (требует device crypto) options IPSEC_DEBUG # Отладка для IP security device gif # IPv6 и IPv4-туннели device crypto # Криптография # ifconfig gif create # ifconfig gif0 tunnel 212.20.5.1 170.70.70.1 # ifconfig gif0 inet 10.87.100.1 10.87.100.11 netmask 255.255.255.255 # ifconfig gif0 tunnel 170.70.70.1 212.20.5.1 # ifconfig gif0 inet 10.87.100.11 10.87.100.1 netmask 255.255.255.255 gif_interfaces="gif0" gifconfig_gif0="212.20.5.1 170.70.70.1" ifconfig_gif0="inet 10.87.100.1 10.87.100.11 netmask 255.255.255.255" # spdadd 10.87.1.0/24 10.87.11.0/24 any -P out ipsec esp/tunnel/212.20.5.1-170.70.70.1/require; # spdadd 10.87.11.0/24 10.87.1.0/24 any -P in ipsec esp/tunnel/170.70.70.1-212.20.5.1/require; # add 212.20.5.1 170.70.70.1 esp 0x10004 -m any -E 3des-cbc "Yopernyibabaiinyoperniisarai"; # add 170.70.70.1 212.20.5.1 esp 0x10003 -m any -E 3des-cbc "Yopernyibabaiinyoperniisarai"; # Путь для файлов, подключаемых по директиве include path include "/usr/local/etc/racoon"; # Файл должен содержать пары идентификатор/ключ для проведения предварительной аутентификации по ключу path pre_shared_key "/usr/local/etc/racoon/psk.txt"; # Здесь будут располагаться сертификаты path certificate "/etc/ssl"; # Здесь будут располагаться скрипты, вызываемые racoon path script "/usr/local/etc/racoon"; # Задание уровня отладочных сообщений log notify; # Задание параметров заполнителя пакетов padding { maximum_length 20; # Максимальная длина заполнителя randomize off; # Использовать случайное число для заполнения strict_check off; # Проверка по длине заполнителя exclusive_tail off; # Поместить число байтов заполнителя -1 в последний } # Если нет директивы listen, racoon будет слушать все адреса listen { isakmp 212.20.5.1 [500]; adminsock "/var/run/racoon.sock"; } # Установить различные таймеры timer { counter 5; # Число попыток при отправке interval 20 sec; # Интервал перед перепосылками persend 1; # Число пакетов, отправляемых за раз # Максимальное время, за которое должна завершиться каждая фаза phase1 30 sec; phase2 15 sec; } # Анонимное подключение. Адаптировано для динамических адресов – метод авторизации xauth_psk_server. # При установлении соединения выполняется скрипт 'pam_linkup.sh' через PAM, когда PAM-сервис racoon # выполняет секцию account (не auth!). При разрыве соединения выполняет скрипт 'linkdown.sh' remote anonymous { exchange_mode main,aggressive; doi ipsec_doi; situation identity_only; my_identifier fqdn "shelton.net"; nonce_size 16; lifetime time 24 hour; initial_contact on; proposal_check strict; generate_policy unique; ike_frag on; passive on; dpd_delay 20; script "linkdown.sh" phase1_down; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method xauth_psk_server; dh_group 1; lifetime time 7200 sec; } } # Подключение с фиксированным адресом. Метод авторизации pre_shared_key. # При установлении соединения выполняется скрипт 'linkup.sh'. # При разрыве соединения выполняется скрипт 'linkdown.sh' remote 170.70.70.1 inherit anonymous { exchange_mode main; my_identifier address 212.20.5.1; peers_identifier address 170.70.70.1; verify_identifier on; script "linkup.sh" phase1_up; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 1; lifetime time 7200 sec; } } # Настройки для режима mode_cfg mode_cfg { conf_source local; network4 10.87.100.96; netmask4 255.255.255.224; #10.87.100.96/27 pool_size 32; dns4 10.87.1.14; auth_source pam; accounting none; auth_throttle 10; pfs_group 1; } # SA info sainfo anonymous { pfs_group 1; lifetime time 3600 sec; encryption_algorithm 3des; authentication_algorithm hmac_md5; compression_algorithm deflate; } # Peer_address Initial_key test.shelton.net dlinkrulezzz ----------------------------------------------------------------------------------------------------------------- Универсальный сервер сетевой загрузки и установки Сергей Крутских default pe label xpinstall # Установка Windows XP kernel startrom.0 label win7 # Установка Windows 7 kernel sources/pxeboot.0 label pe # Запуск Live-CD WindowsPE pxe keep kernel pe.0 append initrd=winpe.wim ramdisk_size=262144 label suse112 # Установка openSuSe11.2 kernel suse/suse112x32/linux append initrd=suse/suse112x32/initrd ramdisk_size=65536 install=nfs://192.168.1.7/srv/tftpboot/suse/suse112x32/CD1/ # yast -i tftp syslinux convmv samba python cabextract # mkdir /srv/tftpboot rg \\ / rg A a …..... rg Z z tftp -s /srv/tftpboot -m /srv/tftpboot/rules # /etc/init.d/xinetd restart # convmv --lower -r --notest --replace /srv/ftpboot/* # mkdir /srv/tftpboot/pxelinux.cfg mount -o loop /home/iso/winxpsp3.iso /home/temp/xp cd /srv/tftpboot/ cabextract /home/temp/xp/I386/SETUPLDR.EX_ mv /home/temp/xp/I386/setupldr.exe ntldr cabextract /home/temp/xp/I386/STARTROM.N1_ mv /home/temp/xp/I386/startrom.n12 startrom.0 cp /home/temp/xp/I386/NTDETECT.COM ntdetect.com cp /home/temp/xp/BOOTFONT.BIN bootfont.bin mkdir /srv/tftpboot/winxp cp /home/temp/xp/* /srv/tftpboot/winxp/ convmv --lower -r --notest --replace * [reminstall] path = /srv/tftpboot/winxp/ public = yes browsable = yes read only = yes guest ok = yes [win7] path =/srv/tftpboot/win7 public = yes browsable = yes read only = yes guest ok = yes /etc/init.d/samba restart mkdir /srv/tftpboot/ris mkdir /srv/tftpboot/ris/drv mkdir /srv/tftpboot/ris/drv/sys vmhost:/srv/tftpboot/ris # python infparser.py drv/ cd /srv/tftpboot/ wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz tar -xvf ris-linux-0.4.tar.gz mv ris-linux-0.4 ris BASEPATH = /srv/tftpboot/winxp/ ./binlsrv.py -l binl.log ./binlsrv.py server_args = -s /srv/tftpboot -m /srv/tftpboot/rules -v OriSrc = "\\192.168.1.7\reminstall\i386" SetupSourceDevice = "\Device\LanmanRedirector\192.168.1.7\reminstall" ; Устанавливать драйверы без подписи DriverSigningPolicy=Ignore ; Для установки неподписанных драйверов UpdateInstalledDrivers=Yes ; Удалить все существующие разделы на диске и создать один раздел для установки и использования системой Repartition=Yes ; Путь поиска дополнительных драйверов во время установки Windows OemPnPDriversPath="windows\drv\chipset\intel;windows\drv\net\intel;windows\drv\net\marvell;windows\drv\net\realtek;windows\drv\video\intel;windows\drv\video\nvidia;windows\drv\video\ati;windows\drv\audio\realtek" copype.cmd x86 c:\windowspe-x86\ Dism /Mount-WIM /WimFile:c:\windowspe-x86\winpe.wim /Index:1 /MountDir:c:\windowspe-x86\mount Wpeinit # Окончательная инициализация системы ipconfig renew # Инициализируем сетевые интерфейсы call install_menu.cmd @ECHO OFF CD /D "%~dp0" SETLOCAL COLOR 1E wselect.exe install_menu.lst "Выбор системы для установки" /menu /cmdCenter /oemlist /fixedfont /fs=20 CALL :M%ERRORLEVEL% ENDLOCAL GOTO :EOF :M0 :M1 ::Тело скрипта при отказе ECHO Cancel EXIT :M2 :: Тело скрипта запуска X86 ECHO Выбрана система X86 NET USE Z: \\192.168.1.7\win7 IF EXIST Z:\SOURCES\setup.exe ( CD /D Z:\SOURCES setup.exe /unattend:Z:\autounattend.xml ) GOTO :EOF :M3 :: Тело скрипта запуска X64 ECHO Выбрана система X64 NET USE Z: \\192.168.1.7\win7x64 IF EXIST Z:\SOURCES\setup.exe ( CD /D Z:\SOURCES setup.exe /unattend:Z:\autounattendX64.xml ) GOTO :EOF Dism /image:c:\windowspe-x86\mount /Add-Driver /driver:c:\mydriver\video\myvideo.inf Dism /image:c:\windowspe-x86\mount /Add-Driver /driver:c:\mydriver\net\vboxdrv.inf Dism /Unmount-WIM /MountDir:c:\windowspe-x86\mount /Commit ----------------------------------------------------------------------------------------------------------------- Microsoft Exchange Server 2010 SP1. Экспорт и импорт почтовых ящиков Алексей Богомолов Add-MailboxPermission -Identity UserMailbox -User Admin -AccessRights FullAccess New-RoleGroup -Name "Import-Export Admins" -Roles "Mailbox Import Export" -Members Admin New-MailboxExportRequest –Mailbox User –ContentFilter {(All –like "dogovor") –or (All –like "test")} –FilePath \\server\pst\user-mail.ps New-MailboxExportRequest -Mailbox User1 -ContentFilter {(Sender –eq User2) -and (Received -lt "01/02/2010") -and (Received -gt '01/01/2010')} -FilePath "\\SERVER\PST\User1ToUser2.pst" Dir \\SERVER\PST-users\*.pst | %{ New-MailboxImportRequest -Name $_.BaseName -Mailbox $_.BaseName -FilePath $_.FullName -IsArchive} Search-Mailbox -Identity "User" -SearchQuery "Subject:'Virus message'" –DeleteContent Get-MailboxExportRequest -Status InProgress Get-MailboxExportRequest -Status Failed | Set-MailboxExportRequest -BadItemLimit 5 -BatchName BadItemLimitTo5 Get-MailboxExportRequestStatistics -Identity \ | fl Get-MailboxExportRequest | Remove-MailboxExportRequest ----------------------------------------------------------------------------------------------------------------- DirectAccess. Безопасный прозрачный доступ к корпоративной сети Сергей Яремчук > netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow > dnscmd /config /globalqueryblocklist wpad > netsh advfirewall consec add rule endpoint1= endpoint2= action=requestinrequestout profile=public,private auth1=computercert auth1ca= > netsh advfirewall firewall add rule name="remote desktop" profile=public,private program=system action=allow security=authenc protocol=tcp localport=3389 > netsh namespace show effectivepolicy > gpupdate > net stop iphlpsvc > net start iphlpsvc PS> engine.ps1 -mode [-data ] [-log ] ----------------------------------------------------------------------------------------------------------------- Атаки из сети Интернет. Настройка безопасного почтового сервера Юрий Денисов hostlist relay_from_hosts = localhost : 127.0.0.0/8 : X.X.X.X/Y accept authenticated = * host_lookup = * deny dnslists = {имя сервера хранящего черные списки} deny condition = ${if match{$sender_host_name}{adsl|dialup|pool|peer|dhcp}{yes}{no}} message = "Bad hostname (adsl,dhcp,dialup,etc...).Rejected" deny message = "HELO/EHLO required by RFC. Rejected" condition = ${if eq{$sender_helo_name}{}{yes}{no}} deny message = "Bad IP in your HELO. Rejected" condition = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}} hosts = !127.0.0.1 : !localhost : * deny message = "Your IP eq HELO. Rejected" condition = ${if eq{$sender_helo_name}{$sender_host_address}{true}{false}} deny message = "HELO contains only digits. Rejected" hosts = !127.0.0.1 : !localhost : * condition = ${if match{$sender_helo_name}{\N^\d+$\N} {yes}{no}} ----------------------------------------------------------------------------------------------------------------- На языке PowerShell. Сценарий регистрации пользователей в сети. Часть 2 Иван Коробко Листинг 1а. Чтение коллекции Environment с помощью .NET Framework $userName = [System.Environment]::username Листинг 1б. Чтение коллекции Environment с помощью командлетов PowerShell $userName = (dir env:username).value Листинг 2. Определение характеристик учетной записи пользователя # Определение имени пользователя $userName = [System.Environment]::UserName # Определение имени домена $domain = ([ADSI]"LDAP://RootDSE").defaultNamingContext # Создание объекта для поиска данных $obj = New-Object System.DirectoryServices.DirectorySearcher # Назначение точки входа $obj.SearchRoot = "LDAP://"+$domain # Фильтр для поиска $obj.Filter = "(&(objectClass=person)(sAMAccountName=$userName))" # Поиск объектов $result = $obj.FindOne() # Определение значений атрибутов $FIO = $result.properties.description # ФИО $Title = $result.properties.title # Должность $Department = $result.properties.department # Подразделение $Room = $result.properties.physicaldeliveryofficename # Комната $Tel = $result.properties.telephonenumber # Телефон Листинг 3. Получение свойств WMI-класса Get-WmiObject WIN32_BIOS | Out-GridView -Title "BIOS Info" @{Name = "НОВОЕ_НАЗВАНИЕ_СТОЛБЦА"; "Expression" = {$_.СТАРОЕ_НАЗВАНИЕ_СТОЛБЦА}} Листинг 4. Получение детальной информации указанного WMI-класса # Массив типов памяти $Type = "Unknown", "Other", "DRAM", "Synchronous DRAM", "Cache DRAM", "EDO", "EDRAM", "VRAM", "SRAM", "RAM", "ROM", "Flash", "EEPROM", "FEPROM", "EPROM", "CDRAM", "3DRAM", "SDRAM", "SGRAM", "RDRAM", "DDR", "DDR-2", "DDR-3" # Формирование информации о модулях памяти, вывод на экран $aobj = New-Object PSObject $aobj = Get-WmiObject WIN32_physicalMemory | Select-Object -property @{"Name"="Комплектующее"; "expression"={"Оперативная память"}}, @{"Name"="Объем памяти (Гб)"; "expression"={($_.Capacity)/1GB} }, @{"Name"="Тип памяти"; "expression"={$type[($_.Memorytype)]} }, @{"Name"="Разъем";"expression"={$_.BankLabel} } $aobj = Out-GridView -Title "Memory Info" Листинг 5. Чтение реестра $path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $result= Get-ChildItem (Set-Location $path ) # dir (cd $path) $Aobj=@() $fields_value = "DisplayName", "DisplayVersion", "InstallDate", "Language", "Publisher" $fields_names = "Имя", "Версия", "Дaта", "Язык", "Publisher" $result | Where-Object {$_.ValueCount –gt 5} | % { $PSObj = New-Object PSObject for($i=0; $i –lt $fields_names.count; $i++) { $val="–" $field = $fields_value[$i] $val = (Get-ItemProperty –Path $_.PSPath -Name $field).$field Switch ($fields_names[$i]) { {$_ –eq "Дaта"} {if ($val –ne $null) {$style=[Globalization.CultureInfo]::CreateSpecificCulture("ru-RU") $format="yyyyMMdd" $Grinvich=[DateTime]::ParseExact($val, $format, $style) $val=$Grinvich.ToString("dd MMMM yyyy")} } {$_ –eq "Язык"} { if ($val –eq 0) {$val=""} elseif ($val –eq 1033) {$val="ENG"} elseif ($val –eq 1049) {$val="RUS"} } } Add-Member –InputObject $psObj –MemberType NoteProperty –Name $fields_names[$i] –Value $val $val="" } # Перенос данных текущего пользователя в ассоциативный массив $Aobj +=$psObj } $aobj | Out-GridView –Title $regPath ConvertTo-XML [-InputObject] [-As ] [-Depth ] [-NoTypeInformation] [] $rez = $aobj2 | ConvertTo-Xml -As stream -NoTypeInformation Листинг 6. Формирование общего XML-файла # Преобразование данных PowerShell-объектов в XML-формат … $rez1 = $aobj1 | ConvertTo-Xml -As stream –NoTypeInformation … $rez2 = $aobj2 | ConvertTo-Xml -As stream –NoTypeInformation … $rez3 = $aobj2 | ConvertTo-Xml -As stream -NoTypeInformation … $aobjAll=@() # Объявление пустого динамического массива # Копирование элементов объекта в динамический массив # 1-й и 2-й элементы — заголовок файла и родительский тег for($i=0; $i -lt $rez1.count-1; $i++) {$aobjAll+=$rez1[$i]} for($i=2; $i -lt $rez2.count-1; $i++) {$aobjAll+=$rez2[$i]} # При перенесении последнего элемента количество увеличивается на один, # чтобы закрыть родительский тег XML-файла for($i=2; $i -lt $rez2.count; $i++) {$aobjAll+=$rez2[$i]} # Сохранение файла в формате XML $aobjall | Out-File c:\report.xml ConvertTo-Html [-Fragment] [[-Property] ] [-As ] [-InputObject ] [-PostContent ] [-PreContent ] [] Листинг 7. Формирование отчета в формате XML # Преобразование данных PowerShell объектов в XML-формат … $PSObj1 = New-Object PSObject Add-Member -InputObject $PSObj1 -MemberType NoteProperty -Name "…" –Value "…" … $rez1 = $PSObj1 | ConvertTo-Html -Fragment -As table -PreContent "

Сотрудник
" … … $rez2 = $PSObj2 | ConvertTo-Html -Fragment -As table -PreContent "

Программное обеспечение
" … … $rez3 = $PSObj3 | ConvertTo-Html -Fragment -As table -PreContent "

Комплектующие
" … … $aobjAll=@() # Объявление пустого динамического массива # Форматирование данных $aobjAll+=($rez1 -replace "","
") $aobjAll+=($rez2 -replace "
","
") $aobjAll+=($rez3 -replace "
","
") # Сохранение файла в формате HTML $aobjAll | Out-File c:\report.xml ----------------------------------------------------------------------------------------------------------------- На языке BASH. Особенности программирования Александр Майоров #!/bin/bash $ type bash find /path/ -name ‘*.php’ -exec grep -HinP ‘var_dump\s*\(’ {} \; for f in `find /path/with/php/files/ -name '*.php' -exec grep -PiL 'var_dump\s*\(' {} \;`;do cp $f $f.back; find /path/with/php/files/ -name '*.php' -exec grep -PiL 'var_dump\s*\(' {} \; | xargs -i cp {} {}.back a=data data="Text data" echo $a #Выведет data echo $data #Выведет Text data echo $$a echo ${!a} #Выведет Text data a[0]=123 a[1]=456 echo ${a[0]} # Выведет 123 echo ${a[1]} # Выведет 456 echo ${a[2]} # Выведет ничего echo ${a[*]} # Выведет 123 456 echo ${a[@]} # Выведет 123 456 declare -a array_name=(...) a=(foo bar 1 2 3) declare -axr a=(значения массива) a[1]=123 { cat file1.txt ; cat file2.txt; } > resultfile.txt cat file1.txt > resultfile.txt cat file2.txt >> resultfile.txt mkdir dir_1 mkdir dir_1/subdir_1 mkdir dir_1/subdir_2 mkdir -p dir_1/subdir_1 mkdir -p dir_{1,2,3}/subdir_{1,2,3}/ ls -l dir_{1,2,3} a="Global var" ( a="Local var" echo 'Variable $a='$a ) echo 'Variable $a='$a echo $((4+8*256)) for ((i=0; i<10; i++)) do echo $i done for ((i=1, n=20; i <= n ; i++, n--)) do echo -n "$i-$n " done n=100; (( i = n < 10 ? 20 : 30 )); echo $i (( i = 100 )) (( i = 1 ));(( ++i ));... eval "i=1;echo $i" for f in `ls`;do echo $f;done `cmd1 \`cmd2\`` $(cmd1 $(cmd2)) i=$((1+1*200)) n=$[1+1*200] let x=1+2*200 z=`expr 1 + 2 \* 200` echo Test $’\n\t’ tabed text. echo -e "Test \n\t tabed text" str="Test string!" echo ${#str} if [ -z "$1" ] then echo "Argument can’t be empty!" exit 1 fi echo $1 echo ${1:?"Argument can’t be empty!"} function mysql { /usr/local/bin/mysql -uoxfa -passwd } function fooname() { } function foo() {} function foo {} foo() {} function foo() { echo $1 } foo "Test arg" ----------------------------------------------------------------------------------------------------------------- Подсветка программного кода в веб-публикациях Кирилл Сухов
$foo="test";
function bar($one, $second=1){
phpinfo();
}
<div id="test1" >
Текст
</div >
<img src="logo.png"/>
SyntaxHighlighter.config.tagName = "div"; SyntaxHighlighter.config.strings.viewSource = "Посмотреть исходный код";
...
< class="brush: php; html-script: true">
", $var) ?>
tinyMCE.init({ // General options mode : "textareas", theme : "advanced", plugins : "safari,syntaxhl,pagebreak,style,...", // Theme options theme_advanced_buttons1 : "syntaxhl,|,italic,underline...", theme_advanced_buttons2 : "...", theme_advanced_buttons3 : "...", remove_linebreaks : false, extended_valid_elements : "textarea[cols|rows|disabled|name|readonly|class]", }); print ''; FCKConfig.Plugins.Add( 'syntaxhighlight2', 'en'); FCKConfig.ToolbarSets["Basic"] = [ ['SyntaxHighLight','-''Bold','Italic','-','OrderedList',...] ]; FCKConfig.SyntaxHighlight2LangDefault = 'xhtml'; ----------------------------------------------------------------------------------------------------------------- Дискреционное разграничение прав в Linux. Часть 2. Теоретические сведения Павел Закляков chmod [опции] режим[,режим]... файл ... chmod [опции] OCTAL-MODE файл ... chmod [опции] --reference=имя_файла_с_которого_копируются_права файл_которому_ставятся_права... [ugoa] [+–=] [rwxXstugo] chmod g+r file1 chmod u=rw file1 chmod g-s file chmod ug+s file chmod o+s file chmod --reference=/etc/passwd file1 $ info chmod $ uname -a $ id $ ls -l file* $ cat file1 $ cat file2 chmod -R a-x dir1 $ find /home/guest/dir1 -type f -exec chmod a-x {} \; % chmod 555 foo/ chown [опции]... OWNER[:[GROUP]] файл... chown [опции]... :GROUP файл... chown [опции]... --reference=имя_файла_с_которого_берутся_владелец_и_группа файл... chgrp [опции]... GROUP файл... chgrp [опции]... --reference=имя_файла_с_которого_берутся_владелец_и_группа файл... chown root program1 chown vasya:mail /var/spool/mail/vasya chgrp 12 /var/spool/mail/vasya chmod +s program1 chown root program1 chattr [-RV ] [ attribute... ] файл... +–=[acdeijstuADST] $ man chattr $ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.37.10.tar.bz2 lsattr [ -RVadv ] [ файл ]... echo "test">>file2 # useradd guest # passwd guest # gpasswd -a guest2 guest $ cat /etc/passwd $ cat /etc/passwd|grep "guest" $ ls -l /home $ lsattr /home $ mkdir dir1 $ chmod 000 dir1 $ ls -l $ echo "test">/home/guest/dir1/file1 $ls -l /home/guest/dir1 $ cat /etc/group $ newgrp guest $ chmod g+rwx /home/guest $ chmod 000 dir1 $ lsattr /home/guest/dir1/file1 $ chmod 600 file1 $ chattr +a /home/guest/dir1/file1 $ chattr +a /home/guest/dir1/file1 $ lsattr /home/guest/dir1/file1 $ echo "test">>/home/guest/dir1/file1 $ cat /home/guest/dir1/file1 $ echo "abcd">/home/guest/dir1/file1 $ chmod 000 file1 # chattr -a /home/guest/dir1/file1 -----------------------------------------------------------------------------------------------------------------