Разбиение диска:
/ 2gb
swap 32gb
/var 64gb
/tmp 2gb
/usr 128gb
/c остальное
Интерфейсы:
re0 192.168.0.170/24
192.168.0.171/24 (alias, так как раньше было 2 разных сервера, а перенастраивать всех клиентов неохота)
fxp0 хх.хх.хх.хх/30
Имена:
fqdndomain.tld внешний, FQDN
server.localdomain.local внутренний, Active Directory
Подготовка
Пересоберем ядро с нужными опциями:
# cd /sys/i386/conf
# cp GENERIC MYDOMAIN
# ee MYDOMAIN
ident MYDOMAIN
options IPFIREWALL
options IPDIVERT
options VESA # возможность работать в графических и VESA режимах
options VGA_WIDTH90
options SC_PIXEL_MODE
# cd /usr/src
# make kernel KERNCONF=MYDOMAIN
# reboot
Настроим доступ по SSH:
# ee /etc/ssh/sshd_config
PermitRootLogin yes # так делать не рекомендуется!
PasswordAuthentication yes
Subsystem sftp /usr/libexec/sftp-server
В качестве клиента я пользую Mindterm. Чтобы он понимал KOI8-R, надо чуть подправить ему конфиг:
C:\Documents and Settings\admin\mindterm\192.168.0.170.mtp
encoding=koi8-r
Русификация, мне она нужна для корректного отображения русских имен файлов в самбе:
# ee /etc/ttys
ttyv0 "/usr/libexec/getty Pc" cons25r on secure
ttyv1 "/usr/libexec/getty Pc" cons25r on secure
ttyv2 "/usr/libexec/getty Pc" cons25r on secure
ttyv3 "/usr/libexec/getty Pc" cons25r on secure
ttyv4 "/usr/libexec/getty Pc" cons25r on secure
ttyv5 "/usr/libexec/getty Pc" cons25r on secure
ttyv6 "/usr/libexec/getty Pc" cons25r on secure
ttyv7 "/usr/libexec/getty Pc" cons25r on secure
# vipw
root:.....:0:0:russian:0:0:Charlie &:/root:/bin/csh
# ee /root/.cshrc
setenv EDITOR ee # потому что vi для фанатов/изврощенцев
setenv LC_MESSAGES “C” # как-то несерьезно видеть на сервере
setenv LC_NUMERIC “C” # русские меню и сообщения ;)
setenv LC_MONETARY “C”
setenv LC_TIME “C”
Пока сервер в настройке (висит за другим гейтом):
# ee /etc/make.conf
FETCH_CMD=wget # скорее всего, это не понадобится
FETCH_ENV= FTP_PROXY=http://адрес:порт/
FETCH_ENV= HTTP_PROXY=http://адрес:порт/
# setenv HTTP_PROXY 192.168.0.70:3128
# setenv FTP_PROXY 192.168.0.70:3128
Не забудь потом убрать!
Обновление портов:
# portsnap fetch
# portsnap extract
Midnight Commander:
# cd /usr/ports/misc/mc
# make install
# rehash
Пригодится:
# cd /usr/ports/archivers/rar
# make install
Firebird SQL Server
От имени рута он не ставится, поэтому надо дать права на /usr/ports другому юзеру и выполнить установку под ним.
В процессе будет много переключений на рута с запросом пароля.
# chmod –R g+w /usr/ports
# su admin
# cd /usr/ports/databases/firebird20-server
# make install
Почта
POP3, SMTP с авторизацией. Почта хранится в /c/mail/virtual/user@host/Maildir/. Аккаунты в базе MySQL.
Логика работы MTA:
- с localhost принимается всё;
- прошедшие авторизацию, могут слать со своего ящика на любой;
- не прошедшие авторизацию, подвергаются тщательным проверкам (dns-bl, blacklist и пр.),
после чего могут слать только на имеющиеся локальные ящики;
- graylisting не используется, ибо ацтой.
Кстати, приведенная ниже настройка SMTP позволила навсегда забыть, что такое вирусы в почте.
Для начала отключение опций, относящихся к sendmail:
# touch /etc/periodic.conf
# ee /etc/periodic.conf
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
# cd /usr/ports/security/openssl
# make install
Если планируется SAMBA, то нужна опция MD2.
# rehash
# cd /usr/ports/databases/mysql51-server
# setenv WITH_CHARSET cp1251
# setenv WITH_OPENSSL yes
# setenv BUILD_OPTIMIZED yes
# make install
# rehash
# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# ee /etc/my.cnf
[mysqld]
log=/var/log/mysql.log
bind-address=127.0.0.1
# touch /var/log/mysql.log
# chown mysql:mysql /var/log/mysql.log
# /usr/local/etc/rc.d/mysql-server start
# cat /var/log/mysql.log
# cd /usr/ports/databases/mysql51-scripts
# make install
# rehash
# mysql_secure_installation
# cd /usr/ports/security/cyrus-sasl2
# make install
# rehash
# touch /usr/local/lib/sasl2/smtpd.conf
# ee /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: CRAM-MD5 DIGEST-MD5 PLAIN LOGIN
sql_engine: mysql
sql_user: postfix
sql_passwd: postfix
sql_hostname: 127.0.0.1
sql_database: mailbase
sql_select: select password from accounts where login='%u'
sql_verbose: no
log_level: 1
# cd /usr/ports/security/courier-authlib
# make install
# rehash
# ee /usr/local/etc/authlib/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5
authdaemonvar=/var/run/authdaemond
subsystem=mail
DEBUG_LOGIN=0
DEFAULTOPTIONS="wbnodsn=1"
LOGGEROPTS=""
Создадим пользователя virtual:
# pw group add virtual -g 1984
# pw user add virtual -g virtual -s /sbin/nologin -u 1984
# mkdir /c/mail
# chown virtual:virtual /c/mail/
# chmod -R 777 /c/mail/
# ee /usr/local/etc/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mailbase
MYSQL_USER_TABLE accounts
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD '1984'
MYSQL_GID_FIELD '1984'
MYSQL_LOGIN_FIELD login
MYSQL_HOME_FIELD '/c/mail'
MYSQL_NAME_FIELD realname
MYSQL_MAILDIR_FIELD mailbox
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active='1'
# shutdown -r now
Убедимся:
# cat /var/log/maillog | grep “authdaemon”
Oct 20 12:08:52 authdaemond: modules="authmysql", daemons=5
Oct 20 12:08:52 authdaemond: Installing libauthmysql
Oct 20 12:08:52 authdaemond: Installation complete: authmysql
Сервер pop3:
# cd /usr/ports/mail/courier-imap
# make install
# ee /usr/local/etc/courier-imap/pop3d
PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH="CRAM-MD5 PLAIN LOGIN CRAM-SHA1 CRAM-SHA256"
POP3AUTH_ORIG="CRAM-MD5 PLAIN LOGIN CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
POP3AUTH_TLS_ORIG=""
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=YES
MAILDIRPATH=Maildir
# reboot
Проверим:
# sockstat | grep 110
root couriertcp 924 3 tcp4 *:110 *:*
Сервер SMTP:
# cd /usr/ports/mail/postfix
# make install
Опции: PCRE, SASL2, TLS, MYSQL, VDA
# ee /usr/local/etc/postfix/main.cf
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
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
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
home_mailbox = Maildir/
mail_owner = postfix
setgid_group = maildrop
default_privs = nobody
myhostname = fqdndomain.tld # оба этих имени должны резольвится извне,
mydomain = fqdndomain.tld # иначе есть хороший шанс быть посланным
smtpd_banner = $myhostname ESMTP PREVED # приветствие сервера
inet_interfaces = all # слушать везде
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
relay_domains = $mydestination
default_destination_recipient_limit = 10 # глобальные пользовательские ограничения
message_size_limit = 32000000
virtual_mailbox_limit = 64000000
transport_maps=mysql:/usr/local/etc/postfix/transport.cf
virtual_mailbox_base = /
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mailbox.cf
virtual_uid_maps = static:1984 # это наш пользователь virtual
virtual_gid_maps = static:1984
smtpd_disable_vrfy_command = yes
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
smtpd_reject_unlisted_sender = yes
smtpd_reject_unlisted_recipient = yes
show_user_unknown_table_name = no
local_recipient_maps = mysql:/usr/local/etc/postfix/mailbox.cf
smtpd_sasl_type = cyrus
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = no
smtpd_sender_login_maps = mysql:/usr/local/etc/postfix/boxowner.cf
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_helo_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_invalid_hostname,
reject_unknown_hostname,
reject_non_fqdn_hostname
smtpd_client_restrictions = permit_sasl_authenticated,
permit_mynetworks,
check_client_access hash:/usr/local/etc/postfix/access,
reject_unknown_client,
check_client_access regexp:/usr/local/etc/postfix/access2,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.ru
Исключения из правил на основе адресов (есть еще хорошие люди, у которых админят лохи):
# touch /usr/local/etc/postfix/access
# ee /usr/local/etc/postfix/access
vasya.pupkin.local OK
81.17.0.8 OK
80.78.114.7 REJECT
# postmap /usr/local/etc/postfix/access
Исключения из правил на основе регэкспов (гасим большинство диалапщиков):
# touch /usr/local/etc/postfix/access2
# ee /usr/local/etc/postfix/access2
/dsl.*\..*\..*/i 553 Invalid host
/[ax]dsl.*\..*\..*/i 553 Invalid host
/pool.*\..*\..*/i 553 Invalid host
/pppo.*\..*/i 553 Invalid host
/ppp.*\..*\..*/i 553 Invalid host
/dial.*\..*/i 553 Invalid host
/cable.*\..*\..*/i 553 Invalid host
/gprs\..*\..*/i 553 Invalid host
/dynamic.*\..*/i 553 Invalid host
/static.*[0-9].*\..*\..*/i 553 Invalid host
/broadband.*\..*/i 553 Invalid host
/gateway.*\..*\..*/i 553 Invalid host
/host[0-9].*\..*\..*/i 553 Invalid host
/host\-[0-9].*\..*\..*/i 553 Invalid host
/sub[0-9].*\..*\..*/i 553 Invalid host
/net[0-9].*\..*\..*/i 553 Invalid host
/([0-9]{,4}\-[0-9]{,4}\-[0-9]{,4}).*/i 553 Invalid host
/([0-9]{,4}\.[0-9]{,4}\.[0-9]{,4}).*/i 553 Invalid host
/ip[0-9][0-9].*\..*\..*/i 553 Invalid host
/[0-9]8,12.*\..*\..*/i 553 Invalid host
/ip\-[0-9].*\..*\..*/i 553 Invalid host
# postmap /usr/local/etc/postfix/access2
# newaliases
# postfix check
# touch /usr/local/etc/postfix/mailbox.cf
# ee /usr/local/etc/postfix/mailbox.cf
host = localhost
user = postfix
password = postfix
dbname = mailbase
query = select mailbox from accounts where email='%s' and active='1'
# touch /usr/local/etc/postfix/boxowner.cf
# ee /usr/local/etc/postfix/boxowner.cf
host = localhost
user = postfix
password = postfix
dbname = mailbase
query = select login from accounts where email='%s' and active='1'
# touch /usr/local/etc/postfix/transport.cf
# ee /usr/local/etc/postfix/transport.cf
host = localhost
user = postfix
password = postfix
dbname = mailbase
query = select transport from transport where location='%s'
# mysql -u root -p
mysql> create database mailbase;
mysql> use mailbase;
mysql> create table accounts (
-> login varchar(32) unique not null,
-> password varchar(32) not null,
-> email varchar(128) unique not null,
-> realname varchar(128),
-> mailbox varchar(256) not null,
-> quota varchar(16) not null,
-> active varchar(1) not null);
mysql> create table transport (
-> location varchar(128) unique not null,
-> transport varchar(128) not null default `virtual:’);
mysql> commit;
mysql> insert into accounts values (
-> 'testuser',
-> 'testpassword',
-> 'testuser@fqdndomain.tld',
-> 'The Best User',
-> '/c/mail/virtual/testuser@fqdndomain.tld/Maildir/',
-> '100000000',
-> '1');
mysql> insert into transport values (
-> 'fqdndomain.tld',
-> 'virtual:');
mysql> commit;
mysql> grant select on mailbase.* to postfix identified by 'postfix';
mysql> commit;
mysql> \q
# reboot
Apache, PHP
# cd /usr/ports/www/apache13-modssl
# make install
# ee /usr/local/etc/apache/httpd.conf
ServerType standalone
ServerRoot "/usr/local"
PidFile /var/run/httpd.pid
ScoreBoardFile /var/run/httpd.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 15
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxClients 50
MaxRequestsPerChild 0
Port 80
User www
Group www
ServerAdmin postmaster@fqdndomain.tld
ServerName fqdndomain.tld
DocumentRoot "/c/www/data"
LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html
# mkdir /c/www
# chown www:www /c/www
# chmod 755 /c/www
# cd /usr/ports/lang/php5
# make install
С опциями: CGI, LCI, APACHE, SUHOSIN
# cd /usr/local/etc
# cp php.ini-production php.ini
# cd /usr/ports/lang/php5-extensions
# make clean
# make config
# make install
Опции по вкусу, если что, всегда можно переставить.
SQUID
# cd /usr/ports/www/squid31
# make install
# mkdir /c/cache
# chown squid:squid /c/cache/
# ee /usr/local/etc/squid/squid.conf
include /usr/local/etc/squid/acl.conf
http_port 3128
hierarchy_stoplist cgi-bin ?
cache_dir ufs /c/cache 16384 16 256
maximum_object_size 1024 MB
access_log /c/cache/access.log squid
coredump_dir /c/cache
ftp_list_width 48
ftp_passive on
ftp_sanitycheck off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 95
visible_hostname fqdndomain.tld
forwarded_for transparent
httpd_suppress_version_string on
Чтобы не засирать конфиг, вынес контролы в отдельный файл:
# ee /usr/local/etc/squid/acl.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
http_access allow manager localhost
http_access deny manager
http_access deny to_localhost
acl pass url_regex .*openstreetmap.*
acl pass url_regex .*bannerClickStatistic.*
acl pass url_regex .*bannerfilter.*
acl pass url_regex .*checkbanner.*
http_access allow pass
acl lns url_regex http:\/\/line4auto\.ru.* # достали эти форумные линейки
acl lns url_regex http:\/\/www\.autometric\.ru\/lines\/.*
acl lns url_regex http:\/\/forum-lines\.ru\/rez\/.*
acl lns url_regex http:\/\/nomer\.avtobeginner\.ru\/.*
acl lns url_regex http:\/\/www\.klavogonki\.ru\/sign\/.*
acl lns url_regex http:\/\/s-u\.su\/s\/.*
acl lns url_regex http:\/\/lines\..*
acl lns url_regex http:\/\/line\..*
acl lns url_regex http:\/\/www\.forum-lines\.ru\/rez\/.*
acl lns url_regex http:\/\/www\.minidog\.info\/lines\/.*
acl lns url_regex http:\/\/puzyaka\.ru\/metric.*
acl cnt url_regex .*\.spylog\.com\/cnt.* # и счётчики
acl cnt url_regex .*\.hotlog\.ru
acl cnt url_regex .*top100\/.*
acl cnt url_regex .*\/logos\/.*
acl cnt url_regex .*rambler\.gif
acl cnt url_regex .*an\.yandex\.ru.*
acl cnt url_regex .*hotlog\.ru.*
acl cnt url_regex .*top\.mail\.ru.*
acl cnt url_regex .*host-tracker\.com\/uptime-img.*
acl cnt url_regex .*yandex\.ru\/metrika\/watch.*
acl ad2 url_regex http:\/\/promo\.1000zakazov\.ru\/img_.* # реклама само собой
acl ad2 url_regex .*reklam.*
acl ad2 url_regex .*auto\.lbn\.ru\/\/cgi-bin\/banner\/.*
acl ad2 url_regex .*googleads.*.doubleclick.*
acl ad2 url_regex .*pagead.*
acl ad2 url_regex .*\/adfox\/.*
acl ad2 url_regex .*advert.*
acl ad2 url_regex .*infox\.ru\/img\/temp00.*
acl ad2 url_regex .*infox\.ru\/img\/head.*
acl ad2 url_regex .*infox\.ru\/img\/logo.*
acl ad2 url_regex .*lbn\.ru.*
acl ad2 url_regex .*\/ban\/.*
acl ad2 url_regex .*liveinternet\.ru\/click.*
acl ad2 url_regex .*banner.*
acl ad2 url_regex .*banners.*
acl ad2 url_regex .*mastertraffic\.cn\/.*
acl ad2 url_regex .*1under.ru\/.*
acl ad2 url_regex .*2under.ru\/.*
acl ad2 url_regex .*tizru\.com\/.*
acl ad2 url_regex .*pop-bazar.net\/.*
acl ad2 url_regex .*lycosy.com\/.*
acl ad2 url_regex .*adbureau\.net.*
acl ad2 url_regex http:\/\/[0-9].*\.[0-9].*\..*\/image.*
acl ad2 url_regex ...*.\/.*[0-9]x.*[0-9]\.gif
acl ad2 url_regex .*rs\.mail\.ru\/..*\.swf
acl ad2 url_regex .*rs\.mail\.ru\/b..*\.jpg
acl ad2 url_regex .*rs\.mail\.ru\/b..*\.gif
acl ad2 url_regex .*123strahovka\.ru\/portals\/.*
acl nah url_regex .*agent\.mail\.ru.* # а тут в рабочее время делать нефиг
acl nah url_regex .*windowsupdate\..*
acl nah url_regex .*crl\.microsoft\.com.*
acl nah url_regex .*sitecheck\.opera\..*
http_access deny lns
http_access deny ad2
http_access deny cnt
http_access deny nah
http_access allow all
# squid –z
# squid check
# shutdown -r now
# cd /usr/local/etc/squid/errors/ru
# cp ERR_ACCESS_DENIED ERR_ACCESS_DENIED.original
# ee ERR_ACCESS_DENIED
Очистить содержимое файла (оставить пустую строку, CRLF), чтобы блокированный контент
не лез юзерам на экран в виде сообщений сквида.
Средства мониторинга и статистики для SQUID
# cd /usr/ports/www/sarg
# make install
# ee /usr/local/etc/sarg/sarg.conf
# sarg.conf
language Russian_koi8
charset Koi8-r
access_log /c/cache/access.log
graphs yes
title "fqdndomain.tld Squid User Access Reports"
output_dir /c/www/sarg
resolve_ip no
user_ip no
exclude_hosts /usr/local/etc/sarg/exclude_hosts
date_format e
lastlog 36
remove_temp_files yes
index yes
overwrite_report yes
records_without_userid ip
usertab /etc/hosts
displayed_values abbreviation
www_document_root /c/www
Исключения, обычно это localhost и админская воркстейшен ;)
# touch /usr/local/etc/sarg/exclude_hosts
Еженощное автоматическое посторение статистики, состоит из двух скриптов:
# touch /usr/local/etc/sarg/sarg_daily.sh
# ee /usr/local/etc/sarg/sarg_daily.sh
#!/bin/sh
#
DATE2=$(date -v1d -v+1m -v-1d "+%d/%m/%Y")
DATE1=$(date -v-1d "+01/%m/%Y")
/usr/local/bin/sarg -d $DATE1-$DATE2
Во втором, кроме прочего, архивирование всего кэша за прошлый месяц.
# touch /usr/local/etc/sarg/sarg_monthly.sh
# ee /usr/local/etc/sarg/sarg_monthly.sh
#!/bin/sh
#
DATE2=$(date -v-1d "+%d/%m/%Y")
DATE1=$(date -v-1m "+01/%m/%Y")
DATE3=$(date -v1d -v-1m -v-1d "+%Y%m%d")
/usr/local/bin/sarg -d $DATE1-$DATE2
/usr/local/sbin/squid -k rotate
rm /c/cache.rar
/usr/local/bin/rar a -r -s -m1 -ta$DATE3 /c/cache.rar /c/cache
# ee /usr/local/etc/apache/httpd.conf
Alias /sarg/ "/c/www/sarg/"
< Directory "/c/www/sarg">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order Deny,Allow
Deny from all
Allow from 192.168.0.10
< /Directory>
# ee /etc/crontab
1 0 2-31 * * root /usr/local/etc/sarg/sarg_daily.sh
1 0 1 * * root /usr/local/etc/sarg/sarg_monthly.sh
# mkdir /c/www/sarg
Завтра смотрим статистику: http://192.168.0.170/sarg/index.html
Кстати, кроме статистики, sarg умеет еще много чего, поэтому советую почитать мануал.
Коннекты SQUID почти в реальном времени:
# cd /usr/ports/www/sqstat
# make install
# cd /usr/local/share/sqstat
# cp config.inc.php.defaults config.inc.php
# ee config.inc.php
$resolveip[0]=true; # если надо, конечно
# ee /usr/local/etc/apache/httpd.conf
Alias /sqstat/ "/usr/local/share/sqstat/"
< Directory "/usr/local/share/sqstat">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order Deny,Allow
Allow from 192.168.0.10
< /Directory>
Смотрим: http://192.168.0.170/sqstat/sqstat.php
Бесперебойник APC
# cd /usr/ports/sysutils/apcupsd
# make install
# ee /usr/local/etc/apcupsd/apcupsd.conf
## apcupsd.conf v1.1 ##
UPSNAME Smart1500
UPSCABLE smart
UPSTYPE usb # намного проще, чем трахаться с COM
DEVICE
LOCKFILE /var/spool/lock
SCRIPTDIR /usr/local/etc/apcupsd
PWRFAILDIR /var/run
NOLOGINDIR /var/run
ONBATTERYDELAY 6
BATTERYLEVEL 20
MINUTES 6
TIMEOUT 0
ANNOY 0
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 100
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0
Проверка:
# reboot
# apcaccess
Конфигурация зависимого сервера Windows:
C:\apcupsd\etc\apcupsd\apcupsd.conf
## apcupsd.conf v1.1 ##
UPSNAME Smart1500
UPSCABLE ether
UPSTYPE net
DEVICE 192.168.0.170:3551
ONBATTERYDELAY 6
BATTERYLEVEL 20
MINUTES 6
TIMEOUT 0
ANNOY 0
ANNOYDELAY 60
NOLOGON disable
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE C:\apcupsd\etc\apcupsd\apcupsd.events
EVENTSFILEMAX 10
NETTIME 10 # интервал опроса сервера
UPSCLASS standalone
STATTIME 0
STATFILE C:\apcupsd\etc\apcupsd\apcupsd.status
LOGSTATS off
DATATIME 0
SAMBA
Все виндовые ACL отключены, права раздаются из консоли FreeBSD.
DOS атрибуты (кроме archive) не мапятся.
Права доступа галками через виндовый гуй не ставятся, папки и файлы в корне шары через винду не создаются.
Образец (шара по имени test, находится в /c/test):
drwxrwx--- 3 admin domain users 512 10 nov 10:26 allusers доступ всем юзерам домена
drwx------ 2 testuser domain users 512 10 nov 10:24 testuser доступ только одному юзеру
drwxrwx--- 2 testuser2 domain admins 512 10 nov 10:26 testuser2 доступ одному юзеру и всем админам
Сама шара:
drwxrwxr-x 7 root wheel 512 10 nov 11:02 test
Приступим. Если Openssl собран без MD2, надо пересобрать.
# cd /usr/ports/net/samba34
# make install
Опции: LDAP, ADS, WINBIND, SWAT, ACL, POPT
# cd /usr/ports/security/heimdal
# make install
Без опций, так как всё уже есть на Primary Domain Controller под вендой.
По поводу heimdal - говорят, что в FreeBSD начиная с 6.2 уже есть полноценная реализация kerberos,
и поэтому неимдал не нужен. ХЗ, я не проверял, поставил да и всё.
# touch /etc/krb5.conf
# ee /etc/krb5.conf
[libdefaults]
ticket_lifetime = 24h
default_realm = LOCALDOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
forwardable = true
proxiable = true
[realms]
LOCALDOMAIN.LOCAL = {
kdc = 192.168.0.7:88 # адрес виндового контроллера домена
admin_server = 192.168.0.7:749
default_domain = localdomain.local
}
[domain_realm]
.localdomain.local = LOCALDOMAIN.LOCAL
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log
[pam]
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
[login]
krb4_convert = false
krb4_get_tickets = false
# ee /etc/nsswitch.conf
group: files winbind
group_compat: nis
passwd: files winbind
passwd_compat: nis
hosts: files wins dns
networks: files
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
# ee /usr/local/etc/smb.conf
[global]
dos charset = cp866
unix charset = koi8-r
display charset = koi8-r
workgroup = LOCALDOMAIN # имя домена
realm = LOCALDOMAIN.LOCAL
server string =
security = ADS
auth methods = winbind
map to guest = Bad User
password server = 192.168.0.7 # адрес контроллера
enable privileges = No
client NTLMv2 auth = Yes
log file = /var/log/samba34/log.%m
max log size = 500
client signing = Yes
load printers = No
disable spoolss = Yes
show add printer wizard = No
local master = No
domain master = No
dns proxy = No
wins server = 192.168.0.7 # адрес сервера
host msdfs = No
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
printer admin = root
create mask = 0770
directory mask = 0770
inherit acls = Yes
guest ok = Yes
nt acl support = No
case sensitive = No
map archive = Yes
map readonly = no
[test]
comment = Test
path = /c/test
read only = No
acl map full control = No
inherit acls = No
guest ok = No
Строчки в rc.conf должны присутствовать:
smbd_enable="YES"
nmbd_enable="YES"
winbindd_enable="YES"
# reboot
Синхронизация времени:
# net time system > date
Получение билета:
# kinit admin@localdomain.local
# klist
Подключение к активной директории:
# net ads join -u admin
Проверки:
# wbinfo -p
# wbinfo -t
# wbinfo -g
# wbinfo -u
#ee /etc/pam.d/login
Насчет PAM чиста ХЗ, у меня всё работает с дефолтными параметрами, а логинить виндовых юзеров на сервер мне не надо.
Cамбу можно (и нужно, т.к. там хэлп под рукой) конфигурить через SWAT (192.168.0.170:901).
PS Потом оказалось, что DNS сервер на виндовом DC про нас не знает, что приводит к тормозам
на первом обращении к шарам. Долго думать не стал, просто добавил самбу в виндовый DNS руками.
DNS
DNS в моем случае работает как-то так замороченно. В виндовых клиентах dns-сервером прописан контроллер домена,
все запросы идут на него. Тот настроен так, что форвардит неизвестные имена сюда, где они запрашиваются у
провайдерского сервера(ов) и кэшируются. То есть имеем тупой DNS forwarder.
# ee /etc/resolv.conf
domain localdomain
nameserver 127.0.0.1
# ee /etc/namedb/named.conf
options {
directory "/etc/namedb/working";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
forwarders {
XZ.XZ.XZ.XZ; # это провайдерские сервера
ZX.ZX.ZX.ZX;
};
forward only;
query-source address * port 53; # так делать не рекомендуют, но мне пох, т.к. мой DNS снаружи недоступен
};
# далее все описания зон оставлены без изменений
# ee /etc/hosts
192.168.0.2 user02
...
127.0.0.1 localhost
127.0.0.1 server
127.0.0.1 server.fqdndomain.tld
127.0.0.1 server.localdomain
NTP
# touch /etc/ntp.conf
# ee /etc/ntp.conf
server time.nist.gov prefer
server tick.usno.navy.mil
server rustime01.rus.uni-stuttgart.de
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap
logfile /var/log/ntpd.log
Через некоторое время в логе должны появиться записи о синхронизации.
Итоги и тенденции
Для работы Firebird и самбового Swat настроим inetd:
# ee /etc/inetd.conf
gds_db stream tcp nowait firebird /usr/local/bin/fb_inet_server fb_inet_server
swat stream tcp nowait/400 root /usr/local/sbin/swat swat
И окончательно настроим систему:
# ee /etc/rc.conf
ifconfig_re0="inet 192.168.0.170 netmask 255.255.255.0"
ifconfig_re0_alias0="inet 192.168.0.171 netmask 255.255.255.0"
ifconfig_fxp0="inet xx.xx.xx.xx netmask 255.255.255.252"
hostname="server.localdomain.local"
defaultrouter="zz.zz.zz.zz" # провайдерский гейт
firewall_enable="YES"
firewall_type="/etc/rc.firewall"
ipv6_enable="NO"
gateway_enable="YES"
tcp_extentions="NO"
tcp_drop_synfin="YES"
icmp_drop_redirect="YES"
icmp_log_redirect="NO"
keyrate="fast"
keymap="ru.koi8-r"
scrnmap="koi8-r2cp866"
font8x16="cp866-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
sendmail_enable="NONE" # кузнец нам не нужен ;)
sendmail_msp_queue_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
mta_start_script=""
moused_enqble="NO"
linux_enable="NO"
apcupsd_enable="YES"
sshd_enable="YES"
inetd_enable="YES"
ftpd_enable="YES"
ftpd_flags="-D -h -M -m"
mysql_enable="YES"
courier_authdaemond_enable="YES"
courier_imap_pop3d_enable="YES"
postfix_enable="YES"
apache_enable="YES"
squid_enable="YES"
smbd_enable="YES"
nmbd_enable="YES"
winbindd_enable="YES"
ntpd_enable="YES"
named_enable="YES"
# touch /etc/rc.local
# ee /etc/rc.local
vidcontrol -c blink VGA_90x30
# NAT с перенаправлением портов: для терминального сервиса windows и для торрентов мне
natd -u -s -m -p 8668 -n fxp0 -redirect_port tcp 192.168.0.7:3389 3389 -redirect_port tcp 192.168.0.10:12345 12345
# ee /etc/rc.firewall
#!/bin/sh -
# $FreeBSD: src/etc/rc.firewall
fc="/sbin/ipfw -q add"
extif="fxp0"
extadr="xx.xx.xx.xx" # наш внешний адрес
lanif="re0"
lannet="192.168.0.0/24"
/sbin/ipfw -f -q flush
/sbin/ipfw table 20 flush
# ANTI-SPOOFING etc
${fc} drop all from 192.168.0.0/16 to any recv ${extif}
${fc} drop all from any to 192.168.0.0/16 in recv ${extif}
${fc} drop all from 127.0.0.0/8 to any recv ${extif}
${fc} drop all from 127.0.0.0/8 to any recv ${lanif}
${fc} drop all from any to 172.16.0.0/12 # gray
${fc} drop all from 172.16.0.0/12 to any # gray
${fc} drop all from 169.254.0.0/16 to any
${fc} drop all from any to 169.254.0.0/16
# NAT+REDIRECT
${fc} divert 8668 all from any to ${extadr}
${fc} allow tcp from one.static.trusted.address to 192.168.0.7 3389 # форвардинг на терминальный сервис
${fc} allow tcp from any to 192.168.0.10 12345 # форвард на TORRENT клиента
${fc} divert 8668 all from ${lannet} to any out via ${extif}
${fc} allow tcp from 192.168.0.7 3389 to one.static.trusted.address # MSTS
${fc} allow tcp from me 3389 to one.static.trusted.address # MSTS
${fc} allow tcp from 192.168.0.10 12345 to any # TORRENT
${fc} allow tcp from me 12345 to any # TORRENT
# loop
${fc} allow all from any to any via lo
# DYNAMIC FROM HERE
${fc} check-state
# MTA blacklist
${fc} drop all from "table(20)" to any
# ICMP
${fc} allow icmp from ${lannet} to any icmptypes 0,3,4,8,11 keep-state
${fc} allow icmp from 85.92.3.130 to me icmptypes 0,3,4,8,11 keep-state
${fc} allow icmp from me to any keep-state
# OUTGOING
${fc} allow tcp from me to any setup keep-state
${fc} allow udp from me to any keep-state
# INCOMING
${fc} allow tcp from any to me 25,110 setup keep-state
# TO NAT
${fc} allow tcp from ${lannet} to not me 443 setup keep-state # https
${fc} allow tcp from ${lannet} to not me 5999 setup keep-state # cvsup
${fc} allow tcp from ${lannet} to not me 27000-27050 setup keep-state # STEAM
${fc} allow udp from ${lannet} to not me 27000-27050 keep-state # STEAM
# TO NAT FROM superuser
${fc} allow tcp from 192.168.0.10 to not me 22,11965,3128 setup keep-state
# LAN
${fc} drop all from 192.168.0.7 to me 3128 # венда идет лесом
${fc} allow udp from ${lannet} to me 53,13,37,123 keep-state
${fc} allow tcp from ${lannet} to me 53,13,37,123 setup keep-state
${fc} allow tcp from ${lannet} to me 20,21,3128,3551 setup keep-state
${fc} allow tcp from 192.168.0.10 to me 22,80 setup keep-state
# SAMBA
${fc} allow udp from ${lannet} to me 137,138,139,445 keep-state
${fc} allow tcp from ${lannet} to me 137,138,139,445 setup keep-state
${fc} allow tcp from 192.168.0.10 to me 901 setup keep-state
# Firebird
${fc} allow udp from ${lannet} to me 3050 keep-state
${fc} allow tcp from ${lannet} to me 3050 setup keep-state
# finally
${fc} drop all from any to any
Это всё, удачи ;)