Проверка свободной и занятой памяти в системе:
$ free -h
После этого, если надо очистить, переход на root, обязательно.
И потом выполнить:
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a
Проверка свободной и занятой памяти в системе:
$ free -h
После этого, если надо очистить, переход на root, обязательно.
И потом выполнить:
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a
Задача сделать доступ виртуальным пользователям каждому в свою домашнюю директорию (т.е. chroot) по FTP, FTPs и sFTP.
# yum install proftpd proftpd-utils
Разрешаем сервис и запускаем его:
$ sudo systemctl enable proftpd $ sudo systemctl start proftpd
Firewall:
# iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 20:21 -j ACCEPT # iptables -A INPUT -p tcp -m state --state NEW --dport 40900:40999 -j ACCEPT
Открываем конфиг /etc/proftpd.conf добавляем туда строки:
ServerName "FTP SERVER"
ServerType standalone
DefaultServer on
Port 21
Umask 022
DefaultAddress 192.168.0.1 192.168.1.41
SocketBindTight on
RequireValidShell off
AuthUserFile /etc/proftpd.d/ftpd.passwd
UseIPv6 off
IdentLookups off
PassivePorts 40900 40999
MaxInstances 30
CommandBufferSize 512
User nobody
Group nobody
LangEngine on
LangPath /usr/share/locale.
UseEncoding UTF-8 WINDOWS-1251
DefaultRoot ~
AllowOverwrite on
# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
AllowAll
</Limit>
<Directory ~>
AllowOverwrite on
AllowStoreRestart on
<Limit Write>
AllowAll
</Limit>
<Limit READ>
AllowAll
</Limit>
</Directory>
<Global>
PassivePorts 40900 40999
AuthUserFile /etc/proftpd.d/ftpd.passwd
#RequireValidShell off
MaxLoginAttempts 6
LangEngine on
UseEncoding UTF-8 WINDOWS-1251
DefaultRoot ~ !admins
# Добавляем возможность перезаписи файлов
AllowOverwrite on
</Global>
# adduser imp -s /sbin/nologin -d /home/imp
Проверяем
# vipw imp:x:1002:1003::/home/imp:/sbin/nologin
Добавляем в группу
# usermod -aG www-data imp
Смотрим uid/gid
# id imp uid=1002(imp) gid=1003(imp) группы=1003(imp),1001(www-data)
Создаем пару Логин-Пароль
# mkdir /etc/proftpd.d/ # ftpasswd --passwd --file=/etc/proftpd.d/ftpd.passwd --name=imp --uid=1002 --gid=1001 --home=/home/imp --shell=/sbin/nologin
Эту же процедуру повторяем для всех пользователей.
Сменить пароль можно командой
# ftpasswd --passwd --file=/etc/proftpd.d/ftpd.passwd --name=imp --change-password
Проверяем и перечитываем конфигурацию
# proftpd -t # proftpd -s reload
# mkdir /etc/proftpd.d/ssl/ # openssl req -x509 -days 3650 -nodes -newkey rsa:1024 -keyout /etc/proftpd.d/ssl/proftpd.key -out /etc/proftpd.d/ssl/proftpd.crt Country Name (2 letter code) [XX]:UA State or Province Name (full name) []:Kiev Locality Name (eg, city) [Default City]:Kiev Organization Name (eg, company) [Default Company Ltd]:OfficeLTD Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:ftp.domen.com Email Address []:postmaster@domen.com # chmod 600 /etc/proftpd.d/ssl/proftpd.key
Добавляем в proftpd.conf
# nano /etc/proftpd.conf #LoadModule mod_tls.c. <VirtualHost 192.168.1.41> MasqueradeAddress ftp.domen.com TLSEngine on Port 1021 TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRequired auth #TLSOptions NoCertRequest TLSRSACertificateFile /etc/proftpd.d/ssl/proftpd.crt TLSRSACertificateKeyFile /etc/proftpd.d/ssl/proftpd.key TLSVerifyClient off </VirtualHost>
Разрешаем порт 1021 в iptables:
# iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 1021 -j ACCEPT # iptables -A INPUT -p tcp -m state --state NEW --dport 40900:40999 -j ACCEPT
Пробуем соединиться например клиентом FileZila с такими настройками:

Добавляем в /etc/proftpd.conf после секции <Global></Global>
LoadModule mod_sftp.c <VirtualHost 192.168.1.41> MasqueradeAddress ftp.domen.com SFTPEngine on Port 8022 #SFTPHostKey /etc/ssh/ssh_host_ed25519_key SFTPHostKey /etc/ssh/ssh_host_rsa_key SFTPHostKey /etc/ssh/ssh_host_ecdsa_key SFTPLog /var/log/proftpd/sftp.log SFTPCompression off </VirtualHost>
Разрешаем порт 8022 (или любой другой незанятый, желательно выше 1024)
# iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8022 -j ACCEPT
Проверяем и перечитаем конфигурацию
# proftpd -t # proftpd -s reload
Если такая ошибка:
proftpd[15477]: fatal: SFTPHostKey: unable to use '/etc/ssh/ssh_host_rsa_key' as host key, as it is group- or world-accessible on line 78 of '/etc/proftpd.conf'
Меняем права доступа
# chmod 600 /etc/ssh/ssh_host_rsa_key
И для ключа юзера выполнить (не уверен):
# ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
Пробуем соединиться:

Необходимо загрузить модуль ip_conntrack_ftp для iptables. В RedHat/CentOS достаточно в файл /etc/sysconfig/iptables-config добавить ссылку на загрузку модуля ip_conntrack_ftp:
# nano /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_conntrack_ftp"
Добавить:
#nano /etc/sysconfig/proftpd PROFTPD_OPTIONS="-DTLS"
nano iptables (у меня присутствует и NAT):
# Load needed modules
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
....
# FTP, sFTP, FTPs
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8022 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 1021 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 40900:40999 -j ACCEPT
....
Создаем файлы:
# touch /var/log/proftpd/{proftpd,xfer,access,auth}.log
Настраиваем логирование ftp:
# cat /etc/proftpd.conf .... SystemLog /var/log/proftpd/proftpd.log TransferLog /var/log/proftpd/xfer.log ExtendedLog /var/log/proftpd/access.log WRITE,READ write ExtendedLog /var/log/proftpd/auth.log AUTH auth DebugLevel 9 .....
Есть шикарный механизм отладки. Прежде чем запустить его, нужно остановить сервис:
# service proftpd stop
Режим DEBUGа (-d – выбор уровня логирования)
# proftpd -n -d 9 -c /etc/proftpd.conf
Добавим защиту в fail2ban. Создаем клетку и правим фильтр:
cat /etc/fail2ban/jail.d/proftpd.conf [proftpd] enabled = true filter = proftpd logpath = /var/log/proftpd/proftpd.log maxretry = 3 ignoreip = 127.0.0.1/8 192.168.0.0/24 #backend = polling port = ftp,ftp-data,ftps,ftps-data #logpath = %(proftpd_log)s #backend = %(proftpd_backend)s backend = gamin
cat /etc/fail2ban/filter.d/proftpd.conf [Definition] failregex = USER \S+: no such user found from \S* ?\[<HOST>\] to \S+\s*$ ignoreregex =
Перезапускаем и проверяем:
# service proftpd restart # service fail2ban restart # fail2ban-client status proftpd
Мы создали FTP сервер с возможностью подключения виртуальных пользователей по FTP, sFTP, FTPs, при этом каждый из пользователей не попадет выше своей директории.
https://www.dmosk.ru/instruktions.php?object=proftpd-centos7
https://sys-adm.in/os/nix/539-centod-install-proftpd.html
http://unixblog.org.ua/proftpd/install-proftpd-centos-7-auth-via-authuserfile/
Iptables и пассивный режим FTP
https://www.homeless.su/linux-tipstricks/iptables-i-passivnyj-rezhim-ftp/
Log
https://sys-adm.in/os/nix/496-loggining-proftpd-in-centos.html
ownCloud — это свободное и открытое веб-приложение для синхронизации данных, общего доступа к файлам и удалённого хранения документов в «облаке».
Доступны клиенты для синхронизации данных с ПК под управлением Windows, OS X или Linux и с мобильными устройствами на iOS и Android. Кроме того, сохранённые данные доступны через веб-интерфейс ownCloud в любом браузере.
Доступ к облаку будет как субдомену, cloud.domen.com поэтому не забыть прописать в DNS.
Ставим последнюю стабильную версию:
# rpm --import https://download.owncloud.org/download/repositories/stable/CentOS_7/repodata/repomd.xml.key # curl -L https://download.owncloud.org/download/repositories/stable/CentOS_7/ce:stable.repo -o /etc/yum.repos.d/ownCloud.repo # yum install owncloud
Доустановим модули (если их нет) для owncloud:
$ sudo yum install php56w-xml php56w-gd php56w-intl php56w-mbstring
Сменим права и владельца:
# chmod -R 755 /var/www/html/owncloud # chown -R nginx:www-data /var/www/html/owncloud # chown -R nginx:www-data /var/lib/php/session
Установим memcached:
# yum install memcached php56w-pecl-memcache php56w-pecl-memcached php56w-pecl-apcu
# nano /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1 -U 0"
Чтобы убедиться, что Memcached запущен и работает, введите следующее:
# memstat --servers="127.0.0.1" Server: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 ....
Устанавливаем Redis:
# yum install redis php56w-pecl-redis
Создаем конфиг для cloud пула:
# nano /etc/php-fpm.d/cloud.domen.com.conf [cloud.tst-amo.net.ua] listen = /var/run/php-fpm/cloud.domen.com.sock listen.mode = 0666 user = nginx group = www-data chdir = /var/www/html/owncloud # В зависимости от нагрузки меняем параметры pm = dynamic pm.max_children = 10 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 4 # Default Value: clean env env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
Создаем vhost cloud.domen.com:
# nano /etc/nginx/sites-available/owncloud
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php-fpm/cloud.domen.com.sock;
}
server {
listen 80;
server_name cloud.domen.com;
# For Lets Encrypt, this needs to be served via HTTP
location /.well-known/acme-challenge/ {
root /var/www/html/owncloud; # Specify here where the challenge file is placed
}
# enforce https
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl http2;
server_name cloud.domen.com www.cloud.domen.com;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
include /etc/nginx/conf.d/ssl.conf;
# Path to the root of your installation
root /var/www/html/owncloud/;
index index.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K; # Please see note 1
fastcgi_ignore_headers X-Accel-Buffering; # Please see note 2
fastcgi_busy_buffers_size 192K;
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location / {
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
return 404;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
return 404;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name; # necessary for owncloud to detect the contextroot https://github.com/owncloud/core/blob/v10.0.0/lib/private/AppFramework/Http/Request.php#L603
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
fastcgi_param front_controller_active true;
fastcgi_read_timeout 180; # increase default timeout e.g. for long running carddav/ caldav syncs with 1000+ entries
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off; #Available since NGINX 1.7.11
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri $uri/ =404;
index index.php;
}
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "max-age=15778463";
# Add headers to serve security related headers (It is intended to have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into this topic first.
#add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map)$ {
add_header Cache-Control "public, max-age=7200";
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}
# ln -s /etc/nginx/sites-available/owncloud /etc/nginx/sites-enabled/
Проверяем и перезапускаем сервисы:
# nginx -t # nginx -s reload # service php-fpm restart # service memcached restart
Заходим для дальнейшей настройки:
https://cloud.domen.com
После настройки приводим файл к такому виду:
# nano /var/www/html/owncloud/config/config.php
<?php
$CONFIG = array (
'updatechecker' => false,
'instanceid' => 'ocz4p432td1qkl',
'passwordsalt' => 'IM1w1S8PbkjlwsbB4NcyW7cfT/pemjr',
'secret' => '6Jxca0r8+zlklkml8Zi00TKfGY1gqeLxK9VeNOx',
'trusted_domains' =>
array (
0 => 'cloud.domen.com',
),
'datadirectory' => '/var/www/html/owncloud/data',
'overwrite.cli.url' => 'https://cloud.domen.com',
'dbtype' => 'mysql',
'version' => '10.0.9.5',
'dbname' => 'owncloud',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
'dbuser' => 'owncloud',
'dbpassword' => '9rtgu76yhgjkjghk8u',
'logtimezone' => 'Europe/Kiev',
'installed' => true,
'filelocking.enabled' => 'true',
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'memcached_servers' =>
array (
0 =>
array (
0 => 'localhost',
1 => 11211,
),
),
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
'timeout' => 0,
'password' => '',
'dbindex' => 0,
),
'mail_domain' => 'domen.com',
'mail_from_address' => 'user',
'mail_smtpmode' => 'smtp',
'mail_smtpauthtype' => 'LOGIN',
'mail_smtpauth' => 1,
'mail_smtphost' => 'mail.domen.com',
'mail_smtpport' => '25',
'mail_smtpsecure' => 'tls',
'mail_smtpname' => 'user',
'mail_smtppassword' => 'user_password',
);
Перенесем для удобства обслуживания /var/www/html/owncloud/data в /home/www/owncloud/data
# mv /var/www/html/owncloud/data /var/www/html/owncloud/data_old # cp -rp /var/www/html/owncloud/data_old /home/www/owncloud/data # ln -s /home/www/owncloud/data /var/www/html/owncloud/
Или так:
Перемещаем хранилище файлов на выделенную партицию для этих целей:
$ sudo mkdir /ftp/owncloud $ sudo chown nginx:www-data owncloud $ sudo service nginx stop $ sudo rsync -avz /var/www/html/owncloud/data /ftp/owncloud $ sudo nano /var/www/html/owncloud/config/config.php /* 'datadirectory' => '/var/www/html/owncloud/data', /* 'datadirectory' => '/ftp/owncloud/data', $ sudo service nginx start
Лог находится:
/var/www/html/owncloud/data/owncloud.log
Один из парсеров получения статистики работы почтового сервера – pflogsumm. В основу заложен анализ лога /var/log/maillog без привязки к конкретному программному обеспечению (это может Postfix, Sendmail, Exim и так далее) и дистрибутиву Linux/FreeBSD (CentOS, Debian, …). В результате мы получим данные по отправленным сообщениям, полученным, заблокированным, отброшенным.
# yum install postfix-perl-scripts
Просмотр статистики за вчерашний день:
# perl /usr/sbin/pflogsumm -d yesterday /var/log/maillog
Вставляем в cron с пересылкой на свою почту
#crontab -e
59 23 * * * /usr/sbin/pflogsumm /var/log/maillog | mail -s 'Statistics from Postfix f11.uni.ka' postmaster@uni.ka
Скрипт для сброса статистики в файл:
mkdir /var/log/postfix
cat /usr/local/etc/postfix/poststat.sh #!/bin/sh /usr/sbin/pflogsumm -e /var/log/maillog > /var/log/postfix/`date +%Y-%m-%d`-stat_postfix.txt chown 0755 poststat.sh
crontab -e 59 23 * * * /etc/postfix/poststat.sh > /dev/null
Настройка системы:
# cat /etc/hosts 127.0.0.1 localhost localhost.tst-amo.net.ua localhost4 localhost4.tst-amo.net.ua ::1 localhost localhost.tst-amo.net.ua localhost6 localhost6.tst-amo.net.ua 192.168.1.41 mail mail.tst-amo.net.ua 192.168.1.41 mail.tst-amo.net.ua.
# cat /etc/aliases # Basic system aliases -- these MUST be present. mailer-daemon: postmaster postmaster: root root: pm@tst-amo.net.ua # учетка на которую будет пересылаться почта root # General redirections for pseudo accounts. bin: root daemon: root
# hostname tst.tst-amo.net.ua
Очень желателен PTR (прописывается у провайдера по заявке, у моего нельзя)
Например:
# nslookup 222.444.22.63 Server: 192.168.1.41 Address: 192.168.1.41#53 Non-authoritative answer: 222.444.22.63.in-addr.arpa name = mail.domen.ua.
Предполагается, что уже установлены и настроены MySQL, nginx.
Создаем базу данных:
# mysql -uroot -p MariaDB [(none)]> CREATE DATABASE postfix; Query OK, 1 row affected (0.03 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'mypassword'; Query OK, 0 rows affected (0.10 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> quit
# wget -q -O - "https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz" | tar -xzf - -C /home/www/ # yum install php56w-imap # chown -R nginx:www-data /home/www/postfixadmin
– где nginx:www-data – пользователь под которым запускается nginx и группа
После обновления сменился владелец /var/lib/php/session и выдало ошибку в браузере
Invalid token
в логах ругань на permission, так как, владельцем стал root:apache:
2018/08/18 08:55:06 [error] 1786#0: *9149 FastCGI sent in stderr: "PHP message: PHP Warning: session_start(): open(/var/lib/php/session/sess_7p6c8kjkosj36d0lehjjr4eeg 6, O_RDWR) failed: Permission denied (13) in /home/www/postfixadmin/common.php on line 26 PHP message: PHP Warning: session_start(): open(/var/lib/php/session/sess_7p6c8kjkosj36d0lehjjr4eeg6, O_RDWR) failed: Permission denied (13) in /home/www/postfixadmin /public/login.php on line 84" while reading response header from upstream, client: 192.168.1.1, server: tst-amo.net.ua, request: "GET /postfixadmin/public/login.php HT TP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "tst-amo.net.ua" 2018/08/18 08:55:06 [error] 1786#0: *9149 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: open(/var/lib/php/session/sess_7p6c8kjkosj36d0lehjjr4eeg6, O_RDW R) failed: Permission denied (13) in Unknown on line 0
Лечим:
# chown -R nginx:www-data /var/lib/php/session
У меня выдавало ошибку на отсутствие директории templates_c:
# mkdir postfixadmin/templates_c # chown nginx:www-data templates_c
Заходить в сетап:
https://tst-amo.net.ua/postfixadmin/public/setup.php
добавить
$CONF['setup_password'] = '422962da717c2abb5408efe.......b2fa22dd9f7d1bc01835c9e59a';
После настройки заходим и создаем домен, ящики и т.д.
https://tst-amo.net.ua/postfixadmin/public/login.php
Создаем сначала групу vmail с идентификатором 1024:
# groupadd -g 1024 vmail
а потом добавляем туда пользователя:
# useradd -d /home/vmail -g 1024 -u 1024 vmail -m
Добавить в /etc/postfix/main.cf
........ virtual_mailbox_base = /home/vmail virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 1024 virtual_uid_maps = static:1024 virtual_gid_maps = static:1024 # Транспорт virtual_transport = dovecot dovecot_destination_recipient_limit = 1
…..
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/blacklist-IP
permit_mynetworks
permit_sasl_authenticated
check_recipient_access hash:/etc/postfix/recipient-list
reject_non_fqdn_recipient
reject_unauth_destination
reject_unknown_recipient_domain
reject_unverified_recipient
permit
Здесь правило reject_unauth_destination – должно запрещать открытый релей через ваш сервер
Содержимое служебных файлов:
[root@tst postfix]# cat mysql_virtual_alias_maps.cf user = postfix password = mypassword hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
[root@tst postfix]# cat mysql_virtual_domains_maps.cf user = postfix password = mypassword hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%u'
[root@tst postfix]# cat mysql_virtual_mailbox_maps.cf user = postfix password = mypassword hosts = localhost dbname = postfix query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
[root@tst postfix]# cat access_sender tst-amo.net.ua OnlyFromMyUsers
[root@tst postfix]# cat blacklist #spam@net.ua REJECT #info@uni.ka REJECT Your e-mail was banned! #acc@tst1.pp.ua REJECT Your e-mail was banned! #s@i.ua REJECT SPAM!!! /.*@tst-amo\.net\.ua/i REJECT You are not imp.kiev.ua, this is my name!!! advocatov.com REJECT SPAM!!! bilabonges.eu REJECT SPAM!!! cloudlite.eu REJECT SPAM!!! deals@save.spirit-airlines.com REJECT SPAM!!! domrike.eu REJECT SPAM!!! saffiano-double.ru REJECT SPAM!!! whilsacom.eu REJECT SPAM!!!
[root@tst postfix]# cat blacklist-IP 1.52.38.29 REJECT Your IP is spam 2.90.145.125 REJECT Your IP is spam 5.235.7.171 REJECT Your IP is spam 37.104.210.18 REJECT Your IP is spam 37.106.204.58 REJECT Your IP is spam 42.113.159.236 REJECT Your IP is spam 42.116.220.21 REJECT Your IP is spam 43.250.80.131 REJECT Your IP is spam 45.244.118.151 REJECT Your IP is spam
[root@tst postfix]# cat header_checks
# Для спама
/^X-Spam-Level:.*\*{12,}.*/ REDIRECT spam@uni.ka
# Для вложений
/^(.*)name=\"(.*)\.(exe|bat|cmd|mp3)\"$/ REJECT Attachment type not allowed. File "$2" has unacceptable extension: "$3"
[root@tst postfix]# cat hello_access mail.tst-amo.net.ua REJECT Don't use my server name!!!
[root@tst postfix]# cat recipient-list # For these users to receive all /^postmaster\@/ OK /^hostmaster\@/ OK /^abuse\@/ OK /^webmaster\@/ OK ## Users #/^mfint\@/ OK #/^metall\@/ OK
[root@tst postfix]# cat whitelist #--------------- Nuzhno_IMP ----------------- .nas.gov OK @nas.gov OK .domen.kiev.ua OK @domen.kiev.ua OK #--------------- Cheff other @mpiyt-shalle.4mpg.de OK .mpiyt-shalle.4mpg.de OK
This will install amavisd-new and a bunch of dependencies, and clamav + freshclam. It will also install SpamAssassin by default.
# yum install amavisd-new clamav clamav-update freshclam
Edit amavisd.conf.
# vim /etc/amavisd/amavisd.conf
Change the following lines like this…
$mydomain = ‘domain.com’; # a convenient default for other settings $myhostname = 'mail.domain.com’; # must be a fully-qualified domain name and same as reverse DNS lookup
Make sure everything is set in postfix’s configuration file master.cf
# vim /etc/postfix/master.cf
On top of master.cf, you should have something like…
smtp inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o receive_override_options=no_address_mappings -o content_filter=smtp-amavis:127.0.0.1:10024 …and on bottom, you should have something like…
# # spam/virus section # smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - y - - smtpd -o content_filter= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o receive_override_options=no_header_body_checks -o smtpd_helo_required=no -o smtpd_client_restrictions= -o smtpd_restriction_classes= -o disable_vrfy_command=no -o strict_rfc821_envelopes=yes
Stop the postfix daemon.
# service postfix stop
Start Spamassassin, Amavisd-new and ClamAV daemons.
Проверка синтаксиса Spamassassin
# spamassassin --lint
Обновляем правила Spamassassin:
# sa-update --nogpg
Обновляем базы Spamassassin
# service spamassassin start # service amavisd start # service postfix start
# yum install postgrey
smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/blacklist-IP permit_mynetworks permit_sasl_authenticated check_recipient_access hash:/etc/postfix/recipient-list reject_non_fqdn_recipient reject_unauth_destination ## POSTGREY #check_policy_service unix:/var/spool/postfix/postgrey/socket check_policy_service inet:127.0.0.1:10023 ## reject_unknown_recipient_domain reject_unverified_recipient permit
строчка “check_policy_service unix:/var/spool/postfix/postgrey/socket,” или “check_policy_service inet:127.0.0.1:10023” должна быть обязательно прописана после строчки параметра “reject_unauth_destination”, как на примере выше.
По ману запускать нужно так:
# man postgrey # postgrey --inet=10023 -d # systemctl start postgrey && systemctl enable postgrey # systemctl reload postfix
# yum install -y opendkim
Генерируем ключ:
# opendkim-genkey -D /etc/opendkim/ --domain tst-amo.net.ua --selector relay # cd /etc/opendkim # chown :opendkim /etc/opendkim/* # chmod g+r /etc/opendkim/*
# cp opendkim.conf opendkim.conf_orig # cat opendkim.conf_orig | grep "^[^#]" > opendkim.conf
Правим opendkim.conf до состояния:
[root@tst etc]# cat opendkim.conf AutoRestart Yes AutoRestartRate 10/1h Umask 002 Syslog yes SyslogSuccess Yes LogWhy Yes Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Mode sv PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 UserID opendkim:opendkim Socket inet:12301@localhost
Создаем служебные файлы:
# touch /etc/opendkim/TrustedHosts # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable
Их содержимое:
# cat /etc/opendkim/KeyTable relay._domainkey.tst-amo.net.ua tst-amo.net.ua:relay:/etc/opendkim/relay.private
# cat /etc/opendkim/SigningTable *@tst-amo.net.ua relay._domainkey.tst-amo.net.ua
# cat /etc/opendkim/TrustedHosts 127.0.0.1 localhost *.tst-amo.net.ua #host.example.com #192.168.1.0/24
Запускаем сервис:
# systemctl start opendkim.service # systemctl enable opendkim.service # systemctl status opendkim.service
Добавляем в main.cf для Postfix
# nano /etc/postfix/main.cf # DKIM milter_protocol = 2 milter_default_action = accept smtpd_milters = inet:127.0.0.1:12301 non_smtpd_milters = $smtpd_milters # service postfix reload
для BIND
# nano /var/named/chroot/var/named/tst-amo.net.ua.zone relay._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA......k02pIg+TwIDAQAB" )
# service named-chroot reload # service named-chroot status
Проверяем.
# yum install dovecot dovecot-mysql dovecot-pigeonhole
# nano /etc/dovecot/conf.d/10-mail.conf mail_plugins = $mail_plugins quota
# nano /etc/dovecot/conf.d/20-imap.conf
protocol imap {
mail_plugins = $mail_plugins imap_quota
}
# nano /etc/dovecot/conf.d/10-master.conf
service dict {
unix_listener dict {
mode = 0660
user = vmail
group = vmail
}
}
# nano /etc/dovecot/conf.d/90-quota.conf
plugin {
quota = dict:User quota::proxy::quota
}
# nano /etc/dovecot/dovecot.conf
dict {
quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
# nano /etc/dovecot/dovecot-dict-sql.conf.ext
connect = host=localhost dbname=postfix user=postfix password=mypassword
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
map {
pattern = shared/expire/$user/$mailbox
table = expires
value_field = expire_stamp
fields {
username = $user
mailbox = $mailbox
}
}
# nano /etc/dovecot/dovecot-sql.conf.ext
# Database driver: mysql, pgsql, sqlite
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=mypassword
default_pass_scheme = MD5-CRYPT
#
password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
#
user_query = SELECT CONCAT('/var/vmail/', `maildir`) AS \
`home`, 1024 AS `uid`, 1024 AS `gid`, concat('dict:storage=', \
CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') \
AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
# Query to get a list of all usernames.
iterate_query = SELECT username AS user FROM mailbox
# systemctl restart dovecot
Просмотр квоты пользователя(также можно просмотреть в WEB-интерфейсе PostfixAdmin).
# doveadm quota get -u username@example.com
Включение оповещений при превышении квоты
# nano /etc/dovecot/conf.d/90-quota.conf
plugin {
# LDA/LMTP allows saving the last mail to bring user from under quota to
# over quota, if the quota doesn't grow too high. Default is to allow as
# long as quota will stay under 10% above the limit. Also allowed e.g. 10M.
quota_rule = *:storage=500M
quota_rule2 = Trash:storage=+100M
quota_rule3 = Junk:ignore
quota_grace = 10%%
}
dict {
sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
##
## Quota backends
##
# Multiple backends are supported:
# dirsize: Find and sum all the files found from mail directory.
# Extremely SLOW with Maildir. It'll eat your CPU and disk I/O.
# dict: Keep quota stored in dictionary (eg. SQL)
# maildir: Maildir++ quota
# fs: Read-only support for filesystem quota
plugin {
#quota = dirsize:User quota
quota = maildir:User quota::proxy::quota
#quota = dict:User quota::proxy::quota
#quota = fs:User quota
}
# Multiple quota roots are also possible, for example this gives each user
# their own 100MB quota and one shared 1GB quota within the domain:
plugin {
#quota = dict:user::proxy::quota
#quota2 = dict:domain:%d:proxy::quota_domain
#quota_rule = *:storage=102400
#quota2_rule = *:storage=1048576
}
# nano /etc/dovecot/quota-warning.sh #!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster@tst-amo.net.ua Subject: quota warning Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit To: $USER Внимание! Ваш ящик заполнен на $PERCENT%. Attention! Your mailbox is now $PERCENT% full. EOF
To prevent the sending of errors and output, add any one of the following at the end of the line for each cron job to redirect output to /dev/null.
>/dev/null 2>&1
OR
> /dev/null
OR
> /dev/null 2>&1 || true
Edit/Open your cron jobs, enter:
$ crontab -e
Append string >/dev/null 2>&1 to stop mail alert:
0 1 5 10 * /path/to/script.sh >/dev/null 2>&1
OR
0 1 5 10 * /path/to/script.sh > /dev/null
OR
0 * * * * /path/to/command arg1 > /dev/null 2>&1 || true
Save and close the file.
You can set MAILTO=”” variable at the start of your crontab file. This will also disable email alert. Edit/Open your cron jobs:
$ crontab -e
At the top of the file, enter:
MAILTO=""
Save and close the file.
https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/
Обычно, что бы не возиться с реестром, использую эти два варианта.
Ctrl Alt Del –> Диспетчер задач –> Новая Задача –> explorer.exe –> Выполнить
Загрузиться меню пуск и Ваш рабочий стол. Теперь можно работать – до перезагрузки.
Скачайте программу AVZ и запустите ее. Нажмите «Файл» – «Восстановление системы». Выберите «5. Восстановление настроек рабочего стола», «9. Удаление отладчиков системных процессов», «16. Восстановление ключа запуска Explorer» и нажмите «Выполнить отмеченные операции». Перезагрузите компьютер.
В любом из вариантов очень желательна проверка на вирусы.
Пакет smartmontools состоит из двух утилит (smartctl и smartd), которые контролируют и следят за системными накопителями используя самопроверку, анализ и систему технологического отчёта (S.M.A.R.T.), встроенную в большинство современных ATA и SCSI жёстких дисков. Этот пакет основан на коде пакета smartsuite и включает поддержку ATA/ATAPI-5 дисков.
$ sudo yum install smartmontools $ sudo nano /etc/smartmontools/smartd.conf #DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q /dev/sda -a -I 194 -W 4,45,55 -R 5 -H -l error -l selftest -m admin@example.com -o on -S on -s (S/../.././02|L/../../6/03)
[root@ring]# systemctl start smartd [root@ring]# systemctl enable smartd
Настраиваем логирование в отдельный файл:
# vim /etc/rsyslog.d/smartd.conf
if ( $programname startswith "smartd" ) then {
action(type="omfile" file="/var/log/smartd.log")
stop
}
Перезагружаем сервисы:
# systemctl restart {rsyslog,smartd}
# systemctl status {rsyslog,smartd}
Подробнее:
arpwatch — демон, который отслеживает соответствие между IP и MAC-адресами, и при обнаружении аномалий, сообщающий об этом в Syslog. Используется как один из инструментов для борьбы с ARP-spoofing’ом.
Демон анализирует ARP-ответы на сетевом интерфейсе, к которому он привязан, и запоминает соответствие IP-адресов и MAC-адресов. Как только он видит, что соответствие нарушено, или обнаруживает появление новых адресов в сети, он сообщает об этом в системный журнал (syslog).
# yum install arpwatch
Конфигурируем:
$ cat /etc/sysconfig/arpwatch OPTIONS="-i enp5s0 -f arp.dat -u arpwatch -e admin@example.com -s 'root (Arpwatch)'"
$ sudo systemctl start arpwatch $ sudo systemctl enable arpwatch
/var/lib/arpwatch - default directory
arp.dat - ethernet/ip address database
ethercodes.dat - vendor ethernet block list
По умолчанию, демон пишет логи в /var/log/messages, что бы не мусорить в этот файл перенаправим в отдельный лог. Для этого создаем файл логов и файл конфигурации для rsyslog
# touch /var/log/arpwatch.log
# vi /etc/rsyslog.d/arpwatch.conf
if ( $programname startswith "arpwatch" ) then {
action(type="omfile" file="/var/log/arpwatch.log")
stop
}
Проверяем и перезапускаем:
# rsyslogd -N 1 # systemctl restart rsyslog
Так как в первых трех октетах МАС-адреса кодируется производитель оборудования, нам желательно иметь обновленную локальную базу МАС/Производитель. Обновляем базу MAC адресов:
# vi arpwatch_update_mac.sh #!/bin/bash # update_mac_addresses.sh # This script downloads the currect mac address data from the IEEE and parses it for nmap and arpwatch. # nmap-mac-prefixes is for nmap. # ethercodes.dat is arpwatch. # Download the current data wget http://standards-oui.ieee.org/oui/oui.txt # Divide the data into Manufacturer and Address files cat oui.txt | grep '(base 16)' | cut -f3 > mac.manufacturer cat oui.txt | grep '(base 16)' | cut -f1 -d' ' > mac.address # Paste them back together for nmap data paste mac.address mac.manufacturer > nmap-mac-prefixes # Parse the address data for arpwatch cat mac.address | perl -pe 's/^(([^0].)|0(.))(([^0].)|0(.))(([^0].)|0(.))/\2\3:\5\6:\8\9/' > tmp.address cat tmp.address | tr [A-Z] [a-z] > mac.address # Paste the parsed data into the arpwatch file paste mac.address mac.manufacturer > /var/lib/arpwatch/ethercodes.dat # Clean up intermediary files rm tmp.address rm mac.address rm mac.manufacturer rm oui.txt
Делаем файл исполняемым и прописываем в cron для ежемесячного обновления:
# chmod +x arpwatch_update_mac.sh
# crontab -e @monthly /home/svm/bin/arpwatch_update_mac.sh
ARPWatch рассылает четыре вида сообщений.
ARPWatch также пишет события в messages/syslog.
В syslog могут писаться следующие типы уведомлений:
Если в логах появляются сообщения вида
Aug 2 06:52:09 ring arpwatch: bogon 10.90.90.91 1c:af:f7:e1:b6:71 Aug 2 06:52:10 ring arpwatch: bogon 10.90.90.91 1c:af:f7:e1:b6:71 Aug 2 06:52:35 ring arpwatch: bogon 10.90.90.91 1c:af:f7:e1:b6:71 Aug 2 06:52:36 ring arpwatch: bogon 10.90.90.91 1c:af:f7:e1:b6:71 Aug 2 06:52:37 ring arpwatch: bogon 10.90.90.91 1c:af:f7:e1:b6:71
где 10.90.90.91 – IP из другой сети, отличной от той, что сконфигурирована на слушающимся интерфейсе (например, для доступа к комуникатору), то можно добавить эту сеть в настройках /etc/sysconfig/arpwatch, что бы не мусорило в логах и перегрузить сервис:
-n 10.90.90.0/24
Источники:
OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек.
# yum -y install epel-release # yum -y install openvpn
Доустановим утилиты:
# yum install wget unzip zip
устанавливаем утилиту Easy-RSA:
# cd /etc/openvpn/keys # wget https://github.com/OpenVPN/easy-rsa/archive/master.zip # unzip master.zip # cd /etc/openvpn/keys/easy-rsa-master/easyrsa3
Создаем структуру публичных PKI ключей:
# mv vars.example vars # ./easyrsa init-pki
Создайте удостоверяющий центр CA:
# ./easyrsa build-ca
Не забудьте указанный пароль. Его нужно будет вводить каждый раз при создании нового сертификата openvpn.
Мы получили 2 ключа:
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt
Первый ключ секретный, его нужно оставить на сервере и никому не отдавать. Второй — открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.
Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:
# ./easyrsa gen-req server nopass
Подписываем запрос на получение сертификата у нашего CA:
# ./easyrsa sign-req server server
В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный удостоверяющим центром сертификат для сервера — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt
Нам еще пригодится ключ Диффи-Хелмана, генерируем его:
# ./easyrsa gen-dh
По завершению работы скрипта получаем файл dh сертификата — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem.
Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи:
# cp pki/ca.crt /etc/openvpn/ca.crt # cp pki/dh.pem /etc/openvpn/dh.pem # cp pki/issued/server.crt /etc/openvpn/server.crt # cp pki/private/server.key /etc/openvpn/server.key
Создадим ключ для клиента openvpn (nopass – без пароля, но лучше с паролем):
# ./easyrsa gen-req user1 nopass # ./easyrsa sign-req client user1
Процедура аналогична созданию сертификата для сервера. Так же вводим пароль (pass-фразу сервера), отвечаем yes. В результате получаем подписанный сертификат клиента:
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/user1.crt /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/user1.key
Для создания ключа HMAC используйте команду openvpn с опциями –genkey и –secret:
# cd /etc/openvpn # openvpn --genkey --secret ta.key
Клиенту, которым у нас является шлюз филиала нужно будет передать следующий набор файлов — user1.crt, user1.key, ca.crt, ta.key.
Теперь приступаем к настройке. Создаем файл конфигурации openvpn:
# nano /etc/openvpn/server.conf port 1194 # я предпочитаю использовать нестандартные порты для работы proto udp # протокол может быт и tcp, если есть необходимость в этом dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh.pem # Проверка, не отозван ли сертификат клиента crl-verify /etc/openvpn/crl.pem # Включаем TLS tls-auth /etc/openvpn/ta.key 0 tls-server tls-timeout 120 auth SHA512 cipher AES-256-CBC #auth MD5 #cipher BF-CBC server 10.8.0.0 255.255.255.0 # подсеть для туннеля, может быть любой route 10.8.0.0 255.255.255.252 # указываем подсеть, к которой будем обращаться через vpn rab push "route 192.168.113.0 255.255.255.0" # передаем маршрут клиентам # Для доступа клиентов через удаленный шлюз в Internet # Если не нужен - закоментировать push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 10.8.0.1" ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip client-to-client # позволяет клиентам openvpn подключаться друг к другу client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов keepalive 10 120 # сжатие трафика comp-lzo persist-key persist-tun max-clients 100 user nobody group nobody status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 4 # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose
Создаем необходимые директории:
# mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn
Создаем файл конфигурации клиента в папке, указанной в параметре client-config-dir :
# nano /etc/openvpn/ccd/user1 iroute 192.168.113.0 255.255.255.0
Здесь user1 — имя сертификата пользователя.
Если вам нужно объединить две разные локальные сети в одну условно общую, но с разной адресацией, то вам нужен tun. То есть в нашем случае мы объединяем две сети 192.168.1.0/24 и 192.168.60.0/24 для взаимного совместного доступа.
Если же у вас стоит задача объединить 2 удаленные сети в единое адресное пространство, например сделать и в офисе и в филиале единую сеть 192.168.10.0/24, то тогда бы мы использовали tap интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети. В таком состоянии openvpn работает в режиме моста.
Запускаем сервер:
# systemctl start openvpn@server # systemctl enable openvpn@server
# netstat -tulnp | grep 1194 udp 0 0 0.0.0.0:1194 0.0.0.0:* 17719/openvpn
# ip a tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
Статический маршрут:
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 22.44.19.162 0.0.0.0 UG 0 0 0 enp4s0
10.8.0.0 10.8.0.2 255.255.255.252 UG 0 0 0 tun0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.113.0 0.0.0.0 255.255.255.0 U 0 0 0 enp5s0
22.44.19.160 0.0.0.0 255.255.255.240 U 0 0 0 enp4s0
Траффик из подсети 10.8.0.0/24 будет маршрутизироваться в тоннель.
Создадим ключ для клиента openvpn:
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3 # ./easyrsa gen-req user1 nopass # ./easyrsa sign-req client user1
Опять можно отметить, что могут быть ситуации, когда лучше ключ клиента защищать паролем, хотя бы несложным. Тогда всякий раз при подключении к VPN необходимо будет ввести пароль. Это может быть удобным, если вы не хотите, например, чтобы ваш ребенок случайно подключился к вашей рабочей сети и натворил делов. Для этого просто не надо указывать “nopass” в конце команды выше.
В итоге мы получим два файла:
Публичный сертификат клиента:
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/user1.crt
Приватный ключ клиента:
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/user1.key
Клиенту вместе с конфигом (см ниже) нужно будет передать копии следующих файлов:
user1.crt; user1.key; ca.crt; ta.key;
которые все используются в клиентском конфиге. Никакие иные файлы, кроме тех, которые указаны в конфиге клиента, передавать клиенту не надо!
Дальше создаем файл конфигурации для этого клиента:
# cd /etc/openvpn/ccd # nano user1 push "route 192.168.113.0 255.255.255.0" #push "route 192.168.50.0 255.255.255.0"
Этими параметрами мы передаем клиенту маршруты к обоим сетям офисов. Если нужно подключать клиента только к какой-то одной сети, то оставляйте одну сеть, вторую удаляйте.
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # OPENVPN iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i enp5s0 -o tun+ -j ACCEPT iptables -A FORWARD -i enp5s0 -o enp4s0 -j ACCEPT iptables -A FORWARD -i enp5s0 -o enp4s0 -j ACCEPT ..... # NAT iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp4s0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.113.0/24 -o enp4s0 -j MASQUERADE .... # OPENVPN iptables -A INPUT -i enp4s0 -p udp --dport 1194 -j ACCEPT .... iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
Теперь нужно скачать openvpn client под нашу версию windows, запускать установщик нужно обязательно с правами администратора.
cat client.ovpn
dev tun proto udp remote 194.44.219.161 port 1194 client resolv-retry infinite ca ca.crt cert user1.crt key user1.key remote-cert-eku "TLS Web Server Authentication" remote-cert-tls server tls-client tls-auth ta.key 1 auth SHA512 cipher AES-256-CBC comp-lzo persist-key persist-tun mute-replay-warnings verb 3
Сохраняем конфигурацию под именем client.ovpn в папку C:\Program Files\OpenVPN\config, туда же копируем файлы сертификатов и запускаем OpenVPN GUI от имени администратора!
Правой мышкой в трее – подключиться. Теперь при подключении нам доступны ресурсы сети 192.168.113.0/24 и интернет. При заходе на страничку, например, 2ip.ru – сайт покажет IP рабочего сервера.
Если сотрудник уволился, необходимо заблокировать его доступ в сеть VPN компании. Специально для этой цели в OpenVPN предусмотрен список отзыва сертификатов CRL. Создайте его такой командой:
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3 # ./easyrsa gen-crl
У вас будет запрошен пароль доступа к приватному ключу ca.key удостоверяющего центра. Список отзыва сертификатов будет создан в файле /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem.
Если нужно заблокировать выданный ранее сертификат, воспользуйтесь следующей командой:
# ./easyrsa revoke user1
Здесь мы отозвали сертификат для клиента user1. Далее нужно скопировать новый файл CRL на сервер OpenVPN и перезапустить демон OpenVPN.
По умолчанию, продолжительность жизни списка отзывов сертификатов crl.pem равна 180 дням, за это отвечает переменная:
# cat /etc/openvpn/keys/easy-rsa-master/easyrsa3/vars
#set_var EASYRSA_CRL_DAYS 180
Поэтому, по истечению срока указанного в vars, нужно будет обновить список (понадобится парольная фраза для доступа к приватному ключу ca.key удостоверяющего центра):
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3/ # ./easyrsa gen-crl # cp ./pki/crl.pem /etc/openvpn/crl.pem # systemctl restart openvpn@server
Выбираем VPN Connection и заполняем настройки:




Файлы для сервера OpenVPN.
| Файл | Описание |
| dh.pem | Файл Диффи-Хелмана для защиты трафика от расшифровки |
| ca.crt | Сертификат удостоверяющего центра CA |
| server.crt | Сертификат сервера OpenVPN |
| server.key | Приватный ключ сервера OpenVPN, секретный |
| crl.pem | Список отзыва сертификатов CRL |
| ta.key | Ключ HMAC для дополнительной защиты от DoS-атак и флуда |
Настроить openvpn на CentOS 7
https://bozza.ru/art-269.html
https://1cloud.ru/help/linux/openvpnserver_debian7_ubuntu12
Руководство по установке и настройке OpenVPN