приятная новость

21 марта, 2011 · Posted in Без рубрики · Comment 

Решил обновить GD на сервере (freebsd 7.2). Заодно и nginx и много чего еще.

Приятной новостью оказалось, что в PHP 5.3.x php-fpm включен в порт и достаточно неплохо работает.

Нужно чаще читать рассылки )

SSH, ограничение домашним каталогом

4 сентября, 2010 · Posted in Без рубрики · Comment 

Проще говоря, ssh chroot.

Имеем сервер FreeBSD  7.2-RELEASE

Нужно дать ssh под один проект, но не хочется, чтоб там лишнее путалось под ногами, пусть ему будет доступна только его домашняя директория и Павлик Аштеэмэл. Поэтому копаем Гугль.

Из сотен похожих способов решения, находим один, который работает и отлично описан.

http://www.hilik.org.ua/chroot-ssh-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0/

Из дополнительных действий — это лишь копирование bash, который у меня в качестве шела юзеру.

На всякий случай, продублирую сам скрипт

#!/bin/sh
# В скрипт нужно передавать имя пользователя для которого создаем chroot окружение
if [ "$1" = "" ] ; then
  echo "    Usage: $0 [ username ]"
  exit
fi

USER=$1
GID=`cat /etc/master.passwd | grep "^$USER:" | cut -d ":" -f 4`
HOME=/home/$USER

# Задаем список бинарей, нужных для работы в chroot

BINS="
/bin/cat \
/bin/chmod \
/bin/cp \
/bin/csh \
/bin/date \
/bin/df \
/bin/echo \
/bin/expr \
/bin/ln \
/bin/ls \
/bin/mkdir \
/bin/mv \
/bin/ps \
/bin/pwd \
/bin/rm \
/bin/rmdir \
/bin/sh \
/usr/bin/awk \
/usr/bin/bzip2 \
/usr/bin/diff \
/usr/bin/du \
/usr/bin/ee \
/usr/bin/fetch \
/usr/bin/find \
/usr/bin/grep \
/usr/bin/gunzip \
/usr/bin/gzip \
/usr/bin/less \
/usr/bin/sed \
/usr/bin/sort \
/usr/bin/scp \
/usr/bin/ssh \
/usr/bin/tail \
/usr/bin/tar \
/usr/bin/touch \
/usr/bin/vi \
/usr/bin/uname \
/usr/bin/uptime \
/usr/local/bin/mc \
/usr/local/bin/mcedit \
/usr/local/bin/mcmfmt \
/usr/local/bin/unrar \
/usr/local/bin/unzip \

"

# Создаем структуру каталогов chroot окружения
mkdir $HOME/bin
mkdir $HOME/etc
mkdir $HOME/home
mkdir $HOME/home/$USER
mkdir $HOME/lib
mkdir $HOME/libexec
mkdir $HOME/tmp
mkdir $HOME/usr
mkdir $HOME/usr/bin
mkdir $HOME/usr/local
mkdir $HOME/usr/local/bin
mkdir $HOME/usr/local/etc
mkdir $HOME/usr/local/share

# Копируем бинарники в chroot окружение
for item in $BINS;
do
  cp $item $HOME$item
done

# Определяем какие библиотеки необходимо скопировать chroot
for item in $BINS;
do
  ldd $item |awk '{print $3}'|grep "."  >> /tmp/libs
done

# Копируем библиотеки
for item in `cat /tmp/libs|sort|uniq`;
do
  cp $item $HOME/lib/
done

# Копируем оставшиеся необходимые файлы и библиотеки
cp /etc/termcap $HOME/etc/termcap
cp /etc/resolv.conf $HOME/etc/resolv.conf
cp /etc/nsswitch.conf $HOME/etc/nsswitch.conf
cp -R /usr/local/share/mc $HOME/usr/local/share/mc
cp /libexec/ld-elf.so.1 $HOME/libexec/ld-elf.so.1

# Создадим /etc/motd для пользователя
echo "Welcome $USER" > $HOME/etc/motd

# Теперь /etc/profile для него же
echo 'export TERMCAP=/etc/termcap' > $HOME/etc/profile
echo 'export PS1="$ "' >> $HOME/etc/profile

# /etc/group тоже нужен свой
cat /etc/group | grep $GID > $HOME/etc/group

# Теперь внутри chroot создадим пользователя
cat /etc/master.passwd|grep "^$USER:" > $HOME/etc/master.passwd
pwd_mkdb -d $HOME/etc $HOME/etc/master.passwd

# Выставляем права
chown root:wheel  $HOME
chmod 755 $HOME
chmod 755 $HOME
chown -R $USER:$GID $HOME/bin
chown -R $USER:$GID $HOME/etc
chown -R $USER:$GID $HOME/home
chown -R $USER:$GID $HOME/lib
chown -R $USER:$GID $HOME/libexec
chown -R $USER:$GID $HOME/tmp
chown -R $USER:$GID $HOME/usr
chmod 777 $HOME/tmp

# Убираем за собой
rm /tmp/libs

Ну и часть конфига ssh для этого юзера:

Match User пользователь
ChrootDirectory /home/%u

Postfix

24 января, 2010 · Posted in Без рубрики · 5 комментариев 

Очередная статья из цикла «для себя».

Поскольку количество проектов на сервере все больше (хоть пока и не приносящих прибыли), настало время наладить работу почтовой системы.

Дано: FreeBSD 7.2-RELEASE.
Начитавшись гугля, выбрал Postfix+Dovecot+MySql+PostfixAdmin+RoundCube.

Рекомендаций море, много из них разных. Два дня мучений, настроек по разным мануалам ничего не дали. Авторизация по imap, pop проходила, а доставка почты не работала. Вывод достаточно прост: нельзя действовать прямо по мануалам, нужно включать мозг.

Дело нелегкое, почти забытое. Удаляю все конфиги, начинаю все с начала. Иду на сайт Dovecot`a и делаю согласно рекомендаций, учитывая реалии.

Настраиваем Dovecot:

собираем:
[X] KQUEUE kqueue(2) support
[X] SSL SSL support
[X] POP3 POP3 support
[X] MYSQL MySQL support

dovecot.conf


## Dovecot configuration file

# Base directory where to store runtime data.
base_dir = /var/run/dovecot/

# Protocols we want to be serving: imap imaps pop3 pop3s
# If you only want to use dovecot-auth, you can set this to "none".
protocols = imap  pop3

disable_plaintext_auth = no

# Log file to use for error messages, instead of sending them to syslog.
# /dev/stderr can be used to log into stderr.
log_path = /var/log/dovecot

# Log file to use for informational and debug messages.
# Default is the same as log_path.
info_log_path = /var/log/dovecot_inf

# Prefix for each line written to log file. % codes are in strftime(3)
# format.
log_timestamp = "%b %d %H:%M:%S "

# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = no

# SSL ciphers to use
#ssl_cipher_list = ALL:!LOW:!SSLv2

# Show protocol level SSL errors.
#verbose_ssl = no

##
## Login processes
##

# <doc/wiki/LoginProcess.txt>
rything in this directory is deleted when Dovecot is started.

#login_processes_count = 3

#login_max_connections = 256

# Greeting message for clients.
login_greeting = Dovecot ready.

# Login log format. %$ contains login_log_format_elements string, %s contains
# the data we want to log.
login_log_format = %$: %s

# There are a few special variables you can use, eg.:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if there's no domain
#   %h - home directory
#
# See <doc/wiki/Variables.txt> for full list. Some examples:
#  ==================mail location ========================
mail_location = maildir:/home/vmail/%d/%n

mail_privileged_group = mail

mail_debug = yes

mail_log_prefix = "%Us(%u): "

mail_log_max_lines_per_sec = 10

dotlock_use_excl = yes

verbose_proctitle = yes

first_valid_gid = 6
last_valid_gid = 65534

maildir_copy_with_hardlinks = yes

protocol imap {
#login_greeting_capability = yes

# Login executable location.
login_executable = /usr/local/libexec/dovecot/imap-login

#
mail_executable = /usr/local/libexec/dovecot/imap

mail_plugins = quota imap_quota trash
mail_plugin_dir = /usr/local/lib/dovecot/imap

imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}

##
## POP3 specific settings
##

protocol pop3 {

pop3_uidl_format = %08Xu%08Xv

pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

##
## LDA specific settings
##

protocol lda {
# Address to use when sending rejection mails.
postmaster_address = one.dreamw@gmail.com

# Hostname to use in various parts of sent mails, eg. in Message-Id.
# Default is the system's real hostname.
#hostname =

# Support for dynamically loadable plugins. mail_plugins is a space separated
# list of plugins to load.
#mail_plugins =
#mail_plugin_dir = /usr/local/lib/dovecot/lda

# If user is over quota, return with temporary failure instead of
# bouncing the mail.
#quota_full_tempfail = no

# Format to use for logging mail deliveries. You can use variables:
#  %$ - Delivery status message (e.g. "saved to INBOX")
#  %m - Message-ID
#  %s - Subject
#  %f - From address
deliver_log_format = msgid=%m: %$

# Binary to use for sending mails.
sendmail_path = /usr/sbin/sendmail

# Subject: header to use for rejection mails. You can use the same variables
# as for rejection_reason below.
rejection_subject = Rejected: %s

# Human readable error message for rejection mails. You can use variables:
#  %n = CRLF, %r = reason, %s = original subject, %t = recipient
rejection_reason = Your message to <%t> was automatically rejected:%n%r

# UNIX socket path to master authentication server to find users.
# auth_socket_path = /var/run/dovecot/auth-master
}

auth_executable = /usr/local/libexec/dovecot/dovecot-auth

auth_username_format = %Lu

auth_verbose = yes

auth_debug = yes

auth_debug_passwords = yes

auth default {
# Space separated list of wanted authentication mechanisms:
#   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
#   gss-spnego
# NOTE: See also disable_plaintext_auth setting.
mechanisms = plain login

passdb sql {
# Path for SQL configuration file.
# See /usr/local/share/examples/dovecot/dovecot-sql.conf
#args = /usr/local/etc/dovecot-sql.conf
args = /usr/local/etc/dovecot-sql.conf
}

userdb passwd {
args = blocking=no
}

# SQL database <doc/wiki/AuthDatabase.SQL.txt>
userdb sql {
# Path for SQL configuration file.
# See /usr/local/share/examples/dovecot/dovecot-sql.conf
args = /usr/local/etc/dovecot-sql.conf
}

user = nobody

socket listen {
master {
# Master socket provides access to userdb information. It's typically
# used to give Dovecot's local delivery agent access to userdb so it
# can find mailbox locations.
path = /var/run/dovecot/auth-master
mode = 0600
# Default user/group is the one who started dovecot-auth (root)
user = vmail
group = mail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix

}
}
}

dict {
#quota = mysql:/usr/local/etc/dovecot-dict-quota.conf
#expire = db:/var/db/dovecot/expire.db
}

plugin {

quota = maildir:User quota
quota_rule = *:storage=1GB
# 10% of 1GB = 100MB
quota_rule2 = Trash:storage=10%%
# 20% of 1GB = 200MB
quota_rule3 = Spam:storage=20%%

trash = /usr/local/etc/dovecot-trash.conf

expire = Trash 7 Spam 30

}
first_valid_uid = 101
last_valid_uid = 65534
#fisrt_valid_gid = 6
#last_valid_gid = 65534

Авторизация и доставка в Dovecot через MySql:

dovecot-sql.conf

<pre>driver = mysql
connect = host=localhost dbname=postfix user=postfix password=*********
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user, password FROM mailbox  WHERE username = '%u' AND domain = '%d'
user_query = SELECT maildir, 101 AS uid, 6 AS gid FROM mailbox WHERE username = '%u' AND domain = '%d'

#password_query = SELECT password FROM mailbox WHERE username = '%u'
#user_query = SELECT maildir, 65534 AS uid, 65534 AS gid FROM mailbox WHERE username = '%u'

ну и плагин Корзины:
dovecot-trash.conf

# Spam mailbox is emptied before Trash
1 Spam
# Trash mailbox is emptied before Sent
2 Trash
# If both Sent and "Sent Messages" mailboxes exist, the next oldest message
# to be deleted is looked up from both of the mailboxes.
3 Sent
3 Sent Messages

Настраиваем Postfix:

собираем:
[X] PCRE Perl Compatible Regular Expressions
[X] DOVECOT Dovecot SASL authentication method
[X] TLS Enable SSL and TLS support
[X] MYSQL MySQL maps (choose version with WITH_MYSQL_VER)
[X] TEST SMTP/LMTP test server and generator

master.cf

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628      inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       n       -       -       smtp
 -o smtp_fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
#maildrop  unix  -       n       n       -       -       pipe
#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# The Cyrus deliver program has changed incompatibly, multiple times.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/usr/local/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
#uucp      unix  -       n       n       -       -       pipe
#  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# ====================================================================
#
# Other external delivery methods.
#
#ifmail    unix  -       n       n       -       -       pipe
#  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
#
#bsmtp     unix  -       n       n       -       -       pipe
#  flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
#
#scalemail-backend unix -       n       n       -       2       pipe
#  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
#  ${nexthop} ${user} ${extension}
#
#mailman   unix  -       n       n       -       -       pipe
#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
#  ${nexthop} ${user}

dovecot   unix  -       n       n       -       -       pipe
 flags=DRhu user=vmail:mail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}

#  dovecot   unix  -       n       n       -       -       pipe
#    flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient}

main.cf


mailbox_size_limit = 102400000
message_size_limit = 10240000

queue_directory = /var/spool/postfix

command_directory = /usr/local/sbin

daemon_directory = /usr/local/libexec/postfix

data_directory = /var/db/postfix

mail_owner = postfix

myhostname = mail.pdahelp.info
myorigin = $mydomain

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
 mail.$mydomain, www.$mydomain, ftp.$mydomain

#
local_recipient_maps = unix:passwd.byname $alias_maps

unknown_local_recipient_reject_code = 550

mynetworks_style = host

mynetworks = 168.100.189.0/28, 127.0.0.0/8

relay_domains = $mydestination

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

home_mailbox = Maildir/

mail_spool_directory = /var/mail

mailbox_command = /usr/local/libexec/dovecot/deliver

mailbox_transport = dovecot

smtpd_banner = $myhostname ESMTP $mail_name

local_destination_concurrency_limit = 2

debug_peer_level = 2

debug_peer_list = 127.0.0.1

debugger_command =
 PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
 ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/local/sbin/sendmail

newaliases_path = /usr/local/bin/newaliases

mailq_path = /usr/local/bin/mailq

setgid_group = maildrop

html_directory = /usr/local/share/doc/postfix

manpage_directory = /usr/local/man

sample_directory = /usr/local/etc/postfix

readme_directory = /usr/local/share/doc/postfix

dovecot_destination_recipient_limit = 1
virtual_transport = dovecot
#virtual_mailbox_domains         = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_domains = другой_домен, другой_домен2
virtual_mailbox_base            = /var/vmail
virtual_mailbox_maps            = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps              = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid             = 101
virtual_uid_maps                = static:101
virtual_gid_maps                = static:12

smtpd_etrn_restrictions = permit_mynetworks, reject
smtpd_helo_required = yes

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

mysql_virtual_alias_maps.cf

user = postfix
password = *********
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address = '%s' AND active = '1'
mysql_virtual_mailbox_maps.cf
user = postfix
password = ***************
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username = '%s'

Настраиваем PostFixAdmin:

config.inc.php

<?php

$CONF['configured'] = true;

$CONF['setup_password'] = '***********:*************';

$CONF['postfix_admin_url'] = '';

$CONF['postfix_admin_path'] = dirname(__FILE__);

$CONF['default_language'] = 'en';

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '***************';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

$CONF['database_prefix'] = '';
$CONF['database_tables'] = array (
 'admin' => 'admin',
 'alias' => 'alias',
 'alias_domain' => 'alias_domain',
 'config' => 'config',
 'domain' => 'domain',
 'domain_admins' => 'domain_admins',
 'fetchmail' => 'fetchmail',
 'log' => 'log',
 'mailbox' => 'mailbox',
 'vacation' => 'vacation',
 'vacation_notification' => 'vacation_notification',
 'quota' => 'quota',
 'quota2' => 'quota2',
);

$CONF['admin_email'] = 'root@pdahelp.info';

$CONF['smtp_server'] = 'pdahelp.info';
$CONF['smtp_port'] = '25';

$CONF['encrypt'] = 'md5crypt';

$CONF['authlib_default_flavor'] = 'md5raw';

$CONF['dovecotpw'] = "/usr/sbin/dovecotpw";

$CONF['min_password_length'] = 5;

$CONF['generate_password'] = 'NO';

$CONF['show_password'] = 'NO';

$CONF['page_size'] = '10';

$CONF['default_aliases'] = array (
 'abuse' => 'abuse@pdahelp.info',
 'hostmaster' => 'hostmaster@pdahelp.info',
 'postmaster' => 'postmaster@pdahelp.info',
 'webmaster' => 'webmaster@pdahelp.info'
);

$CONF['domain_path'] = 'YES';

$CONF['domain_in_mailbox'] = 'NO';

$CONF['aliases'] = '10';
$CONF['mailboxes'] = '10';
$CONF['maxquota'] = '10';

$CONF['quota'] = 'YES';

$CONF['quota_multiplier'] = '1024000';

$CONF['transport'] = 'NO';

$CONF['transport_options'] = array (
 'virtual',  // for virtual accounts
 'local',    // for system accounts
 'relay'     // for backup mx
);

$CONF['transport_default'] = 'virtual';

$CONF['vacation'] = 'NO';

$CONF['vacation_domain'] = 'autoreply.change-this-to-your.domain.tld';

$CONF['vacation_control'] ='YES';

$CONF['vacation_control_admin'] = 'YES';

$CONF['alias_control'] = 'YES';

$CONF['alias_control_admin'] = 'YEs';

$CONF['special_alias_control'] = 'YES';

$CONF['alias_goto_limit'] = '0';

$CONF['alias_domain'] = 'YES';

$CONF['backup'] = 'YES';

$CONF['sendmail'] = 'YES';

$CONF['logging'] = 'YES';

$CONF['fetchmail'] = 'YES';

$CONF['fetchmail_extra_options'] = 'YES';

// Header
$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';

$CONF['user_footer_link'] = "http://change-this-to-your.domain.tld/main";

$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'pdahelp.info';
$CONF['footer_link'] = 'http://pdahelp.infp';

$CONF['welcome_text'] = <<<EOM
Hi,

Welcome to your new account.
EOM;

$CONF['emailcheck_resolve_domain']='NO';

//set to YES to enable this feature
$CONF['show_status']='YES';
//display a guide to what these colors mean
$CONF['show_status_key']='NO';

$CONF['show_status_text']='&nbsp;&nbsp;';

$CONF['show_undeliverable']='YES';
$CONF['show_undeliverable_color']='tomato';
// mails to these domains will never be flagged as undeliverable
$CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext","exchangeserver.domain.ext","gmail.com");
$CONF['show_popimap']='NO';
$CONF['show_popimap_color']='darkgrey';

$CONF['show_custom_domains']=array("pdahelp.info","andboson.net");
$CONF['show_custom_colors']=array("lightgreen","lightblue");

$CONF['recipient_delimiter'] = "";

$CONF['create_mailbox_subdirs_prefix']='INBOX.';

$CONF['used_quotas'] = 'YES';

$CONF['new_quota_table'] = 'NO';

$CONF['theme_logo'] = 'images/logo-default.png';
$CONF['theme_css'] = 'css/default.css';

$CONF['xmlrpc_enabled'] = false;

if (file_exists(dirname(__FILE__) . '/config.local.php')) {
 include(dirname(__FILE__) . '/config.local.php');
}

Настраиваем RoundeCube:

main.inc.php

<?php

$rcmail_config = array();

$rcmail_config['debug_level'] = 4;

$rcmail_config['log_driver'] = 'file';

$rcmail_config['syslog_id'] = 'roundcube';

$rcmail_config['syslog_facility'] = LOG_USER;

$rcmail_config['log_dir'] = 'logs/';

$rcmail_config['temp_dir'] = 'temp/';

$rcmail_config['enable_caching'] = FALSE;

$rcmail_config['message_cache_lifetime'] = '10d';

$rcmail_config['auto_create_user'] = TRUE;

$rcmail_config['default_host'] = 'pdahelp.info';

// TCP port used for IMAP connections
$rcmail_config['default_port'] = 143;

$rcmail_config['imap_auth_type'] = "check";

$rcmail_config['imap_root'] = null;
$rcmail_config['imap_delimiter'] = null;

$rcmail_config['username_domain'] = '';

$rcmail_config['mail_domain'] = '';

// Path to a virtuser table file to resolve user names and e-mail addresses
$rcmail_config['virtuser_file'] = '';

$rcmail_config['virtuser_query'] = '';

$rcmail_config['smtp_server'] = '';

$rcmail_config['smtp_port'] = 25;

$rcmail_config['smtp_user'] = '';

$rcmail_config['smtp_pass'] = '';

$rcmail_config['smtp_auth_type'] = '';

$rcmail_config['smtp_helo_host'] = 'pdahelp.info';

$rcmail_config['smtp_log'] = TRUE;

$rcmail_config['sendmail_delay'] = 0;

$rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size', 'flag', 'attachment');

$rcmail_config['skin_include_php'] = FALSE;

$rcmail_config['session_lifetime'] = 10;

$rcmail_config['ip_check'] = TRUE;

$rcmail_config['double_auth'] = false;

$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str';

$rcmail_config['language'] = null;

$rcmail_config['date_short'] = 'D H:i';

$rcmail_config['date_long'] = 'd.m.Y H:i';

$rcmail_config['date_today'] = 'H:i';

$rcmail_config['useragent'] = 'RoundCube Webmail/0.2.2';

$rcmail_config['product_name'] = 'RoundCube Webmail';

$rcmail_config['drafts_mbox'] = 'Drafts';

// store spam messages in this mailbox
$rcmail_config['junk_mbox'] = 'Junk';

$rcmail_config['sent_mbox'] = 'Sent';

$rcmail_config['trash_mbox'] = 'Trash';

$rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');

// automatically create the above listed default folders on login
$rcmail_config['create_default_folders'] = TRUE;

// protect the default folders from renames, deletes, and subscription changes
$rcmail_config['protect_default_folders'] = FALSE;

// if in your system 0 quota means no limit set this option to TRUE
$rcmail_config['quota_zero_as_unlimited'] = FALSE;

$rcmail_config['mdn_requests'] = 0;

// Use this charset as fallback for message decoding
$rcmail_config['default_charset'] = 'UTF-8';

$rcmail_config['enable_spellcheck'] = TRUE;

$rcmail_config['spellcheck_engine'] = 'googie';

$rcmail_config['spellcheck_uri'] = '';

$rcmail_config['spellcheck_languages'] = NULL;

$rcmail_config['generic_message_footer'] = '';

// add a received header to outgoing mails containing the creators IP and hostname
$rcmail_config['http_received_header'] = false;

$rcmail_config['mail_header_delimiter'] = NULL;

// session domain: .example.org
$rcmail_config['session_domain'] = '';

$rcmail_config['address_book_type'] = 'sql';

$rcmail_config['ldap_public'] = array();

$rcmail_config['autocomplete_addressbooks'] = array('sql');

// don't allow these settings to be overriden by the user
$rcmail_config['dont_override'] = array();

$rcmail_config['identities_level'] = 0;

$rcmail_config['include_host_config'] = false;

// don't let users set pagesize to more than this value if set
$rcmail_config['max_pagesize'] = 200;

// mime magic database
$rcmail_config['mime_magic'] = '/usr/share/misc/magic';

// default sort col
$rcmail_config['message_sort_col'] = 'date';

// default sort order
$rcmail_config['message_sort_order'] = 'DESC';

$rcmail_config['enable_installer'] = false;

// Log successful logins
$rcmail_config['log_logins'] = false;

$rcmail_config['delete_always'] = false;

$rcmail_config['min_keep_alive'] = 60;

/***** these settings can be overwritten by user's preferences *****/

// skin name: folder from skins/
$rcmail_config['skin'] = 'default';

// show up to X items in list view
$rcmail_config['pagesize'] = 40;

// use this timezone to display date/time
$rcmail_config['timezone'] = 'auto';

// is daylight saving On?
$rcmail_config['dst_active'] = (bool)date('I');

// prefer displaying HTML messages
$rcmail_config['prefer_html'] = TRUE;

$rcmail_config['show_images'] = 1;

// compose html formatted messages by default
$rcmail_config['htmleditor'] = TRUE;

// show pretty dates as standard
$rcmail_config['prettydate'] = TRUE;

$rcmail_config['draft_autosave'] = 300;

$rcmail_config['preview_pane'] = FALSE;

$rcmail_config['focus_on_new_message'] = true;

$rcmail_config['logout_purge'] = FALSE;

$rcmail_config['logout_expunge'] = FALSE;

$rcmail_config['inline_images'] = TRUE;

$rcmail_config['mime_param_folding'] = 0;

$rcmail_config['skip_deleted'] = FALSE;

$rcmail_config['read_when_deleted'] = TRUE;

$rcmail_config['flag_for_deletion'] = FALSE;

$rcmail_config['keep_alive'] = 60;

// If true all folders will be checked for recent messages
$rcmail_config['check_all_folders'] = FALSE;

// end of config file
?>

Вроде все. Все работает.
Просто нужно было осмысленно править конфиги.
 Ну ничего, для первого раза, без вопросов к "отцам" и т.п., 3 дня настройки почтового сервера - это нормально :)

Творческая пора.

5 октября, 2009 · Posted in Без рубрики · 2 комментария 

Так сложилось, что с осенью связаны большинство моих начинаний. Это практически все работы, сайты, ремонты в квартире, работы над собой и пр.  Такое время. Надоедает пинать балду и хочется творить.

Свершилось то, о чем так долго говорилось и думалось: сервер обрел более надежную мать и переехал на колокейшн к провайдеру. Под эту дудку, на Godaddy были куплены два домена и вживлены в этот сервер.

andboson.info — пока без работы. Пусть повисит. Пока думаю.

andboson.net — сделал сайт, на котором выкладываю те фото, которые понравились мне за долгие года листания интернета. По большей части, конечно, это «ню». Что может быть красивее женщины?

Официально: добро пожаловать на сайт «Избранное у других». Лучшие фото интернета. Не мои, но тщательно отобраны неграми мной на бескрайних плантациях кофе фотосайтов.

Че-то еще хотел написать…а, да: процесс ковыряния в консоли FreeBSD, аська и ну другие дела. Промазал окном, в результате:

pdahelp.info# я дома был :)
pdahelp.info# Слишком много ).

FreeBSD — суровая ось, ей лишние смайлы не к чему.

вокруг web

9 июля, 2009 · Posted in Без рубрики · Comment 

Переставил ОС на домашнем сервере. Теперь на нем полноценно живет FreeBSD 7.2 и раздает в мир свое содержимое.
К переносу сервера на колокейшн пока не готов ни морально, ни материально. Проплачен другой хостинг, да и в надежности аппаратной части сервера я не совсем уверен.

Настраивая сервер, решил поискать альтернативную веб-статистику, поскольку AWStats со своим анахронизмом чтения логов и слишком примитивным интерфейсом меня не устраивает.
Наткнулся на Piwik. Очень достойно.


Она позиционируется как опенсорсный аналог Google Analytics. Масса возможностей. Отмечу некоторые:

  • Простая установка
  • Удобный интерфейс
  • Настраиваемый уровень доступа
  • Настраиваемый интерфейс
  • Поддержка плагинов
  • Публикуемые виджеты
  • Простое добавление сайтов
  • Сбор статистики ведется с помощью javascript-вставки
  • Переключение режимов отображения (графики\чарты\таблицы)
  • Экспорт данных

и многое другое.

Системные требования:

  • PHP = >5.1.3
  • MySQL >= 4.1
  • Pdo extension
  • Pdo_Mysql extension

Установка, как и общий интерфейс, напоминает WordPress. Все так же легко и интуитивно.  Единственное, в чем возникло затруднение — это установка pdo_mysql extension, поскольку не знал, что его нужно ставить из /usr/ports/database/php5-pro_mysql .

Добавление сайта заключается в описаниии урла сайта, названия и добавлении кода трекинга на сайт.

Поглядеть, как работает это у меня можно тут:

http://pdahelp.info:81

логин: demo

пароль: demopiwik

UPD: пример виджета:

Сервер жив

25 марта, 2009 · Posted in Без рубрики · 2 комментария 

Коль жизнь показала мне гримасу безэлектрического ужаса, в дом, а точнее, к домашнему серверу, пришел ИБП. Хороший Smart UPS 620, 1999 года рождения.

Коммуникационные возможности его выражены соединением по com-порту. Поэтому пришлось выбирать, безопасность какой ос важнее: Хост Windows или гостевой freeBSD.
Поскольку ntfs достаточно неплохо чувствует себя при выключении, подключил ИБП к freebsd, которая крутится в VMWare. Помог мне NUT.
Не обошлось без определенных движений с бубном. Как оказалось, по умолчанию, в ИБП параметр ups.delay.shutdown был выставлен на 20 сек. Чего, конечно же, не хватает ОС для корректного завершения работы. Путем полевых испытаний, было достигнуто эмпирическое значение:
>upsc myups | grep delay
ups.delay.shutdown: 300
ups.delay.start: 000

Теперь система начинает завершать работу примерно на 50% заряда батарей.


Вы спросите меня, зачем мне все эти игры с Windows, VMWare и freeBSD? Почему не оставить одну ОС и настраивать все на ней?

Ответ прост: TVersity.
Если б не было этой замечательной программы, я бы оставил freeBSD и не мучался (или мучался только с ней). К сожалению, под *nix системы ее достойных аналогов я не нашел. Более-менее похож на нее MediaTomb, но, по удобству использования, ему очень далеко до TVersity.