Создание локального портала предприятия (MySQL+APACHE+FTP+SAMBA+OpenVPN)

Начальная настройка

Не буду здесь описывать непосредственную процедуру установки ОС, она стандартная. Отмечу лишь что это 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

Сразу поставим

  1. /usr/ports/misc/mc
  2. /usr/ports/shells/bash
  3. /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

bsdwarrior.serveblog.net

Запись опубликована в рубрике *Unix,*Linux. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91