Начальная настройка
Не буду здесь описывать непосредственную процедуру установки ОС, она стандартная. Отмечу лишь что это FreeBSD версии 8.0.
Проблема заключается в том, что сервер не имеет непосредственного выхода в интернет, а доступ в интернет для машин из локальной сети осуществляется через VPN соединение. На свежепоставленной ОС FreeBSD нет средств для утсановки VPN соединения. Надо ставить MPD5, но для этого, в свою очередь, нужны порты. Из этой ситуации есть выход — подключиться к машине, где уже есть порты по протоколу NFS.
Настройка NFS
На серверной машине настроим /etc/rc.conf
rpcbind_enable="YES" nfs_server_enable="YES" mountd_enable="YES" mountd_flags="-r"
Отредактируем /etc/exports , добавим туда строку.
/usr/ports -maproot=root 192.168.0.50
IP в этой строке — адрес нашего клиента. Флаг -maproot=root дает возможность пользователю root на клиенте использовать NFS-шару по полной на сервере.
Теперь:
#reboot
На клиентской машине (которую мы будем конфигурировать) добавим в /etc/rc.conf
nfs_client_enable="YES"
И далее:
#/etc/rc.d/nfsclient start #cd /usr #mkdir ports #mount 192.168.0.1:/usr/ports /usr/ports
Все у нас есть дерево потов, плюс то, что в /usr/ports/distfiles лежит. Учтите, что если какогото порта не хватает, то на до будет заходить на сервер, и скачивать его вручную средствами портов, ведь у нашего NFS-слиента пока отсутствует доступ в интернет.
Для скачивания используйте комнду
#make fetch-recursive
Настройка MPD5 для выхода в интернет по VPN
На текущий момент актуальным был MPD 5.4
При этом в отличии от версии 5.3, там изменился стандарт передачи параметров в скрипты. Так что скажу сразу, представленные ниже скрипты для 5.4 не работают 🙁
Ставится все стандартно
На сервере NFS:
#cd /usr/ports/net/mpd5 #make fetch-recursive
На нашей машине:
#cd /usr/ports/net/mpd5 #make config install clean
Вот конфиг ''/usr/local/etc/mpd5/mpd.conf''
startup: # configure mpd users set user foo bar admin set user foo1 bar1 # configure the console set console self 127.0.0.1 5005 set console open # configure the web server # set web self 192.168.0.1 5006 # set web open default: load pptp_client pptp_client: create bundle static B2 set iface route default set iface up-script /usr/local/etc/mpd5/up.script set iface down-script /usr/local/etc/mpd5/down.script set ipcp ranges 0.0.0.0/0 0.0.0.0/0 set ipcp enable req-pri-dns set ipcp enable req-sec-dns set bundle enable compression set ccp yes mppc set mppc yes e40 set mppc yes e128 set mppc yes stateless create link static L2 pptp set link enable multilink set link yes acfcomp protocomp set link action bundle B2 set link enable multilink set link yes acfcomp protocomp set auth authname "user" set auth password "password" set link max-redial 0 set link mtu 1460 set link keep-alive 10 60 set pptp peer 192.168.0.1 set pptp disable windowing open
Так же добавим два скрипта, которые будут менять /etc/rc.conf при установлении и разрыве соединения.
При старте/usr/local/etc/mpd5/up.script.
#!/bin/sh cp -f /etc/resolv.conf /etc/resolv.conf.bak echo nameserver $6 > /etc/resolv.conf echo nameserver $7 >> /etc/resolv.conf
При окончании работы /usr/local/etc/mpd5/down.script.
#!/bin/sh cp -f /etc/resolv.conf.bak /etc/resolv.conf rm -f /etc/resolv.conf.bak
Назначим скриптам права
#cd /usr/local/etc/mpd5 #chmod 744 up.script #chmod 744 down.script
Если скрипты у вас не работают, закомментируйте их в mpd.conf, и допишите DNS ручками в /etc/resolv.conf.
Добавим в /etc/rc.conf
mpd_enable="YES"
Запустим mpd5
# /usr/local/etc/rc.d/mpd5 start
Соединение должно установиться.
Установка полезных программ и прочих параметров
Отмонтируем директорию портов, которая была замонтирована по NFS
#umount /mnt/ports
Можно отключить NFS-клиента в rc.conf, он нам ольше не понадобится
Теперь установим собственную систему портов:
#portsnap fetch #portsnap extract
Сразу поставим
- /usr/ports/misc/mc
- /usr/ports/shells/bash
- /usr/ports/sysutils/screen
Обновление ОС
После установки неплохо накатить последние патчи на ОС, для этого:
# freebsd-update fetch # freebsd-update install # reboot
Если вы не используете свое ядро, то на этом обновление завершается, в противном случае вам надо пересобрать ваш CUSTOM-KERNEL.
Установка MySQL
Использовать будем наиболее стабильную версию, на текущий момент это 5.1.x
#cd /usr/ports/databases/mysql51-server #make install clean
Добавьте в /etc/rc.conf:
mysql_enable="YES" mysql_dbdir="/storage/db/mysql"
Запустим MySQL:
#/usr/local/etc/rc.d/mysql-server start
Запустится MYSQL, в каталоге /storage/db/mysql будет создана база.
Теперь доработаем MYSQL в соответствии с требованиями по безопасности, подробнее о необходимых доработках вы можете почитать в документации на MYSQL.
Что необходимо сделать, дабы обезопасить нашу базу:
#mysql -u root mysql>use mysql; mysql>DROP USER ''@'localhost'; mysql>DROP USER ''@'hostname.localdomain'; mysql>DROP USER 'root'@'hostname.localdomain'; mysql>
Т.к. образом мы выпилили всех анонимных пользователей и пользователя [email protected], итого, у нас остался только пользователь root, который может подключиться только локально.
Назначим пароль для root:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd'); mysql> exit
Установка Apache HTTPD
#cd /usr/ports/www/apache22 #make install clean
Опции конфигурирования:
┌────────────────────────────────────────────────────────────────────┐ │ Options for apache 2.2.14_5 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │[ ] APR_FROM_PORTS Use devel/apr as APR (preferred) │ │ │ │[ ] THREADS Enable threads support in APR │ │ │ │[X] MYSQL Enable MySQL support for apr-dbd │ │ │ │[ ] PGSQL Enable PostgreSQL support for apr-dbd │ │ │ │[ ] SQLITE Enable SQLite support for apr-dbd │ │ │ │[ ] IPV6 Enable IPv6 support │ │ │ │[ ] BDB Enable BerkeleyDB dbm │ │ │ │[X] AUTH_BASIC Enable mod_auth_basic │ │ │ │[X] AUTH_DIGEST Enable mod_auth_digest │ │ │ │[X] AUTHN_FILE Enable mod_authn_file │ │ │ │[ ] AUTHN_DBD Enable mod_authn_dbd │ │ │ │[X] AUTHN_DBM Enable mod_authn_dbm │ │ │ │[X] AUTHN_ANON Enable mod_authn_anon │ │ │ │[X] AUTHN_DEFAULT Enable mod_authn_default │ │ │ │[X] AUTHN_ALIAS Enable mod_authn_alias │ │ │ │[X] AUTHZ_HOST Enable mod_authz_host │ │ │ │[X] AUTHZ_GROUPFILE Enable mod_authz_groupfile │ │ │ │[X] AUTHZ_USER Enable mod_authz_user │ │ │ │[X] AUTHZ_DBM Enable mod_authz_dbm │ │ │ │[X] AUTHZ_OWNER Enable mod_authz_owner │ │ │ │[X] AUTHZ_DEFAULT Enable mod_authz_default │ │ │ │[X] CACHE Enable mod_cache │ │ │ │[X] DISK_CACHE Enable mod_disk_cache │ │ │ │[X] FILE_CACHE Enable mod_file_cache │ │ │ │[ ] MEM_CACHE Enable mod_mem_cache │ │ │ │[X] DAV Enable mod_dav │ │ │ │[X] DAV_FS Enable mod_dav_fs │ │ │ │[ ] BUCKETEER Enable mod_bucketeer │ │ │ │[ ] CASE_FILTER Enable mod_case_filter │ │ │ │[ ] CASE_FILTER_IN Enable mod_case_filter_in │ │ │ │[ ] EXT_FILTER Enable mod_ext_filter │ │ │ │[ ] LOG_FORENSIC Enable mod_log_forensic │ │ │ │[ ] OPTIONAL_HOOK_EXPORT Enable mod_optional_hook_export │ │ │ │[ ] OPTIONAL_HOOK_IMPORT Enable mod_optional_hook_import │ │ │ │[ ] OPTIONAL_FN_IMPORT Enable mod_optional_fn_import │ │ │ │[ ] OPTIONAL_FN_EXPORT Enable mod_optional_fn_export │ │ │ │[ ] LDAP Enable mod_ldap │ │ │ │[ ] AUTHNZ_LDAP Enable mod_authnz_ldap │ │ │ │[X] ACTIONS Enable mod_actions │ │ │ │[X] ALIAS Enable mod_alias │ │ │ │[X] ASIS Enable mod_asis │ │ │ │[X] AUTOINDEX Enable mod_autoindex │ │ │ │[X] CERN_META Enable mod_cern_meta │ │ │ │[X] CGI Enable mod_cgi │ │ │ │[X] CHARSET_LITE Enable mod_charset_lite │ │ │ │[ ] DBD Enable mod_dbd │ │ │ │[X] DEFLATE Enable mod_deflate │ │ │ │[X] DIR Enable mod_dir │ │ │ │[X] DUMPIO Enable mod_dumpio │ │ │ │[X] ENV Enable mod_env │ │ │ │[X] EXPIRES Enable mod_expires │ │ │ │[X] HEADERS Enable mod_headers │ │ │ │[X] IMAGEMAP Enable mod_imagemap │ │ │ │[X] INCLUDE Enable mod_include │ │ │ │[X] INFO Enable mod_info │ │ │ │[X] LOG_CONFIG Enable mod_log_config │ │ │ │[X] LOGIO Enable mod_logio │ │ │ │[X] MIME Enable mod_mime │ │ │ │[X] MIME_MAGIC Enable mod_mime_magic │ │ │ │[X] NEGOTIATION Enable mod_negotiation │ │ │ │[X] REWRITE Enable mod_rewrite │ │ │ │[X] SETENVIF Enable mod_setenvif │ │ │ │[X] SPELING Enable mod_speling │ │ │ │[X] STATUS Enable mod_status │ │ │ │[X] UNIQUE_ID Enable mod_unique_id │ │ │ │[X] USERDIR Enable mod_userdir │ │ │ │[X] USERTRACK Enable mod_usertrack │ │ │ │[X] VHOST_ALIAS Enable mod_vhost_alias │ │ │ │[X] FILTER Enable mod_filter │ │ │ │[X] VERSION Enable mod_version │ │ │ │[ ] PROXY Enable mod_proxy │ │ │ │[ ] PROXY_CONNECT Enable mod_proxy_connect │ │ │ │[X] PATCH_PROXY_CONNECT Patch proxy_connect SSL support │ │ │ │[ ] PROXY_FTP Enable mod_proxy_ftp │ │ │ │[ ] PROXY_HTTP Enable mod_proxy_http │ │ │ │[ ] PROXY_AJP Enable mod_proxy_ajp │ │ │ │[ ] PROXY_BALANCER Enable mod_proxy_balancer │ │ │ │[ ] PROXY_SCGI Enable mod_proxy_scgi │ │ │ │[X] SSL Enable mod_ssl │ │ │ │[ ] SUEXEC Enable mod_suexec │ │ │ │[ ] CGID Enable mod_cgid │ │ ├─└────v(+)────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
В /etc/rc.conf добавим.
apache22_enable="YES"
Сконфигурируйте файл /usr/local/etc/apache22/httpd.conf в соответствии с вашим названием сервера. Принципиальных моментов в конфигурации этого файла нет, так что приводить этот файл я не буду. Обязательно проверьте наличие строчек в секции mime_module
########################################## AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps #########################################
У нас предполагается наличие двух сайтов на хосте. Боевой и тестовый. Для них создадим двух пользователей, каждый из которых будет соответствовать своему порталу.
# adduser Username: portal Full name: portal Uid (Leave empty for default): Login group [portal]: Login group is portal. Invite portal into other groups? []: Login class [default]: russian Shell (sh csh tcsh bash rbash nologin) [sh]: nologin Home directory [/home/portal]: /storage/portal Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : portal Password : ***** Full Name : portal Uid : 1002 Class : russian Groups : portal Home : /storage/portal Home Mode : Shell : /usr/sbin/nologin Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (portal) to the user database. Add another user? (yes/no): yes Username: portaltest Full name: portaltest Uid [1003]: Login group [portaltest]: Login group is portaltest. Invite portaltest into other groups? []: Login class [default]: russian Shell (sh csh tcsh bash rbash nologin) [sh]: nologin Home directory [/storage/portaltest]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : portaltest Password : ***** Full Name : portaltest Uid : 1003 Class : russian Groups : portaltest Home : /storage/portaltest Home Mode : Shell : /usr/sbin/nologin Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (portaltest) to the user database. Add another user? (yes/no): no Goodbye! #
Создадим директории для содержимого портала:
#cd /storage/portal #mkdir www #chown portal:portal www #cd /storage/portaltest #mkdir www #chown portaltest:portaltest www
В каталог www для тестирования положите файл Index.php такого содержания:
It works once again!
Не забудьте назначить соответствующие парва пользователя для этого файла.
Теперь нужно создать в /usr/local/etc/apache22/Includes конфигурационные файлы.
Файл /usr/local/etc/apache22/Includes/portal.conf
############################################## # # Portal # ############################################## ServerName portal.loc DocumentRoot /storage/portal/www DirectoryIndex index.php Options Indexes FollowSymLinks Order allow,deny Allow from all
Файл /usr/local/etc/apache22/Includes/portaltest.conf
############################################## # # Portal # ############################################## ServerName portaltest.loc DocumentRoot /storage/portaltest/www DirectoryIndex index.php Options Indexes FollowSymLinks Order allow,deny Allow from all
Установка PHPMyAdmin
#cd /usr/ports/databases/phpmyadmin #make install clean
Опции конфигурирования:
┌────────────────────────────────────────────────────────────────────┐ │ Options for phpMyAdmin 3.2.5 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [ ] SUPHP suPHP support │ │ │ │ [X] BZ2 bzip2 library support │ │ │ │ [X] GD GD library support │ │ │ │ [X] MYSQLI Improved MySQL support │ │ │ │ [X] OPENSSL OpenSSL support │ │ │ │ [X] PDF PDFlib support (implies GD) │ │ │ │ [X] ZLIB ZLIB support │ │ │ │ [X] MCRYPT MCrypt library support │ │ │ │ [X] MBSTRING Multi-byte character-set string support │ │ │ │ [X] ZIP Zip compression support │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Опции для PHP:
┌────────────────────────────────────────────────────────────────────┐ │ Options for php5 5.2.12 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │[X] CLI Build CLI version │ │ │ │[X] CGI Build CGI version │ │ │ │[X] APACHE Build Apache module │ │ │ │[ ] DEBUG Enable debug │ │ │ │[X] SUHOSIN Enable Suhosin protection system (not for jails) │ │ │ │[ ] MULTIBYTE Enable zend multibyte support │ │ │ │[ ] IPV6 Enable ipv6 support │ │ │ │[ ] MAILHEAD Enable mail header patch │ │ │ │[ ] REDIRECT Enable force-cgi-redirect support (CGI only) │ │ │ │[ ] DISCARD Enable discard-path support (CGI only) │ │ │ │[X] FASTCGI Enable fastcgi support (CGI only) │ │ │ │[X] PATHINFO Enable path-info-check support (CGI only) │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Если в описании я не привожу некоторые окна конфигураций, значит там настройки по умолчанию.
Создадим файл /usr/local/etc/apache22/Includes/phpmyadmin.conf
############################################## # # phpMyAdmin # ############################################## Alias /phpmyadmin /usr/local/www/phpMyAdmin DirectoryIndex index.php Options Indexes FollowSymLinks Order allow,deny Allow from all
Перезапустите httpd:
/usr/local/etc/rc.d/apache22 restart
Установка PureFTPD
#cd /usr/ports/ftp/pure-ftpd #make install clean
┌────────────────────────────────────────────────────────────────────┐ │ Options for pure-ftpd 1.0.27 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │[ ] LDAP Support for users in LDAP directories │ │ │ │[ ] MYSQL Support for users in MySQL database │ │ │ │[X] PAM Support for PAM authentication │ │ │ │[ ] PGSQL Support for users in PostgreSQL database │ │ │ │[ ] TLS Support for TLS (experimental) │ │ │ │[X] PRIVSEP Enable privilege separation │ │ │ │[X] PERUSERLIMITS Per-user concurrency limits │ │ │ │[X] THROTTLING Bandwidth throttling │ │ │ │[X] BANNER Show pure-ftpd welcome upon session start │ │ │ │[X] UPLOADSCRIPT Support uploadscript daemon │ │ │ │[X] UTF8 Support for charset conversion (expreimental)│ │ │ │[X] SENDFILE Support for the sendfile syscall │ │ │ │[X] LARGEFILE Support downloading files larger than 2Gb │ │ │ │[X] VIRTUALCHROOT Follow symlinks outside a chroot jail │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Далее отконфигурируем его, для этого надо отредактировать файл /usr/local/etc/pure-ftpd.conf
Вот пример моего файла:
ChrootEveryone yes BrokenClientsCompatibility yes MaxClientsNumber 5 Daemonize yes MaxClientsPerIP 5 VerboseLog no DisplayDotFiles yes AnonymousOnly no NoAnonymous yes SyslogFacility ftp DontResolve yes MaxIdleTime 15 PureDB /usr/local/etc/pureftpd.pdb LimitRecursion 2000 8 AnonymousCanCreateDirs no MaxLoad 4 PassivePortRange 50000 50400 AntiWarez no Umask 133:022 MinUID 100 AllowUserFXP no AllowAnonymousFXP no ProhibitDotFilesWrite no ProhibitDotFilesRead no AutoRename no AnonymousCantUpload no MaxDiskUsage 99 CustomerProof yes IPV4Only yes IPV6Only no ClientCharset cp1251
При запуске скрипта /usr/local/etc/rc.d/pure-ftpd start будет запущен скрипт /usr/local/sbin/pure-config.pl, он отпарсит конфигурационный файл и передаст строку параметров для pure-ftpd.
Для управлениями пользователями, в данной конфигурации я воспользовался механизмом Virtual Users, который есть в Pure FTPD. Суть его в следующем — в системе заводится системный пользователь, который ассоциируется с виртуальным пользователем. Можно ассоциировать несколько виртуальных пользователей с реальным аккаунтом. Для виртуальных пользователей назначается свой каталог, можно назначить ему так же квоты и пр. Управление виртуальными пользователями осуществляется с помощью программы pure-pw, параметры пользователей хранятся в /usr/local/etc/pureftpd.pdb.
У нас имеется два пользователя portal и portaltest, создадим для них виртуальных пользователей.
#pure-pw useradd portal -u portal -g portal -d /storage/portal/ #pure-pw useradd portaltest -u portaltest -g portaltest -d /storage/portaltest/
В /usr/local/etc/ появится файл pureftpd.passwd, его надо преобразовать в формат PureDB, после чего он будет называться pureftpd.pdb, для этого выполните:
#pure-pw mkdb /usr/local/etc/pureftpd.pdb -f /usr/local/etc/pureftpd.passwd
Если вы хотите изменить пароль пользователя, чтобы это автоматически внеслось в базу pureftpd.pdb, можно при вызове pure-pw добавлять ключ -m
Добавим в /etc/rc.conf строку
pureftpd_enable="YES"
Запустим FTP сервер:
#/usr/local/etc/rc.d/pure-ftpd start
Все должно запуститься.
Если у вас вышло сообщение плана:
# ./rc.d/pure-ftpd start Starting pureftpd. Running: /usr/local/sbin/pure-ftpd -g/var/run/pure-ftpd.pid -A -b -c5 -B -C5 -D -E -fftp -H -I15 -lpuredb:/usr/local/etc/pureftpd.pdb -L2000:8 -m4 -p50000:50400 -U133:022 -u100 -k99 -Z -4 -9cp1251 pure-ftpd: invalid option -- 9 421 Configuration error: Illegal user limit: p1251 ./rc.d/pure-ftpd: WARNING: failed to start pureftpd
То тогда это означает, что на этапе сборки в не выставили опции как в этом разделе выше. Скорее всего не хватает опции:
[X] UTF8 Support for charset conversion (expreimental)
Установка SAMBA
┌────────────────────────────────────────────────────────────────────┐ │ Options for samba34 3.4.5_1 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [ ] LDAP With LDAP support │ │ │ │ [ ] ADS With Active Directory support │ │ │ │ [ ] CUPS With CUPS printing support │ │ │ │ [X] WINBIND With WinBIND support │ │ │ │ [ ] SWAT With SWAT WebGUI │ │ │ │ [X] ACL_SUPPORT With ACL support │ │ │ │ [ ] AIO_SUPPORT With Asyncronous IO support │ │ │ │ [X] FAM_SUPPORT With File Alteration Monitor │ │ │ │ [X] SYSLOG With Syslog support │ │ │ │ [X] QUOTAS With Disk quota support │ │ │ │ [ ] UTMP With UTMP accounting support │ │ │ │ [ ] PAM_SMBPASS With PAM authentication vs passdb backends │ │ │ │ [ ] DNSUPDATE With dynamic DNS update(require ADS) │ │ │ │ [ ] AVAHI With Bonjour service discovery support │ │ │ │ [ ] EXP_MODULES With experimental modules │ │ │ │ [X] POPT With system-wide POPT library │ │ │ │ [ ] MAX_DEBUG With maximum debugging │ │ │ │ [ ] SMBTORTURE With smbtorture │ │ ├─└──────v(+)──────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Функции SAMBA были точно не определены, поэтому это будет минимум винс-сервер.
Вот файл /usr/local/etc/smb.conf
#======================= Global Settings ===================================== [global] workgroup = WORKGROUP netbios name = Portal server string = Portal security = user guest account = guest hosts allow = 192.168.0.0/255.255.255.0 load printers = no log file = /var/log/samba/log.%m max log size = 50 passdb backend = tdbsam interfaces = em0 local master = yes os level = 65 domain master = yes preferred master = yes domain logons = no wins support = yes wins proxy = yes dns proxy = yes read raw = yes write raw = yes oplocks = yes dead time = 15 getwd cache = yes max xmit = 65535 socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=65535 SO_RCVBUF=65535 SO_KEEPALIVE
Устновка DHCP
Установка:
#cd /usr/ports/net/isc-dhcp31-server/ #make install clean
Опции установки:
┌────────────────────────────────────────────────────────────────────┐ │ Options for isc-dhcp31-server 3.1.3 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │[X] DHCP_PARANOIA add -user, -group and -chroot options │ │ │ │[ ] DHCP_JAIL add -chroot and -jail options │ │ │ │[ ] DHCP_SOCKETS use sockets instead of /dev/bpf (jail-only) │ │ │ │[X] OPENSSL_BASE use the base system OpenSSL (required by TLS)│ │ │ │[ ] OPENSSL_PORT use OpenSSL from ports (required by TLS) │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
DHCP сервер настраивается при помощи редактирования конфигурационного файла /usr/local/etc/dhcpd.conf
У нас предполагается, что будет одна сеть. 192.168.0.0/24 — на интерфейсе fxp0
В итоге получается следущее:
default-lease-time 3600; max-lease-time 86400; ddns-update-style none; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.50 192.168.168.200; option routers 192.168.0.1; # option domain-name "loc"; option domain-name-servers 192.168.0.2; option netbios-name-servers 192.168.0.2; option netbios-node-type 8; }
Включим логгирование, для чего добавим /etc/syslog.conf строки:
!dhcpd *.* /var/log/dhcpd.log
Создадим файл для логов и перезапустим syslog:
#> /var/log/dhcpd.conf #chown dhcpd:dhcpd /var/log/dhcpd.conf #/etc/rc.d/syslog restart
Далее не забываем добавить в /etc/rc.conf строки:
dhcpd_enable="YES" dhcpd_ifaces="em0"
#/usr/local/etc/rc.d/isc-dhcpd start
Устновка DNS
BIND нужно обновить, т.к. в портах более новый.
# cd /usr/ports/dns/bind97 # make install clean
Опции установки, не забудьте поставить опцию REPLACE_BASE.
┌────────────────────────────────────────────────────────────────────┐ │ Options for bind97-base 9.7.0.1 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │[X] SSL Building without OpenSSL removes DNSSEC │ │ │ │[X] LINKS Create conf file symlinks in /usr │ │ │ │[X] XML Support for xml statistics output │ │ │ │[ ] IDN Add IDN support to dig, host, etc. │ │ │ │[X] REPLACE_BASE Replace base BIND with this version │ │ │ │[ ] LARGE_FILE 64-bit file support │ │ │ │[ ] SIGCHASE dig/host/nslookup will do DNSSEC validation │ │ │ │[ ] IPV6 IPv6 Support (autodetected by default) │ │ │ │[ ] DLZ_POSTGRESQL DLZ Postgres driver │ │ │ │[ ] DLZ_MYSQL DLZ MySQL driver (single-threaded BIND) │ │ │ │[ ] DLZ_BDB DLZ BDB driver │ │ │ │[ ] DLZ_LDAP DLZ LDAP driver │ │ │ │[ ] DLZ_FILESYSTEM DLZ filesystem driver │ │ │ │[ ] DLZ_STUB DLZ stub driver │ │ │ │[X] THREADS Compile with thread support │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Отредактируйте файл /etc/namedb/named.conf
options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; listen-on { 127.0.0.1; 192.168.0.2; }; 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 { 78.138.154.10; 78.138.135.10; }; allow-recursion { 127.0.0.1; 192.168.0.0/24; }; }; zone "." { type hint; file "named.root"; }; zone "localhost" { type master; file "master/localhost-forward.db"; }; zone "127.in-addr.arpa" { type master; file "master/localhost-reverse.db"; }; zone "portal.loc" { type master; file "master/portal.loc"; }; zone "portaltest.loc" { type master; file "master/portaltest.loc"; };
Создадим файлы описания наших зоны, обратную можно не описывать.
# > /etc/namedb/master/portal.loc # > /etc/namedb/master/portaltest.loc
Содержание portl.loc
$TTL 3600 @ IN SOA ns.portal.loc. admin.m2portal.ru ( 2010021701; Serial 3600; Refresh 900; Retry 360000; Expire 3600; Minimum ) IN NS ns.portal.loc. localhost IN A 127.0.0.1 portal.loc. IN A 192.168.0.2 ns IN A 192.168.0.2 jabber IN A 192.168.0.2 www IN A 192.168.0.2
Содержание portltest.loc
$TTL 3600 @ IN SOA ns.portaltest.loc. admin.m2portal.ru ( 2010021701; Serial 3600; Refresh 900; Retry 360000; Expire 3600; Minimum ) IN NS ns.portaltest.loc. localhost IN A 127.0.0.1 portaltest.loc. IN A 192.168.0.2 ns IN A 192.168.0.2 jabber IN A 192.168.0.2 www IN A 192.168.0.2
Установим права на файлы для пользователя и группу bind:
# chown bind:bind -r /etc/namedb/
В /etc/rc.conf добавим строки:
named_enable="YES" named_program="/usr/sbin/named" named_flags="-u bind -c /etc/namedb/named.conf"
В /etc/resolv.conf добавим строку с описанием что у нас есть локальный сервер, если были строки с серверами DNS провайдера, то их надо убрать:
domain loc nameserver 127.0.0.1
В /etc/syslog.conf добавьте строки:
!named *.* /var/log/named.log
Выполните:
#touch /var/log/named.log #chown bind:bind /var/log/named.log #/etc/rc.d/syslogd restart
Запустим BIND:
#/etc/rc.d/named start
OpenVPN
Конфигурирование сети и установка OpenVPN
Для начала определимся как мы будем стыковать реальную сеть и сеть OpenVPN. В данном случае это будет сделано с использованием интерфейса TAP, который посредством BRIDGE будет объединен с реальным интерфейсом em0. Причем надо учесть что с em0 DHCPd раздает IP адреса, диапазон у них 192.168.0.50-192.168.0.200.
Клиентам VPN я решил раздавать адреса средствами VPN, т.к. сли это делать средствами DHCPd, то клинеты будут получать новый гейтвей, что приведет к потере соединения с интернетом при установлении VPN соединения.
Внесем в /etc/rc.conf дополнения:
cloned_interfaces="tap0 bridge0" ifconfig_bridge0="addm em0 addm tap0 up" ifconfig_tap0="up"
Устновка стандартная из портов:
┌────────────────────────────────────────────────────────────────────┐ │ Options for openvpn 2.1.1 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [X] PW_SAVE Interactive passwords may be read from a file │ │ │ │ [ ] PKCS11 Use security/pkcs11-helper │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Параметр PW_SAVE — не обязателен, я его установил на всякий случай, вдруг пригодится в будущем.
Далее нужно создать директорию, где будут храниться настройки OpenVPN сервера и скопировать туда пакет управления ключами RSA, а также каталог для хранения ключей:
mkdir -p /usr/local/etc/openvpn cp -r /usr/local/share/doc/openvpn/easy-rsa /usr/local/etc/openvpn mkdir -p /usr/local/etc/openvpn/keys
Скопируем конфигурационный файл
cp /usr/local/share/doc/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/
Отредктированный файл под мои нужды принял вид:
port 1194 proto udp dev tap0 ca /usr/local/etc/openvpn/keys/server/ca.crt cert /usr/local/etc/openvpn/keys/server/server.crt key /usr/local/etc/openvpn/keys/server/server.key # This file should be kept secret dh /usr/local/etc/openvpn/keys/server/dh1024.pem server-bridge 192.168.0.2 255.255.255.0 192.168.0.201 192.168.0.250 push "dhcp-option DNS 192.168.0.2" push "dhcp-option DOMAIN local" push "dhcp-option WINS 192.168.0.2" client-to-client tls-server tls-auth /usr/local/etc/openvpn/keys/server/ta.key 0 tls-timeout 120 auth MD5 cipher BF-CBC # Blowfish (default) keepalive 10 120 comp-lzo max-clients 10 user nobody group nobody persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 #crl-verify /usr/local/etc/openvpn/keys/crl.pem
Так же выполним
#mkdir /var/log/openvpn
Добавим в /etc/rc.conf строки для запуска демона.
openvpn_enable="YES" openvpn_if="tap bridge" openvpn_configfile="/usr/local/etc/openvpn/server.conf"
Для запуска демона надо использовать:
#/usr/local/etc/rc.d/openvpn start
Генерация сертификатов для сервера
Создадим сертификаты. Учтите что у скриптов почемуто не стоит бит на запуск, хотя исходно в пакете скрипты с правом на запуск. Придется задавать его руками.
Экспорт переменных:
#cd /usr/local/etc/openvpn/2.0 #chmod 544 vars whichopensslcnf #. ./vars
Убиваем старые сертификаты:
#ln -s /usr/local/bin/bash /bin #chmod 544 clean-all #./clean-all
Генерируем корневой сертификат:
#chmod 544 build-ca pkitool #./build-ca Generating a 1024 bit RSA private key ...............................++++++ .......................................................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:RU State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]:Moscow Organization Name (eg, company) [Fort-Funston]:portal Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:portal.loc Name []: Email Address [[email protected]]:[email protected]
Создаем файлы index.txt и serial:
#cd /usr/local/etc/openvpn/2.0/keys #touch index.txt #echo "00" > serial
Генерируем сертификат для сервера:
#chmod 544 build-key-server #./build-key-server server Generating a 1024 bit RSA private key ........................++++++ ......++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:RU State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]:Moscow Organization Name (eg, company) [Fort-Funston]:portal Organizational Unit Name (eg, section) []:it Common Name (eg, your name or your server's hostname) [server]:portal.ru Name []: Email Address [[email protected]]:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/local/etc/openvpn/2.0/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'Moscow' organizationName :PRINTABLE:'portal' organizationalUnitName:PRINTABLE:'it' commonName :PRINTABLE:'portal.ru' emailAddress :IA5STRING:'[email protected]' Certificate is to be certified until May 4 19:58:04 2020 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Сгенерируем файл параметров Диффи [Diffie] и Хеллмэна [Hellman]. Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам.
#chmod 544 build-dh #./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ...........+..........................................+...................+.+.......................................+..........+......................................................+.............................+............................................................+..........+.+.............+..................+.................................................................................+..........................++*++*++*
Создаем ключ для tls-аутентификации:
openvpn --genkey --secret ta.key
Скопируйте ключи сертификатов в папку /usr/local/etc/openvpn/keys/server
#cd /usr/local/etc/openvpn/2.0/ #cp ta.key ../keys/server #cd keys #cp ca.crt ../../keys/server #cp server.crt ../../keys/server #cp server.key ../../keys/server #cp dh1024.pem ../../keys/server
Файл server.key надо хранить в тайне!
Настройка клиента и создание клиентских сертификатов
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом build-key, а не build-key-server. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name.
Генерируем сертификат для клиента:
#chmod 544 build-key #./build-key testclient testclient Generating a 1024 bit RSA private key .............++++++ ......................................................++++++ writing new private key to 'testclient.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:RU State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]:Moscow Organization Name (eg, company) [Fort-Funston]:portal Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) [testclient]:portal.loc Name []: Email Address [[email protected]]:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/local/etc/openvpn/2.0/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'Moscow' organizationName :PRINTABLE:'portal' organizationalUnitName:PRINTABLE:'IT' commonName :PRINTABLE:'portal.loc' emailAddress :IA5STRING:'[email protected]' Certificate is to be certified until May 2 11:08:53 2020 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Соотвественно для клиента должны достаться сертификаты:
ta.key dh1024.pem ca.crt client1.crt client1.key
Скачайте клиента под Windows, установите его, перезагрузитесь, т.к. будут поставлены драйвера виртуального устройства.
Конфигурационный файл для клиента у меня имеет вид:
dev tap proto udp remote myoffice.ru 1194 client resolv-retry infinite ca ../client1/ca.crt cert ../client1/client1.crt key ../client1/client1.key dh ../client1/dh1024.pem tls-client tls-auth ../client1/ta.key 1 auth MD5 cipher BF-CBC ns-cert-type server comp-lzo persist-key persist-tun verb 5
Из файла видно, что конфиг у меня лежит в
С:\Program Files\OpenVPN\cobfig
Конфигурационных файлов может быть несколько.
А сертификаты в
С:\Program Files\OpenVPN\client1