Современный Linux-сервер: виртуализируем сетевые устройства Алексей Барабанов brctl addif # ifdown eth0 # ip link sh # ip link set dev eth0 name hweth0 # ip link sh # ip link set dev hweth0 up # ifconfig hweth0 # brctl addbr eth0 # brctl show # ip link set dev eth0 up # ip link sh # ip addr add 192.168.0.111/32 dev eth0 # ifconfig eth0 # ip route add 192.168.0.0/24 dev eth0 # ping -c 1 192.168.0.1 # brctl show # brctl addif eth0 hweth0 // здесь происходит автоматический перевод hweth0 // в режим прослушивания # ip link sh # brctl show # ping -c 1 192.168.0.1 server:~ # ping -c 1 192.168.0.111 # ip addr del 192.168.0.111/32 dev eth0 # ifconfig eth0 # brctl show # ifconfig eth0 # ifconfig eth0 server:~ # ifconfig eth1 server:~ # ping -c 1 192.168.254.1 server:~ # brctl show server:~ # ifconfig eth1 server:~ # ifconfig tap0 server:~ # ping -c 1 192.168.254.2 uml:~ # ifconfig eth0 server:~ # showmount -e server:~ # brctl show server:~ # ifconfuigeth0 uml:~ # ifconfig eth1 server:~ # ping -c 1 192.168.0.2 server:~ # arp -n server:~ # ip addr sh dev eth0 server:~ # ip addr del 192.168.0.9/24 dev eth0 server:~ # ip route sh server:~ # ping -c 1 192.168.0.2 ----------------------------------------------------------------------------------------------------------------- Как работает Sendmail? Полезные подробности Часть 2: Вопросы конфигурации Сергей Супрунов Kmailertable hash -o /etc/mail/mailertable Fw-o /etc/mail/local-host-names O DaemonPortOptions=Port=smtp,Addr=127.0.0.1,Name=MTA serg$ sendmail -bs R$* ! $+ $2 @ $1 R< $+ > $* $: < $(mailertable $1 $) > $2 lookup serg$ sendmail -bt serg$ sendmail -bt -d21.5 define(`LOCAL_MAILER_PATH', `/usr/local/bin/dspam')dnl define(`confCON_EXPENSIVE', `True') define(`SMTP_MAILER_FLAGS', `e') m4 /usr/share/sendmail/cf/m4/cf.m4 domain.ru.mc > domain.ru.cf ifdef(`OSTYPE', `dnl',`include(_CF_DIR_`'m4/cfhead.m4)dnl root: admin bin: root bind: root . . . пропущено . . . uucp: root abuse: root security: root ftp: root spam-me: "| dspam --user me --class=spam --source=error" # Блокируем конкретный IP-адрес 1.2.3.4 REJECT # Разрываем соединения из указанного домена spammers.dom 550 Closed for you. # Разрешаем транзит из локальной сети 192.168 RELAY # Разрешаем принимать на ящик abuse@domain.ru любую почту abuse@domain.ru OK C{Accept}OK RELAY mail.domain.ru define(`confCR_FILE', `/etc/mail/relay-domains') admin@domain1.ru admin-dom1 admin@domain2.ru admin-dom2 @domain1.ru error:nouser User not found define(`SMART_HOST', `1.2.3.4') inner1.domain.ru smtp:[inner1.domain.ru] inner2.domain.ru smtp:[inner2.domain.ru] FEATURE(mailertable, `hash -o /etc/mail/mailertable')dnl FEATURE(access_db, `hash -o -T /etc/mail/access')dnl root# make all install restart domain.ru client.domain.ru @client.domain.ru %1-client FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnl define(`confCW_FILE', `-o /etc/mail/local-host-names')dnl root# make all install restart serg$ vi test.m4 divert(0)dnl define(`header', `

$1

')dnl define(`footer', `
$1')dnl define(`company', `Наша компания')dnl serg$ vi test.in header(`Страница компании') company рада приветствовать Вас на своём сайте! footer(`Заходите снова!') serg$ m4 test.m4 test.in

Страница компании

Наша компания рада приветствовать Вас на своём сайте!
Заходите снова! domain IN MX 10 mail.domain.ru. IN MX 20 backup.top.ru. dom2 IN MX 10 mail.domain.ru. IN MX 20 backup.top.ru. ----------------------------------------------------------------------------------------------------------------- Переключи драйвер NTFS в режим read-write Антон Ананич emerge -av sys-fs/fuse modules-update modprobe fuse chmod 666 /dev/fusе echo "fuse" >> /etc/modules.autoload.d/kernel-2.6 Symbol: FUSE_FS [=m] Prompt: Filesystem in Userspace support Defined at fs/Kconfig:465 Location: -> File systems echo "sys-fs/captive ~x86" >> /etc/portage/package.keywords echo "sys-fs/captive -gtk" >> /etc/portage/package.use emerge -av captive alien captive-static-1.1.7-0.i386.rpm dpkg -i captive-static_1.1.7_1.i386.deb ./configure –enable-install-pkg=no make make install umount /dev/hda1 mount -t captive-ntfs /dev/hda1 /mnt/tmp/ -o -–rw /dev/hda1 /mnt/captive captive-ntfs noauto,--rw 0 0 # time cp /usr/portage/distfiles/captive-1.1.7.tar.gz /mnt/tmp/ # time tar -xzf captive-1.1.7.tar.gz -C /mnt/tmp ----------------------------------------------------------------------------------------------------------------- Централизованно меняем пароли локального системного администратора Иван Коробко Set objArgs=Wscript.Arguments If Wscript.Arguments.Count=1 Then If strcomp(ucase(objArgs(0)),UCase("-Domain"))=0 Then mode=1 End If If strcomp(ucase(objArgs(0)),UCase("-Group"))=0 Then mode=2 End If If strcomp(ucase(objArgs(0)),UCase("-PC"))=0 Then mode=3 End If Else mode=0 End If Select Case mode Case 0 txt="ТЕКСТ СПРАВКИ" WScript.Echo txt Case 1 … End Select ' Определение списка локальных пользователей ' на компьютере Set obj_user= getobject("WinNT://" & pcname) obj_user.filter = Array("user") For Each user in obj_user user_name= user_name +cstr(user.Name) Next ' Переименование русского (*)Администратор(*) ' в латинское If StrComp (UCase(user_name), UCase("Администратор"))=0 Then Set obj_user2= getobject("WinNT://" & pcname&"/Администратор,User") Set obj_user3= getobject("WinNT://" & pcname) Set q=obj_user3.movehere(obj_user2.adspath,"Administrator") Set obj_user2 = Nothing Set obj_user3 = Nothing End If Set obj_user4= getobject("WinNT://" & pcname&"/Administrator,User") Call obj_user4.setpassword(PWD) Set obj_user4 = Nothing Dim PWD PWD = "987654321" Select Case mode … Case 3 PWD=CStr(inputbox("Введите новый пароль локального администратора",,PWD)) PCNAME = "1230PC" PCNAME=CStr(inputbox("Введите имя рабочей станции",,PCNAME)) ' вызов функции изменения имен и назначения нового пароля make pcname End Select Dim PWD PWD = "987654321" Select Case mode … Case 2 pwd=CStr(inputbox("Введите новый пароль локального администратора",,PWD)) GROUPNAME = "PC$_group" GROUPNAME=CStr(inputbox("Введите имя группы, включая префикс",,GROUPNAME)) Set objSysInfo = CreateObject("ADSystemInfo") domain=cstr(objSysInfo.DomainShortName) Set obj_group= getobject("WinNT://" & domain &"/"&GROUPNAME) For Each pc in obj_group.members p=cstr(pc.name) pcname=Left(p,Len(p)-1) make pcname Next Set obj_group= Nothing … End Select Set objSysInfo = CreateObject("ADSystemInfo") domain=cstr(objSysInfo.DomainShortName) Case 1 … Set obj_comp = getobject("WinNT://" & domain) obj_comp.filter = Array("Computer") For Each Computer in obj_comp pcname=cstr(Computer.Name) make pcname Next Set obj_comp= Nothing … Set FSO=CreateObject("Scripting.FileSystemObject") Set MyFile1 = fso.CreateTextFile("c:\"+report+".htm", True, TRUE) MyFile1.WriteLine(data) MyFile1.Close Path=c:\report.htm set oIE=Wscript.CreateObject("InternetExplorer.Application") With oIE .Left=100 .Top=100 .Height=400 .Width=400 .MenuBar=0 .Toolbar=0 .Statusbar=0 .Resizable=1 End With oIE.Navigate Path oIE.Visible=1 ----------------------------------------------------------------------------------------------------------------- Создаём зоны DNS Рашид Ачилов $ORIGIN krokodil.ru $TTL 172800 $INCLUDE /etc/namedb/krokodil-ru-int.soa @ IN SOA krokodil.ru. hostmaster.krokodil.ru. ( 2005122001 ; Serial number 10800 ; Refresh every 3 hours 3600 ; Retry every hour 1728000 ; Expire every 20 days 172800 ) ; Minimum 2 days IN NS ns.krokodil.ru. IN NS ns4.nic.ru. tooth1 IN A 10.87.1.1 tooth2 IN A 10.87.1.2 tooth3 IN A 10.87.1.3 tooth4 IN A 10.87.1.4 tooth5 IN A 10.87.1.5 tooth6 IN A 10.87.1.6 ns IN A 10.87.1.1 name1 IN CNAME ns IN MX 10 ns ns IN A 10.87.1.254 name1 IN CNAME ns IN MX 10 name1 krokodil.ru. IN A 212.20.5.2 IN MX 10 krokodil.ru. IN MX 50 behemot.ru. www IN CNAME krokodil.ru. mail IN CNAME krokodil.ru. ftp IN CNAME krokodil.ru. $ORIGIN 1.87.10.in-addr.arpa 1 IN PTR tooth1.krokodil.ru. 2 IN PTR tooth2.krokodil.ru. 3 IN PTR tooth3.krokodil.ru. 4 IN PTR tooth4.krokodil.ru. 5 IN PTR tooth5.krokodil.ru. 6 IN PTR tooth6.krokodil.ru. $ORIGIN 5.20.212.in-addr.arpa 2 IN PTR krokodil.ru gate.krokodil.ru. IN A 212.20.5.1 krokodil.ru. IN A 212.20.5.2 1 IN PTR gate.krokodil.ru. 2 IN PTR krokodil.ru. $INCLUDE /etc/namedb/krokodil-ru-int.soa 1 IN PTR localhost. $INCLUDE /etc/namedb/krokodil-ru-ext.soa 1 IN PTR gate.krokodil.ru. 2 IN PTR krokodil.ru. $INCLUDE /etc/namedb/krokodil-ru-int.soa 1 IN PTR tooth1.krokodil.ru. 2 IN PTR tooth2.krokodil.ru. 3 IN PTR tooth3.krokodil.ru. 4 IN PTR tooth4.krokodil.ru. 5 IN PTR tooth5.krokodil.ru. 6 IN PTR tooth6.krokodil.ru. $INCLUDE /etc/namedb/krokodil-ru-int.soa krokodil.ru. IN A 10.87.1.254 IN MX 10 krokodil.ru. www IN CNAME krokodil.ru. mail IN CNAME krokodil.ru. proxy IN CNAME krokodil.ru. ftp IN CNAME krokodil.ru. ns IN CNAME krokodil.ru. localhost. IN A 127.0.0.1 tooth1 IN A 10.87.1.1 tooth2 IN A 10.87.1.2 tooth3 IN A 10.87.1.3 tooth4 IN A 10.87.1.4 tooth5 IN A 10.87.1.5 tooth6 IN A 10.87.1.6 $INCLUDE /etc/namedb/krokodil-ru-ext.soa krokodil.ru. IN A 212.20.5.2 IN MX 10 krokodil.ru. IN MX 50 behemot.ru. www IN CNAME krokodil.ru. mail IN CNAME krokodil.ru. ftp IN CNAME krokodil.ru. gate IN A 212.20.5.1 @ IN SOA krokodil.ru. hostmaster.krokodil.ru. ( 2006051202 ; Serial number 10800 ; Refresh every 3 hours 3600 ; Retry every hour 1728000 ; Expire every 20 days 172800 ); Minimum 2 days ; IN NS krokodil.ru. $TTL 172800 @ IN SOA korkodil.ru. hostmaster.krokodil.ru. ( 2005122001 ; Serial number 10800 ; Refresh every 3 hours 3600 ; Retry every hour 1728000 ; Expire every 20 days 172800 ); Minimum 2 days ; IN NS krokodil.ru. IN NS ns4.nic.ru. ----------------------------------------------------------------------------------------------------------------- Технология AJAX: как насчет безопасности? Сергей Яремчук xmlReq.onreadystatechange = { if ( xmlReq.readyState == 4 ) { eval ( xmlReq.responseText ); } } ----------------------------------------------------------------------------------------------------------------- Настраиваем безопасный роутер на базе FreeBSD Василий Озеров # cd /usr/src/sys/i386/conf/ # cp GENERIC new # cat >> new // Включаем поддержку firewall device pf device pflog device pfsync // Запрещает перезагрузку клавишами options SC_DISABLE_REBOOT // Включаем поддержку ALTQ для шейпинга пакетов options ALTQ # config new # cd ../compile/new && make cleandepend && make depend && make && make install # reboot // Включаем проброс пакетов через интерфейсы # sysctl net.inet.ip.forwarding=1 // Генерируем случайный идентификатор IP-пакетов # sysctl net.inet.ip.random_id // Ограничиваем количество ICMP-ответов # sysctl net.inet.icmp.icmplim=10 // Отключаем реагирование на попытку обратиться к закрытым портам # sysctl net.inet.tcp.blackhole=2 # sysctl net.inet.udp.blackhole=1 // Запрещаем пользователям смотреть чужие процессы # sysctl security.bsd.see_other_gids=0 # sysctl security.bsd.see_other_uids=0 :passwd_format=md5:\ :passwd_format=blf:\ # cap_mkdb /etc/login.conf crypt_default=md5 crypt_default=blf shell: /sbin/nologin # chmod 0600 /etc/login.conf /etc/syslog.conf /etc/newsyslog.conf /etc/rc.conf /etc/hosts.allow # chmod 0700 /root/ *default host=cvsup5.ru.FreeBSD.org *default base=/usr *default prefix=/usr *default release=cvs tag=RELENG_6_0 *default delete use-rel-suffix *default compress src-base src-bin src-contrib src-etc src-gnu src-include src-kerberos5 src-kerberosIV src-lib src-libexec src-release src-sbin src-share src-sys src-tools src-usrbin src-usrsbin src-crypto src-secure src-sys-crypto # cvsup -g -L 2 /usr/local/etc/supfile # portsnap fetch # portsnap extract # portsnap update # portsnap fetch # portsnap update prov_if="sk0" int_if="rl0" internal_net="172.16.0.0/24" me="172.16.0.1" LAN_to_INT="{ftp,ftp-data,www,https,ssh,smtp,pop3,nntp,8080,ntp,411,5190}" scrub in all # Транслируем все пакеты к smtp-серверам nat on $prov_if from $internal_net to any port 25 -> $prov_if # Транслируем все пакеты к pop-серверам nat on $prov_if from $internal_net to any port 110 -> $prov_if # Настраиваем перенаправление всех пакетов, идущих к www-серверу в DMZ rdr on $prov_if proto tcp from any to $prov_if port www -> 172.16.1.3 port www # Включаем прозрачное проксирование rdr on $int_if proto tcp from $internal_net to any port 80 -> 172.16.0.1 port 3128 # in packs on prov_if # Блокируем все входящие соединения block in on $prov_if from any to any # Разрешаем пинги pass in on $prov_if inet proto icmp from any to $prov_if icmp-type 8 keep state # Разрешаем соединяться с ssh-сервером pass in on $prov_if inet proto tcp from any to $prov_if port 22 keep state # Доступ к WWW pass in on $prov_if inet proto tcp from any to $prov_if port www keep state # Разрешаем соединяться с нашим почтовым сервером pass in on $prov_if inet proto tcp from any to $prov_if port 25 keep state # out packs on prov_if # Блокируем все входящие соединения block out on $prov_if from $prov_if to any # Разрешаем пинги от нас pass out on $prov_if inet proto icmp from $prov_if to any icmp-type 8 keep state # Разрешаем обращаться на Web pass out on $prov_if inet proto tcp from $prov_if to any port www keep state # На ftp pass out on $prov_if inet proto tcp from $prov_if to any port ftp keep state # На ssh pass out on $prov_if inet proto tcp from $prov_if to any port ssh keep state # Разрешаем запросы к DNS pass out on $prov_if inet proto udp from $prov_if to any port 53 keep state # in packs on int_if # Блокируем все входящие соединения block in on $int_if from $internal_net to $me pass in on $int_if inet proto tcp from $internal_net to $me port 22 keep state # Разрешаем локальной сети обращаться к нашему DNS-серверу pass in on $int_if inet proto udp from $internal_net to $me port 53 keep state # out packs on $int_if # Запрещаем все исходящие от нас соединения в локальную сеть block out on $int_if from $me to $internal_net keep state # Разрешаем пинги от нас pass out on $int_if inet proto icmp from $me to $internal_net icmp-type 8 keep state # sshd_config_1 (Локальная сеть): Port 22 Protocol 2 ListenAddress 172.16.0.1 PermitRootLogin no PasswordAuthentication yes MaxStartups 2:90:5 AllowGroups ssh Banner /etc/motd Subsystem sftp /usr/libexec/sftp-server # sshd_config_2 (Интернет): AllowGroups ssh Banner /etc/motd ListenAddress 213.251.193.69 LogLevel VERBOSE MaxStartups 2:90:5 PasswordAuthentication no PermitRootLogin no Port 22 Protocol 2 Subsystem sftp /usr/libexec/sftp-server SyslogFacility AUTH ********************************************************* This is a private system!!! All connection attempts are logged and monitored. All unauthorized connection attempts will be investigated and handed over to the proper authorities. ********************************************************* $ ssh-keygen -t rsa -b 4096 $ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys # cd /usr/ports/security/portaudit # make install clean # /usr/local/sbin/portaudit -Fda # cd /usr/ports/security/tripwire # make install clean # twadmin --create-polfile twpol.txt # tripwire --init # tripwire --check # cd /usr/ports/security/chkrootkit/ # make install clean # chkrootkit | mail root ----------------------------------------------------------------------------------------------------------------- Пишем систему динамической защиты ресурсов сети Андрей Бирюков Листинг 1. Сценарий, блокирующий атаки на ssh #!/usr/bin/perl -w use Sys::Syslog; # модуль для работы с syslog $max=10; # максимально разрешенное число попыток # файл журнала, с которым мы и работаем $watchfile= '/var/log/messages'; # путь к iptables (для разных дистрибутивов Linux он может различаться) $iptables= '/sbin/iptables'; # тоже iptables, но после сохранения изменений $iptables_save= '/sbin/iptables-save'; # исходные значения iptables $iptables_restore= '/sbin/iptables-restore'; # файл конфигураций iptables $cfgfile= '/etc/sysconfig/iptables'; open(LFILE, "<$watchfile"); # открываем лог на чтение %tries=(); # количество попыток для IP %blocked=(); # уже заблокированных IP # восстанавливаем конфигурацию, это нужно для того, чтобы «устаревшие» IP-адреса не оставались запрещенными `$iptables_restore < $cfgfile`; # получаем уже заблокированные IP-адреса из iptables open(IPTPIPE, "$iptables -L -v -n|"); $blockChain=0; while (){ $blockChain=1 if (/^Chain block \(\d+ references\)$/); next unless $blockChain; last if (/^$/ ); $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/); } close IPTPIPE; # преобразуем в строку $blk_ips=join(", ",keys(%blocked)); # отправляем сообщение syslog syslog('warning',"sshwatch.pl started. currently blocked ip's are: $blk_ips"); # просматриваем /var/log/messages while (1) { for ($curpos = tell(LFILE); $_ = ; $curpos = tell(LFILE)) { # искомая строка if (/sshd\[\d+\]: Failed password for .+ from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; next if defined($blocked{$ip}); $tries{$ip}+=1; #увеличиваем счетчик if ($tries{$ip} eq $max){ # если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы `$iptables -I block -s $ip -j DROP ; $iptables_save > $cfgfile`; $blocked{$ip}=1; # снова сообщение syslog syslog('warning', "IP $ip has been blocked !"); } } } sleep 1; seek(LFILE, $curpos, 0); } ipfw add deny ip from 172.29.1.19 to 172.29.1.1 Листинг 2. Сценарий, блокирующий атаки на POP3 #!/usr/bin/perl -w use Mail::Sendmail; # максимально разрешенное число попыток $max=10; # файл журнала, с которым мы и работаем $watchfile= '/var/log/messages'; $ipfw= '/sbin/ipfw'; # то же ipfw но после сохранения изменений $ipfw_save= '/sbin/ipfw_save'; # исходные значения ipfw $ipfw_restore= '/sbin/ipfw-restore'; # файл конфигураций ipfw $cfgfile= '/etc/sysconfig/ipfw' # открываем лог на чтение open(LFILE, "<$watchfile"); # количество попыток для IP %tries=(); # уже заблокированных IP %blocked=(); # восстанавливаем конфигурацию, это нужно для того, чтобы «устаревшие» IP-адреса не оставались запрещенными `$ipfw_restore < $cfgfile`; `$ipfw list > out`; # получаем уже заблокированные IP-адреса из iptables open(IPTPIPE, "out"); $blockChain=0; while (){ $blockChain=1 if (/^Chain block \(\d+ references\)$/); next unless $blockChain; last if (/^$/ ); $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/); } close IPTPIPE; # просматриваем /var/log/messages while (1) { for ($curpos = tell(LFILE); $_ = ; $curpos = tell(LFILE)) { # искомая строка if (/qpopper\[\d+\]: Failed attempted login to .+ from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; next if defined($blocked{$ip}); $tries{$ip}+=1; #увеличиваем счетчик if ($tries{$ip} eq $max){ # если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы `$ipfw deny $ip; $ipfw_save > $cfgfile`; $blocked{$ip}=1; # отправляем письмо %mail = ( To => 'admin@test.local', From => 'firewall@test.local', Message => "IP $ip has been blocked !", SMTP => 'smtp.mail.ru' ); sendmail(%mail) or die $Mail::Sendmail::error; } } } sleep 1; seek(LFILE, $curpos, 0); } ipfw add deny ip from 172.29.1.19 to 172.29.1.1 pixfirewall# configure terminal pixfirewall(config)# no access-list 110 pixfirewall(config)# access-list 110 deny ip host 2.2.2.2 host 1.1.1.254 pixfirewall(config)# access-list 110 permit ip 172.16.0.0 0.0.255.255 1.1.1.0 0.0.0.255 … pixfirewall(config)# end pixfirewall# write mem pixfirewall# logout use Net::Telnet (); use Mail::Sendmail; #!/usr/bin/perl -w use Mail::Sendmail; # максимально разрешенное число попыток $max=10; # файл журнала, с которым мы и работаем $watchfile= '/var/log/messages'; # открываем лог на чтение open(LFILE, "<$watchfile"); # количество попыток для IP %tries=(); # уже заблокированных IP %blocked=(); # получаем доступ к консоли $t = new Net::Telnet ; $hostname="1.1.1.254"; $t->open($hostname); $t->waitfor('/login:.*$/') or die "bad login: ", $t->lastline; $t->print("user"); $t->waitfor('/Password:.*$/') or die "bad password: ", $t->lastline; $t->print("password"); $t->waitfor('/pixfirewall>:.*$/') or die "No user mode: ", $t->lastline; $t->print("enable"); $t->waitfor('/login:.*$/') or die "bad login: ", $t->lastline; $t->print("user"); $t->waitfor('/Password:.*$/') or die "bad password: ", $t->lastline; $t->print("password"); $t->waitfor('/pixfirewall#:.*$/') or die "No router privilege mode: ", $t->lastline; $t->print("configure terminal"); $t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", $t->lastline; $t->print("no access list 110"); # просматриваем /var/log/messages while (1) { for ($curpos = tell(LFILE); $_ = ; $curpos = tell(LFILE)) { # искомая строка if (/sshd\[\d+\]: Failed password for .+ from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; next if defined($blocked{$ip}); $tries{$ip}+=1; # увеличиваем счетчик if ($tries{$ip} eq $max){ # если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы $blocked{$ip}=1; # добавляем в список доступа запись о запрете # доступа с IP $t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", $t->lastline; $t->print("access list 110 deny ip host $ip host 1.1.1.254"); # отправляем письмо %mail = ( To => 'admin@test.local', From => 'firewall@test.local', Message => "IP $ip has been blocked !", SMTP => 'smtp.mail.ru' ); sendmail(%mail) or die $Mail::Sendmail::error; } } } sleep 1; seek(LFILE, $curpos, 0); } $t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", $t->lastline; $t->print("access list 110 permit …."); … # здесь добавляем другие записи в список доступа $t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", $t->lastline; $t->print("end"); $t->waitfor('/# pixfirewall#:.*$/') or die "No router configure mode: ", $t->lastline; $t->print("write mem"); $t->waitfor('/# pixfirewall#:.*$/') or die "No router configure mode: ", $t->lastline; $t->print("logout"); $result=$t->getline; @hourly /tmp/pop3watch.pl ----------------------------------------------------------------------------------------------------------------- Техника снятия дампа с защищенных приложений Крис Касперски Листинг 1. Определение дислокации модуля в памяти. Здесь «test_dump» – имя процесса, с которого мы собираемся снять дамп (soft-ice отображает его в правом нижнем углу) # определяем базовый адрес загрузки модуля в память :MOD test_dump # смотрим на карту модуля в памяти :MAP32 test_dump Листинг 2. Дамп памяти, снятый через history :db 400000 L 7DE8 Листинг 3. Дамп памяти, снятый командой !DUMP плагина IceExt :!DUMP :!DUMP C:\dumped 400000 7DE8 ----------------------------------------------------------------------------------------------------------------- bugtraq, стр. 73 act=mod&auth_key=2b71da21cbacba35ccf6fc04fe807d9a&st=0&selectedpids=-1) UNION SELECT 1,3/*&tact=delete ----------------------------------------------------------------------------------------------------------------- Дистрибутив Edubuntu: специально для школ Сергей Яремчук Option "XkbLayout" "us,ru(winkeys)" -----------------------------------------------------------------------------------------------------------------