Создаём почтовый сервер. Полное руководство Андрей Шетухин cd /usr/ports/security/cyrus-sasl2 make install clean cd /usr/ports/mail/postfix make install clean sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" cd /usr/ports/mail/courier-imap/ make install clean postfix_enable="YES" courier_authdaemond_enable="YES" courier_imap_imapd_enable="YES" courier_imap_pop3d_enable="YES" courier_imap_pop3d_ssl_enable="YES" courier_imap_imapd_ssl_enable="YES" sgi_fam/1-2 stream rpc/tcp wait root /usr/local/bin/fam fam inetd_enable="YES" rpcbind_enable="YES" sgi_fam 391002 pw groupadd mailsystem -g 900 pw useradd mailsystem -u 900 -g 900 -d /nonexistent -s /usr/sbin/nologin id mailsystem uid=900(mailsystem) gid=900(mailsystem) groups=900(mailsystem) ps axw | grep postgres psql -U pgsql template1 CREATE USER billing NOCREATEDB NOCREATEUSER PASSWORD 'verysecret'; CREATE USER mailreader NOCREATEDB NOCREATEUSER PASSWORD 'topsecret'; CREATE DATABASE billing WITH OWNER billing; \c billing CREATE SCHEMA mail; ALTER SCHEMA mail OWNER TO billing; GRANT ALL ON SCHEMA mail TO billing; GRANT USAGE ON SCHEMA mail TO mailreader; CREATE TABLE mail.mailaliases ( alias character varying(255) NOT NULL, rcpt character varying(255) NOT NULL, descr text, CONSTRAINT mailaliases_alias_check CHECK ((length((alias)::text) > 0)), CONSTRAINT mailaliases_rcpt_check CHECK ((length((rcpt)::text) > 0)) ); CREATE TABLE mail.mailtransport ( maildomain character varying(255) NOT NULL, transport character varying(255) NOT NULL, descr text, CONSTRAINT mailtransport_maildomain_check CHECK ((length((maildomain)::text) > 0)), CONSTRAINT mailtransport_transport_check CHECK ((length((transport)::text) > 0)) ); CREATE TABLE mail.mailusers ( username character varying(255) NOT NULL, passwd character varying(255) NOT NULL, user_id integer DEFAULT -1 NOT NULL, group_id integer DEFAULT -1 NOT NULL, userquota integer DEFAULT 0 NOT NULL, maildir character varying(255) NOT NULL, expires bigint DEFAULT (- (1)::bigint) NOT NULL, enabled bigint DEFAULT (0)::bigint NOT NULL, descr text, CONSTRAINT mailusers_maildir_check CHECK ((length((maildir)::text) > 0)), CONSTRAINT mailusers_passwd_check CHECK ((length((passwd)::text) > 0)), CONSTRAINT mailusers_username_check CHECK ((length((username)::text) > 0)) ); ALTER TABLE mail.mailaliases OWNER TO billing; ALTER TABLE mail.mailtransport OWNER TO billing; ALTER TABLE mail.mailusers OWNER TO billing; GRANT SELECT ON TABLE mail.mailaliases TO mailreader; GRANT SELECT ON TABLE mail.mailtransport TO mailreader; GRANT SELECT ON TABLE mail.mailusers TO mailreader; authmodulelist="authpgsql" PGSQL_SERVER 127.0.0.1 PGSQL_USERNAME mailreader PGSQL_PASSWORD topsecret PGSQL_PORT 5432 PGSQL_DATABASE billing PGSQL_USER_TABLE mail.mailusers PGSQL_CLEAR_PWFIELD passwd PGSQL_UID_FIELD user_id PGSQL_GID_FIELD group_id PGSQL_LOGIN_FIELD username PGSQL_HOME_FIELD maildir PGSQL_MAILDIR_FIELD maildir PGSQL_WHERE_CLAUSE enabled=1 INSERT INTO mail.mailtransport (maildomain, transport, descr) VALUES ('example.com', 'virtual', 'virtual transport'); INSERT INTO mail.mailusers (username, passwd, user_id, group_id, userquota, maildir, expires, enabled, descr) VALUES ('test@example.com', 'mailpassword', '900', '900', '1024000', '/var/spool/mail/example.com/test/', '0', '1', ''); /usr/local/etc/rc.d/courier-authdaemond start /usr/local/etc/rc.d/courier-imap-pop3d start /usr/local/etc/rc.d/courier-imap-imapd start ps axw | grep courier sockstat -4 | grep couriertcp # Имя хоста myhostname = mail.example.com # Имя домена mydomain = example.com # Порядок поиска пользователей local_recipient_maps = unix:passwd.byname $virtual_mailbox_maps $virtual_mailbox_maps # Список сетей, с которых мы можем принимать почту # без аутентификации mynetworks = 127.0.0.0/8 # Ограничения на транзит почты (разрешаем локальным и аутентифицированным, запрещаем всем остальным) smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # Список доменов, которые обрабатываются системой mydestination = $myhostname, localhost.$mydomain, localhost, pgsql:/usr/local/etc/postfix/sql-mydestination.cf # Файлы конфигурации SQL virtual_mailbox_base = / virtual_mailbox_maps = pgsql:/usr/local/etc/postfix/sql-virtual-maps.cf virtual_maps = pgsql:/usr/local/etc/postfix/sql-virtual.cf virtual_minimum_uid = 500 virtual_uid_maps = pgsql:/usr/local/etc/postfix/sql-virtual-uid.cf virtual_gid_maps = pgsql:/usr/local/etc/postfix/sql-virtual-gid.cf transport_maps = pgsql:/usr/local/etc/postfix/sql-transport.cf # Квота virtual_mailbox_limit = 10240000 virtual_mailbox_limit_inbox = yes virtual_mailbox_limit_maps = pgsql:/usr/local/etc/postfix/sql-mailboxsize.cf virtual_mailbox_limit_override = yes virtual_maildir_extended = yes virtual_create_maildirsize = yes broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_auth_enable = yes pwcheck_method: auxprop auxprop_plugin: sql sql_engine: pgsql sql_user: mailreader sql_passwd: topsecret sql_hostnames: 127.0.0.1 sql_database: billing sql_select: select passwd from mail.mailusers where username = '%u@%r' sql_verbose: yes ----------------------------------------------------------------------------------------------------------------- Microsoft Exchange Server 2007. Переходим на кластер Сергей Лопутнев, Дмитрий Ильин C:\>sysocmgr.exe /i:c:\windows\inf\sysoc.inf C:\>net user ClusterAdmin pass@word1 /add /expires:never /passwordchg:no /domain C:\>cluster.exe /create /wizard C:\>net stop clussvc C:\>net start clussvc C:\>cluster s-exchange res "MNS" /create /group:"Cluster Group" /type:"Majority Node Set" C:\>cluster s-exchange res "MNS" /online C:\>cluster s-exchange /quorum:MNS C:\>cluster s-exchange res "Local Quorum" /offline C:\>cluster s-exchange res "Local Quorum" /delete C:\>cluster s-exchange /add:s-epsilon /password:pass@word1 /min C:\>mkdir "d:\FSW_MNS_exchange" C:\>net share "FSW-MNS-S-EXCHANGE"="d:\FSW_MNS_exchange" /GRANT:ClusterAdmin,Full C:\>cacls "d:\FSW_MNS_exchange" /G BUILTIN\Administrators:F ClusterAdmin:F C:\>cluster "s-exchange" res "MNS" /priv MNSFileShare="\\s-beta.howto.ru\FSW-MNS-S-EXCHANGE\" C:\>cluster s-exchange group "Cluster Group" /move C:\>cluster s-exchange res "MNS" /priv C:\>mkdir e:\MBD\ D:\>setup.com /mode:install /roles:mailbox /newcms /cmsname:c-exchange /cmsipaddress:192.168.10.10 /CMSDataPath:e:\MBD\ [PS] C:\>Stop-ClusteredMailboxServer c-exchange -StopReason "installing 1st node" -Confirm:$false [PS] C:\>Start-ClusteredMailboxServer c-exchange D:\>setup.com /roles:mailbox D:\>setup.com /roles:mailbox /targetdir:"E:\Microsoft\Exchange Server" [PS] C:\> TransportConfig -MaxDumpsterSizePerStorageGroup 12,5MB [PS] C:\>Get-StorageGroupCopyStatus [PS] C:\>Move-ClusteredMailboxServer c-exchange –TargetMachine:"S-EPSILON" -MoveComment:"test moving" -Confirm:$false C:\>cluster s-exchange group "C-EXCHANGE" /move [PS] C:\>Get-Mailbox | move-mailbox -TargetDatabase "S-BETA\First Storage Group\Mailbox Database" -Confirm:$false | FT DisplayName, MoveStage, StatusMessage [PS] C:\>Get-Mailbox | where {$_.Database -like "S-BETA\First Storage Group\Mailbox Database"} | move-mailbox -TargetDatabase "C-EXCHANGE\First Storage Group\Mailbox Database" -Confirm:$false | FT DisplayName, MoveStage, StatusMessage [PS] C:\>new-StorageGroup -Server "C-EXCHANGE" -Name "PFSG" -LogFolderPath "E:\MBD\PFSG" -SystemFolderPath "E:\MBD\PFSG" [PS] C:\>new-publicfolderdatabase -StorageGroup "PFSG" -Name "PFDB" -EdbFilePath "E:\MBD\PFSG\PFDB.edb" [PS] C:\>mount-database -Identity 'PFDB' [PS] E:\>Get-MailboxDatabase | where {$_.PublicFolderDatabase -like "S-BETA\Second Storage Group\Public Folder Database"} | Set-MailboxDatabase -PublicFolderDatabase "C-EXCHANGE\PFSG\PFDB" [PS] C:\>cd "C:\Program Files\Microsoft\Exchange Server\Scripts\" [PS] C:\Program Files\Microsoft\Exchange Server\Scripts>MoveAllReplicas.ps1 -Server S-BETA -NewServer C-EXCHANGE [PS] C:\>remove-PublicFolderDatabase "s-beta\second storage group\public folder database" D:\>setup.com /mode:uninstall /role:mailbox [PS] C:\>Get-ExchangeServer | FT Name, ServerRole ----------------------------------------------------------------------------------------------------------------- Единая прозрачная авторизация пользователей домена Active Directory на сервере Squid Александр Соколов C:\Program Files\Support Tools>ktpass -out gate.keytab -pass n0123pasaram! -princ host/gate.corporation.local@CORPORATION.LOCAL -mapuser ldapuser@CORPORATION.LOCAL –crypto DES-CBC-MD5 +DesOnly -ptype KRB5_NT_PRINCIPAL pass in log quick all pass out log quick all map pcn0 192.168.120.0/24 -> 192.168.100.12 portmap tcp/udp 40000:59999 map pcn0 192.168.120.0/24 -> 192.168.100.12 #routeadm –e ipv4-forwarding #routeadm -u # svcadm enable ipfilter # ipnat –Cf /etc/ipf/ipnat.conf 192.168.120.12 gate.corporation.local gate loghost domainname corporation.local nameserver 192.168.120.2 search corporation.local hosts dns files # svcadm enable svc:/network/dns/client:default # ping dc [libdefaults] default_realm = CORPORATION.LOCAL verify_ap_req_nofail=false clockskew=300 [realms] CORPORATION.LOCAL={ kdc=dc.corporation.local:88 admin_server=dc.corporation.local:749 kpasswd_protocol=SET_CHANGE } [domain_realm] .corporation.local=CORPORATION.LOCAL [logging] default=FILE:/var/krb5/krb.log kdc=FILE:/var/krb5/krb.log kdc_rotate={ period=1d version=10 } [appdefaults] kinit={ renewable=true forwardable=true } #kinit -p maria #klist other auth requisite pam_authtok_get.so.1 other auth required pam_dhkeys.so.1 other auth sufficient pam_unix_cred.so.1 other auth sufficient pam_ldap.so.1 use_first_pass debug other auth required pam_krb5.so.1 try_first_pass debug other auth sufficient pam_unix_auth.so.1 ldapclient manual -a credentialLevel=proxy -a authenticationMethod=simple -a proxyDN=cn=Agent,cn=Users,dc=example,dc=com -a proxyPassword=n0123pasaram! -a defaultSearchBase=dc=corporation,dc=local -a domainName= corporation.local -a "defaultServerList=192.168.120.2" -a attributeMap=group:userpassword=userPassword -a attributeMap=group:memberuid=memberUid -a attributeMap=group:gidnumber=gidNumber -a attributeMap=passwd:gecos=cn -a attributeMap=passwd:gidnumber=gidNumber -a attributeMap=passwd:uidnumber=uidNumber -a attributeMap=passwd:homedirectory=unixHomeDirectory -a attributeMap=passwd:loginshell=loginShell -a attributeMap=shadow:shadowflag=shadowFlag -a attributeMap=shadow:userpassword=userPassword -a objectClassMap=group:posixGroup=group -a objectClassMap=passwd:posixAccount=user -a objectClassMap=shadow:shadowAccount=user -a serviceSearchDescriptor=passwd:dc= corporation,dc=local?sub -a serviceSearchDescriptor=group:dc= corporation,dc=local?sub # svcadm restart svc:/network/dap/client:default # domainname # ldaplist passwd sanya hosts dns files # kinit -t /etc/krb5/krb5.keytab -k host/lda.corporation.local http_port 3128 visible_hostname localhost cache_effective_user webservd hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 64 MB cache_swap_low 90 cache_swap_high 95 maximum_object_size 8192 KB minimum_object_size 0 KB maximum_object_size_in_memory 256 KB ipcache_size 2048 ipcache_low 90 ipcache_high 95 fqdncache_size 4096 cache_replacement_policy lru memory_replacement_policy lru cache_dir ufs /var/squid/cache 5000 16 256 logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs % DomainNetBiosName = <Сокращенное имя домена> SiteName = <Имя сайта> ReplicaOrNewDomain = domain ForestLevel = <Функциональный уровень леса> DomainLevel = <Функциональный уровень домена> DatabasePath = <Локальный путь к базе данных> LogPath = <Локальный путь к файлу отчетов> RebootOnCompletion = Yes SYSVOLPath = <Локальный путь к папке System Volume> SafeModeAdminPassword = <Пароль для входа учетной записи с административными правами в случае сбоя работы домена> [DCINSTALL] InstallDNS = YES NewDomain = FOREST NewDomainDNSName = ISLAND.RU DomainNetBiosName = ISLAND SiteName = Default-First-Site-Name ReplicaOrNewDomain = DOMAIN ForestLevel = 3 DomainLevel = 3 DatabasePath = %systemroot%\NTDS LogPath = %systemroot%\NTDS RebootOnCompletion = YES SYSVOLPath = %systemroot%\SYSVOL SafeModeAdminPassword = NONE Dcpromo.exe /unattend:C:\island.txt ----------------------------------------------------------------------------------------------------------------- Управляем объектами в Active Directory Часть 3 Иван Коробко Листинг. Определение опций, установленных параметров userAccounControl Set objHash = CreateObject("Scripting.Dictionary") objHash.Add "SCRIPT",1 objHash.Add "ACCOUNTDISABLED",2 'objHash.Add "UNKNOWN",4 objHash.Add "HOMEDIR_REQUIRED",8 objHash.Add "LOCOUT",16 objHash.Add "PASSWD_NOTREQD",32 objHash.Add "PASSWD_CANT_CHANGE",64 objHash.Add "ENCRYPTED_TEXT_PWD_ALLOWED",128 objHash.Add "TEMP_DUBLICATE_ACCOUNT",256 objHash.Add "NORMAL_ACCOUNT",512 'objHash.Add "UNKNOWN",1024 objHash.Add "INTERDOMAIN_TRUST_ACCOUNT",2048 objHash.Add "WORKSTATION_TRUST_ACCOUNT",4096 objHash.Add "SERVER_TRUST_ACCOUNT", 8192 'objHash.Add "UNKNOWN", 16384 'objHash.Add "UNKNOWN", 32768 objHash.Add "DON’T_EXPIRE_PASSWORD", 65536 objHash.Add "MNS_LOGON_ACCOUNT", 131072 objHash.Add "SMARTCARD_REQUIRED", 262144 objHash.Add "TRUSTED_FOR_DELEGATION", 524288 objHash.Add "NOT_DELEGATED", 1048576 objHash.Add "USER_DES_KEY_ONLY", 2097152 objHash.Add "DON’T_REQ_PREAUTH", 4194304 objHash.Add "PASSWORD_EXPIRED", 8388608 objHash.Add "TRUSTED_TO_AUTH_FOR_DELEGATION", 16777216 Set objUser = GetObject("LDAP://" & Path) intUAC = objUser.Get("userAccountControl") t =" " For Each Key In objHash.Keys If objHash(Key) And intUAC Then t = t & Key & vbTab &"ВЫКЛ" & vbNewLine Else t = t & Key & vbTab &"ВКЛ" & vbNewLine End If Next Wscript.Echo t ----------------------------------------------------------------------------------------------------------------- Используем систему мониторинга сети OpenNMS Андрей Семенов org.opennms.core.utils.useJMTA=false org.opennms.core.utils.transport=smtps org.opennms.core.utils.mailHost=smtp.gmail.com org.opennms.core.utils.smtpport=465 org.opennms.core.utils.authenticate=true org.opennms.core.utils.authenticateUser=user@gmail.com org.opennms.core.utils.authenticatePassword=userpass org.opennms.core.utils.starttls.enable=true org.opennms.core.utils.smtpssl.enable=true org.opennms.core.utils.messageContentType=text/html org.opennms.core.utils.charset=windows-1251 1.2 10 Июнь 2008 г. 4:43:30 GMT localhost Admin javaEmail Filial1 auto javaEmail uei.opennms.org/nodes/nodeDown IPADDR IPLIKE 10.10.12.* Email-Filial1 All services are down on node %nodelabel%. Node %nodelabel% down. 111-%noticeid% .1.3.6.1.4.1.9.1. cisco-memory cisco-router cisco-temperature cisco-voltage cisco-router-interface mib2-interfaces adsl-line RRA:AVERAGE:0.5:1:263520 RRA:AVERAGE:0.5:60:8784 RRA:AVERAGE:0.5:1440:366 RRA:MAX:0.5:1440:366 RRA:MIN:0.5:1440:366 RRA:Cf:xff:steps:rows .... другие oid report.mib2.opstat.name=Interface Operational Status report.mib2.opstat.columns=ifOperStatus report.mib2.opstat.type=interfaceSnmp report.mib2.opstat.command=--title="Interface Operational Status" \ --lower-limit 0 --upper-limit 2 --rigid \ --vertical-label="Up(1)|Down (0)" \ --width 400 \ --height 100 \ DEF:opst={rrd1}:ifOperStatus:AVERAGE \ CDEF:copst=2,opst,- \ LINE2:copst#00ff00:"OperStatus" \ GPRINT:copst:AVERAGE:"Status (0 - down 1 - up) \\: %2.0lf %s" \ <%response.setCharacterEncoding("UTF-8");%> ----------------------------------------------------------------------------------------------------------------- Настраиваем firewall с if_bridge на базе FreeBSD 7.0 Владимир Ляшко device if_bridge if_bridge_load="YES" bridgestp_load="YES" #cd /usr/src/sys/i386/conf #mkdir /root/kernels #cp GENERIC /root/kernels/MOST #ln –s /root/kernels/MOST #cd /usr/src #make buildkernel KERNCONF=MOST #make installkernel KERNCONF=MOST #ee MOST ifconfig_nfe0="inet 192.168.1.179 netmask 255.255.255.0" ifconfig_rl0="up" cloned_interfaces="bridge0" ifconfig_bridge0="addm rl0 addm nfe0 up" #reboot # ifconfig # ifconfig #!/bin/sh # Объявляем переменные fwcmd="/sbin/ipfw" mylan="192.168.1.203, 192.168.1.201, 192.168.1.202, 192.168.1.200" macpc1=00:17:31:a9:e9:9b macpc2=00:0c:42:1c:09:bd macpc3=00:1d:92:3f:e0:f2 macpc4=00:e0:4c:50:31:2d macgate=00:0e:2e:a9:6f:9e # MAC-адрес сетевого интерфейса моста, которому мы присвоили IP-адрес ipbridge=00:50:da:4e:ba:63 # Сбрасываем все правила ${fwcmd} -f flush # Проверяем, соответствует ли пакет динамическим правилам ${fwcmd} add check-state # Разрешаем все установленные соединения ${fwcmd} add allow tcp from any to any established # Разрешаем работу протоколу ARP ${fwcmd} add allow all from any to any layer2 mac-type arp # Так как у нас есть возможность фильтровать пакеты на канальном уровне, воспользуемся этим # Разрешаем трафик только от наших машин к роутеру провайдера и обратно ${fwcmd} add allow all from any to any MAC $macpc1 $macgate ${fwcmd} add allow all from any to any MAC $macgate $macpc1 ${fwcmd} add allow all from any to any MAC $macpc2 $macgate ${fwcmd} add allow all from any to any MAC $macgate $macpc2 ${fwcmd} add allow all from any to any MAC $macpc3 $macgate ${fwcmd} add allow all from any to any MAC $macgate $macpc3 ${fwcmd} add allow all from any to any MAC $macpc4 $macgate ${fwcmd} add allow all from any to any MAC $macgate $macpc4 # Блокируем весь трафик на lo0 ${fwcmd} add deny all from any to 127.0.0.0/8 ${fwcmd} add deny all from 127.0.0.0/8 to any # Блокируем мультикастовые рассылки ${fwcmd} add deny all from any to 240.0.0.0/4 # Запрещаем фрагментированные пакеты icmp ${fwcmd} add deny log icmp from any to 255.255.255.255 # Запрещаем адреса, которые используются в протоколах автоконфигурации ${fwcmd} add deny ip from 169.254.0.0/16 to any # Разрешаем http-трафик ${fwcmd} add allow ip from $mylan to any 80 via bridge0 keep-state # Разрешаем DNS-трафик ${fwcmd} add allow ip from $mylan to any 53 via bridge0 keep-state # Разрешаем вход по ssh c хоста 192.168.1.200 нашей сети ${fwcmd} add allow ip from $mylan to me 22 keep-state ${fwcmd} add allow all from any to any MAC $macpc1 $ipbridge ${fwcmd} add allow all from any to any MAC $ipbridge $macpc1 # Разрешаем синхронизацию времени ${fwcmd} add allow udp from any to any 123 keep-state # Разрешаем ftp-трафик (активный режим) ${fwcmd} add allow tcp from $mylan to any 21 via bridge0 ${fwcmd} add allow tcp from any 20 to $mylan via bridge0 # Разрешаем icmp – эхо-запрос, эхо-ответ и время # жизни пакета истекло ${fwcmd} add allow icmp from any to any icmptypes 0,8,11 via bridge0 # Разрешаем работать с почтой ${fwcmd} add allow tcp from $mylan to any 110,143,25,995 keep-state # Разрешаем icq ${fwcmd} add allow ip from $mylan to any 5190 keep-state # Блокируем весь трафик не с наших МАС-адресов ${fwcmd} add deny all from any to any layer2 # Это правило добавится автоматически ${fwcmd} add deny all from any to any ----------------------------------------------------------------------------------------------------------------- Информационная база «1С:Предприятие 7.7». Взгляд изнутри Андрей Луконькин SELECT * FROM SC19 WHERE ISFOLDER = 0 AND ISMARK = 0 CLOSED таблицы _1SJOURN. SELECT TabJ.*, Tab1.* FROM DH14 As Tab1 INNER JOIN _1SJOURN As TabJ ON (Tab1.IDDOC = TabJ.IDDOC) WHERE TabJ.CLOSED&1 = 1 SELECT TabRegOst.SP20 As Товар, Sum(TabRegOst.SP21) As КвоКонОст FROM RG13 As TabRegOst WHERE TabRegOst.PERIOD = @PERIODR GROUP BY TabRegOst.SP20 ORDER BY TabRegOst.SP20 RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование |FROM | sc433 as Спр"; ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроку(); ----------------------------------------------------------------------------------------------------------------- Борьба с фишингом при помощи ClamAV Сергей Яремчук # Разрешаем проверку сообщений на основании сигнатур PhishingSignatures yes # Разрешение эвристического анализа URL PhishingScanURLs yes # Работа только с доменами, указанными в .pdb базе данных. # Сканирование всех доменов увеличивает количество ложных # позитивных срабатываний (то есть определение нормальных сообщений как фишинг) PhishingRestrictedScan yes # Всегда блокировать скрытые HTTPS в URL, даже если URL # не находится в базе данных. Его использование может # привести к увеличению ложных срабатываний PhishingAlwaysBlockSSLMismatch no # Всегда блокировать маскируемый URL PhishingAlwaysBlockCloak no $ clamscan --no-phishing-sigs --no-phishing-scan-urls –r /home/grinder/temp $ ls /var/lib/clamav/daily.inc/ H[Filter]:DisplayedHostname[:FuncLevelSpec] H:bankofamerica.com #define CHECK_SSL 1 #define CHECK_CLOAKING 2 #define CLEANUP_URL 4 #define CHECK_IMG_URL 8 #define CL_PHISH_ALL_CHECKS (CLEANUP_URL|CHECK_SSL|CHECK_CLOAKING|CHECK_IMG_URL) $ ls /var/lib/clamav/daily.inc/ R[Filter]:RealURL:DisplayedURL[:FuncLevelSpec] DisplayedURL X:RealURL:DisplayedURL[:FuncLevelSpec] M:RealHostname:DisplayedHostname[:FuncLevelSpec] MalwareName:TargetType:Offset:HexSignature[:MinEngineFunctionalityLevel:[Max]] $ sigtool --unpack=daily.cvd $ sigtool --md5 test.exe > test.hdb $ cat test.hdb $ clamscan -d test.hdb test.exe $ cat test.exe | sigtool --hex-dump > virus.sig $ cat virus.sig >> daily.db $ md5sum daily.db >> daily.info bank.ru ----------------------------------------------------------------------------------------------------------------- Организуем Cisco IPSec VPN с авторизацией по сертификатам на ключах eToken Роман Совалов, Константин Троицкий, Кирилл Случанко Router>enable Router#conf t Router(config)#hostname R1 R1(config)# R1(config)#ip name-server 192.168.200.1 R1(config)#crypto ca trustpoint RootCA R1(ca-trustpoint)#enrollment url http://192.168.200.1/certsrv/mscep/mscep.dll R1(ca-trustpoint)#enrollment mode ra R1(ca-trustpoint)#ip-address none R1(ca-trustpoint)#serial-number none R1(ca-trustpoint)#revocation-check crl R1(ca-trustpoint)#crl query ldap://192.168.200.1 R1(ca-trustpoint)#auto-enroll R1(ca-trustpoint)#usage ike R1(config)#crypto ca authenticate RootCA R1(config)#crypto ca enroll RootCA R1(config)#aaa new-model R1(config)#aaa authentication login UserAuthen local R1(config)#aaa authorization network GroupAuthor local R1(config)#aaa session-id common R1(config)#crypto isakmp policy 10 R1(config-isakmp)#group 2 R1(config)#crypto isakmp client configuration group VPNClients R1(config)#crypto isakmp client configuration address-pool local VPNpool R1(config)#crypto ipsec transform-set myset esp-des esp-sha-hmac R1(config)#crypto dynamic-map dynmap 10 R1(config-crypto-map)#set transform-set myset R1(config)#crypto map vpn client configuration address respond R1(config)#crypto map vpn 10 ipsec-isakmp dynamic dynmap R1(config)#ip local pool VPNpool 192.168.222.100 192.168.222.200 R1(config-if)#crypto map vpn R1(config)#ip route 0.0.0.0 0.0.0.0 f0/0 ----------------------------------------------------------------------------------------------------------------- «Дежурный» редактор SQL-запросов на Java Алексей Вторников import java.awt.*; import java.awt.event.*; import java.sql.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class SqlEditor extends JFrame { // Объект-соединение private Connection conn = null; // Модель таблицы и сама таблица результатов SQL-запроса private DataTableModel dtm = new DataTableModel (); private JTable table = new JTable (dtm); // Элементы интерфейса private JTextArea sqlArea = new JTextArea (8, 50); private JButton runButton = new JButton ("Выполнить"); public SqlEditor (Connection conn) { super ("Редактор SQL-запросов"); this.conn = conn; table.setAutoResizeMode (JTable.AUTO_RESIZE_OFF); table.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); // Сформировать и добавить панель пользовательского интерфейса getContentPane ().add (createGUI ()); // Обработчик событий мыши runButton.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { String sql = sqlArea.getText ().trim (); if (sql.length () != 0) { // Передать SQL-запрос (как строку) dtm.setQuery (sql); // Обработать SQL-запрос dtm.setData (conn); } } }); ... } // Сформировать интерфейс пользователя private JPanel createGUI () { JPanel topPane = new JPanel (new BorderLayout ()), botPane = new JPanel (new FlowLayout (FlowLayout.RIGHT)); // Области SQL-запросов (sqlPane) и таблицы результатов (tblPane) JScrollPane sqlPane = new JScrollPane (sqlArea), tblPane = new JScrollPane (table); // Разделительная (горизонтальная) панель JSplitPane splPane = new JSplitPane ( JSplitPane.VERTICAL_SPLIT, sqlPane, tblPane); setSize (new Dimension (500, 400)); ... tblPane.setBorder (BorderFactory.createEtchedBorder ()); // Каждой области – половину пространства splPane.setResizeWeight (0.50); botPane.add (runButton); topPane.add (splPane, BorderLayout.CENTER); topPane.add (botPane, BorderLayout.SOUTH); return (topPane); } } import java.sql.*; import java.util.*; public class DataTableModel extends AbstractTableModel { // Коллекции имен столбцов, их типов и данных private ArrayList colNames = new ArrayList (); private ArrayList colTypes = new ArrayList (); private ArrayList > data = new ArrayList > (); private String sql = ""; // SQL-запрос для выполнения public void setQuery (String sql) {this.sql = sql;} // Методы доступа к элементам модели таблицы public int getRowCount () {synchronized (data) {return data.size ();}} public int getColumnCount () {return colNames.size ();} public Class getColumnClass (int column) { return (Class)colTypes.get (column); } public String getColumnName (int column) { return (String)colNames.get (column); } public Object getValueAt (int row, int column) { synchronized (data) { return ((ArrayList)data.get (row)).get (column); } } // Запись данных (value) в строку (row) и столбец (column) public void setValueAt (Object value, int row, int column) { synchronized (data) { data.get (row).set (column, value); } } // Подготовка данных для отображения public void setData (Connection conn) { // Подготовка коллекций (см.выше) colNames.clear (); colTypes.clear (); data.clear (); try { // Подготовка и исполнение SQL-запроса Statement st = conn.createStatement (); if (st.execute (sql)) { // Результирующий набор исполнения SQL-запроса ResultSet rs = st.executeQuery (sql); // Метаданные результирующего набора ResultSetMetaData rsmd = rs.getMetaData (); // Количество столбцов int colCount = rsmd.getColumnCount (); for (int i = 0; i < colCount; i++) { // Имена столбцов colNames.add (rsmd.getColumnName (i + 1)); // Типы столбцов Class type = Class.forName (rsmd.getColumnClassName (i + 1)); colTypes.add (type); } fireTableStructureChanged (); // Перебор результирующего набора while (rs.next ()) { ArrayList row = new ArrayList (); for (int i = 0; i < colCount; i++) { // Определить тип столбца if (colTypes.get (i) == Boolean.class) {row.add (rs.getBoolean (i + 1)); continue;} if (colTypes.get (i) == Byte.class) {row.add (rs.getByte (i + 1)); continue;} if (colTypes.get (i) == java.util.Date.class) {row.add (rs.getDate (i + 1)); continue;} if (colTypes.get (i) == Double.class) {row.add (rs.getDouble (i + 1)); continue;} if (colTypes.get (i) == Float.class) {row.add (rs.getFloat (i + 1)); continue;} if (colTypes.get (i) == Integer.class) {row.add (rs.getInt (i + 1)); continue;} if (colTypes.get (i) == Long.class) {row.add (rs.getLong (i + 1)); continue;} if (colTypes.get (i) == Short.class) {row.add (rs.getShort (i + 1)); continue;} if (colTypes.get (i) == String.class) {row.add (rs.getString (i + 1)); continue;} row.add (rs.getObject (i + 1)); } synchronized (data) { data.add (row); fireTableRowsInserted (data.size () - 1, data.size () - 1); } } // Результирующий набор обработан; закрыть его if (rs != null) { try {rs.close ();} catch (SQLException sqle) {} finally {rs = null;} } } st.close (); } // Перехват и обработка исключений catch (ClassNotFoundException cnfe) { System.out.println ("Class.forName loading error"); } catch (SQLException sqle) { System.out.println ("SQLException: " + sqle.getMessage ()); System.out.println ("SQLState : " + sqle.getSQLState ()); System.out.println ("VendorError : " + sqle.getErrorCode ()); } } } ----------------------------------------------------------------------------------------------------------------- Система управления обучением Claroline Сергей Яремчук $ sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server $ tasksel --list-tasks | grep server $ tasksel --task-packages lamp-server $ sudo tasksel install lamp-server $ sudo echo "ServerName localhost" | sudo tee /etc/apache2/conf.d/fqdn $ cat /etc/php5/apache2/php.ini | grep ^safe_mode [mail function] sendmail_path = sendmail -t -i $ sudo a2enmod php5 $ cd /var/www $ tar xzvf claroline189.tar.gz $ cd claroline189/ $ sudo chmod ugo+w claroline189/ $ sudo cp -v /etc/apache2/sites-available/default /etc/apache2/sites-available/claroline $ sudo nano /etc/apache2/sites-available/claroline ServerAdmin webmaster@localhost DocumentRoot /var/www/claroline189/ Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all $ sudo a2dissite default && sudo a2ensite claroline $ sudo /etc/init.d/apache2 reload -----------------------------------------------------------------------------------------------------------------