Разбиение диска: / 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 Это всё, удачи ;)