-
- htop
- mc
apt-get update
useradd --no-create-home admin
apt-get --yes --force-yes --ignore-missing install htop mc build-essential libpcre3 libpcre3-dev openssl libssl-dev
-
- nginx - прокси сервер
- php-fpm - php интерпритатор
- certbot - инструментарий для ssl
- maria-db - СУБД
- node.js ( + общие модули)
-
- dovecot - IMAP сервер
- exim4 - MTA - агент доставки почты
- rainloop -веб оболочка для доступа к почтовым ящикам
-
- nextcloud - облачное хранилище
-
- OpenVPN - бесплатный VPN сервер
- Squid - прокси сервер
- iptables - сетевые настройки
-
- fail2ban - anti DDoS
-
apt-cache policy <name>
- проверка текущей версии программы в репозиториях, иногда в официальных репозиториях существуют актуальные версии программ. -
tar -pczf sites.tar.gz *
- упаковать каталог в архив -
tar -xvzf sites.tar.gz
- распаковать каталог -
netstat -tulpan
- просмотр прослушиваемых портов
Можно устаовить из репозитория используя apt-get install nginx
, но мы произведем сборку последней стабильной версии
- Загрузим последнюю версию с сайта разработчика
cd /opt
latestVer=$(curl -s 'http://nginx.org/en/download.html' |
sed 's/</\'$'\n''</g' | sed -n '/>Mainline version$/,$ p' |
egrep -m1 -o '/download/nginx-.+\.tar\.gz')
curl "http://nginx.org${latestVer}" > nginx-latest.tar.gz
tar -xzf nginx-latest.tar.gz
rm -r nginx-latest.tar.gz
useradd --no-create-home nginx
cd $(find -maxdepth 1 -type d -name '*nginx*')
./configure --prefix=/usr/nginx --conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock --with-http_ssl_module --user=nginx \
--group=nginx --with-http_stub_status_module --with-http_gzip_static_module
make && make install
- Сейчас скачаем готовый скрипт для легкого управления нашим веб -сервером nginx ( для старта, остановки, перезагрузки:
cd /etc/init.d
wget http://linux-notes.org/wp-content/uploads/scripts/start_nginx_sorce_code_Debian
mv start_nginx_sorce_code_Debian /etc/init.d/nginx
- Добавим права на файл ( сделаем его исполняемым) исполняемым, добавляем в автозагрузку
chmod +x /etc/init.d/nginx
update-rc.d -f nginx defaults
- откроем файл конфигурации
nano /etc/nginx/nginx.conf
и укажем свой ip
...
server {
listen 80;
server_name 51.15.49.7;
#charset koi8-r;
#access_log logs/host.access.log main;
...
Теперь запускаем сервис service nginx start
, переходим в браузере по своему ip адресу и видим приветственное окно nginx.
-
Заменим файл
etc/nginx/nginx.conf
следующим -
создадим каталоги для размещения конфигураций сайтов
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enable
touch /etc/nginx/sites-available/test.conf
ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled/test.conf
- поместим в
test.conf
следующий код
server {
listen 80;
server_name 51.15.49.7;
root /var/www/test;
index index.php;
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.php$ {
include fastcgi_params;
try_files $uri = 404;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
}
}
- перезагрузим nginx
service nginx restart
FPM (Менеджер процессов FastCGI) является альтернативной реализацией PHP FastCGI с несколькими дополнительными возможностями обычно используемыми для высоконагруженных сайтов.
- добавим репозиторий со всежими версиями некоторых программ, установим ключ
echo 'deb http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
echo 'deb-src http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
cd /usr/local/src
wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
- обновим систему и установим php7-fpm, а так же дополнительные модули, которые будут нужны для работы некоторых систем.
apt-get update
apt-get install -y php7.0-fpm
apt-get install php7.0-zip php7.0-dom php7.0-gd php7.0-curl php7.0-mcrypt php-mbstring php7.0-mbstring php-gettext php7.0-mysql
phpenmod mysqli
phpenmod mcrypt
phpenmod mbstring
phpenmod zip
phpenmod dom
phpenmod gd
phpenmod curl
systemctl restart php7.0-fpm
phpenmod zip
- проверим работоспособность установленной версии
service php7.0-fpm start
- создадим каталог для сайта
useradd --no-create-home www-admin
mkdir /var/www/test
touch /var/www/test/index.php
echo "<?= phpinfo(); ?>" >> /var/www/test/index.php
chown -R www-data:www-data /var/www
Если все нормально, то мы увидим
=== Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года[1], предоставляющий бесплатные криптографические сертификаты X.509 для TLS шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован. Certbot - программа облегчающая процедуры создания, подписи и обновления сертификатов выданных Let's Encrypt.- установим sertbot
sudo apt-get install certbot -t jessie-backports
Прежде чем создавать ssl сертификаты, необходимо настроить доменные имена для вашего ip адреса, разместить веб каталоги и прописать конфигурацию сайтов на прокси сервере
- создание сертификата
certbot certonly --webroot -w /var/www/nextcloud -d cloud.nebesa.me
-
Обратимся к официальному репозиторию
-
Добавим ключ репозитория
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main'
- установим СУБД
sudo apt-get update
sudo apt-get install mariadb-server
- в процессе установки, программа попросит установить пароль
- проверим работоспособность программы
mysql -u root -p
- разрешим соединяться извне. Закоментируем строки
#skip-external-locking
#skip-networking
#bind-address = xx.xx.xx.xx
- Установим систему управленияСУБД
sudo apt-get install -y phpmyadmin
- в процессе установки отказываемся настроить db-config и сконфигурировать под прокси сервер.
- пропишем в nginx конфиг нашего тестового файла следующий код
location /pma {
alias /usr/share/phpmyadmin/;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-pool-name.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_ignore_client_abort off;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
access_log off;
log_not_found off;
expires 1M;
}
}
- перейдем в браузере по алиасу
ip/pma
- введем пароль администратора
- добавим нового суперпользователя с привелегиями и доступом извне -
%
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential
- проверим успех установки
node
console.log('hi there');
npm install pm2 mysql bower grunt-cli jsdom -g
apt-get install dovecot-core dovecot-imapd dovecot-pop3d
- Создадим группу и пользователя vmail, от имени которого будет работать Dovecot и дадим этому пользователю доступ к каталогу, в котором будет храниться почта пользователей почтовой системы.
groupadd -g 120 -r vmail
useradd -g 120 -r -u 120 vmail
mkdir /mnt/data/vmail
chown vmail:vmail /mnt/data/vmail
chmod u=rwx,g=rx,o= /mnt/data/vmail
Я буду использовать защищённые версии протоколов IMAP и POP3, поэтому настрою в файле /etc/dovecot/conf.d/10-auth.conf
механизмы PLAIN и LOGIN, чтобы хранить пароли в базе данных в хэшированном виде:
disable_plaintext_auth = no
auth_default_realm = domain.tld
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext
Настроим использование учётных данных из файла, подобного /etc/passwd
, прописав в файле /etc/dovecot/conf.d/auth-passwdfile.conf.ext
следующие секции:
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/dovecot/passwd
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/passwd
# Поля по умолчанию, которые могут быть заменены значениями из файла passwd
default_fields = uid=vmail gid=vmail userdb_home=/home/vmail/%Ld/%Ln userdb_location=maildir:/home/vmail/%Ld/%Ln userdb_quota_rule=*:storage=1G
# Поля, значения которых заменяют значения из файла passwd
#override_fields = home=/home/vmail/%Ld/%Ln
}
Создадим в каталоге /etc/dovecot
файл passwd
и проставим права доступа:
cd /etc/dovecot
touch passwd
chown root:dovecot passwd
chmod u=rw,g=r,o= passwd
В файле /etc/dovecot/passwd могут быть следующие поля:
user:{plain}password:uid:gid:gecos:home:shell:extra_fields
Назначение полей:
- user - почтовый ящик (в данном случае - вместе с доменом),
- password - пароль (можно явным образом указывать алгоритм хэширования пароля),
- uid - системный идентификатор владельца файлов почты,
- gid - системный идентификатор группы владельца файлов почты,
- gecos - справочная информация о почтовом ящике (игнорируется),
- home - путь к каталогу почты,
- shell - интерпретатор (игнорируется),
- extra_fields - дополнительные настройки (квота, например).
Любое из полей может быть не определено в файле, если в настройках Dovecot указаны значения этих полей по умолчанию. При указании дополнительных полей, используемых в секции userdb необходимо перед именем поля указывать префикс «userdb_», как в примере выше, в настройках default_fields. Имеется возможность зафиксировать часть настроек почтового ящика при помощи настройки override_fields, так что значения из файла будут игнорироваться.
- Изменим форматирование отметок времени, вписав в файл /etc/dovecot/conf.d/10-logging.conf следующую настройку:
log_timestamp = "%Y-%m-%d %H:%M:%S "
На время отладки также можно включить другие опции из этого файла:
auth_verbose = yes
auth_verbose_passwords = yes
auth_debug = yes
mail_debug = yes
В файле /etc/dovecot/conf.d/10-mail.conf
настроим путь к почтовым ящикам и пользователя, от имени которого dovecot будет работать с ящиками:
mail_location = maildir:/home/vmail/%Ld/%Ln
mail_uid = vmail
mail_gid = vmail
first_valid_uid = 120
last_valid_uid = 120
first_valid_gid = 120
last_valid_gid = 120
Сейчас настроим сервис, при помощи которого Exim будет проверять учётные данные почтовых клиентов. Для этого отредактируем файл /etc/dovecot/conf.d/10-master.conf
и впишем в него настройки сервиса:
service auth {
unix_listener auth-client {
mode = 0660
user = Debian-exim
#group =
}
}
Зададим в файле /etc/dovecot/conf.d/15-lda.conf
адрес, с которого Dovecot будет отправлять сообщения об ошибках:
postmaster_address = [email protected]
Осталось отредактировать файл /etc/dovecot/dovecot.conf
, указав в нём адрес, на котором сервер будет ожидать подключений:
!include_try /usr/share/dovecot/protocols.d/*.protocol
listen = *
!include conf.d/*.conf
!include_try local.conf
Начальная настройка сервера окончена. Осталось перезапустить Dovecot, чтобы настройки вступили в силу:
/etc/init.d/dovecot restart
Если у вас имеются готовый подписанный сертификат, можно включить поддержку SSL в файле /etc/dovecot/conf.d/10-ssl.conf
и указать в нём пути к файлам сертификата:
ssl = yes
ssl_cert = </etc/ssl/mail_public.pem
ssl_key = </etc/ssl/mail_private.pem
Установим SMTP-сервер Exim:
apt-get install exim4-daemon-heavy
Создаём файл конфигурации /etc/exim4/exim4.conf со следующим начальным содержимым:
Сразу поменяем права доступа к файлу конфигурации:
chmod u=rw,g=r,o= /etc/exim4/exim4.conf
chown root:Debian-exim /etc/exim4/exim4.conf
В этом случае можно дать остальным пользователям доступ на чтение, т.к. никакой особо секретной информации в файле конфигурации нет. С другой стороны - нужды давать такой доступ тоже нет.
Чтобы Exim мог читать файл /etc/dovecot/passwd
, включим пользователя Debian-exim в группу dovecot:
usermod -aG dovecot Debian-exim
Осталось запустить Exim, чтобы он начал работать в минимальной конфигурации:
/etc/init.d/exim4 start
Для удобного создания ключей DKIM-подписей можно установить пакет opendkim-tools:
apt-get install opendkim-tools
На самом деле необходимые ключи можно генерировать и при помощи openssl, т.к. пакет opendkim-tools содержит набор shell-скриптов, являющихся обёрткой над утилитой openssl.
Теперь создадим каталог для ключей и сгенерируем пару ключей для домена domain.tld:
mkdir /etc/exim4/dkim
cd /etc/exim4/dkim
opendkim-genkey -D /etc/exim4/dkim/ -d domain.tld -s mail
mv mail.private mail.domain.tld.private
mv mail.txt mail.domain.tld.public
Далее можно сгенерировать ключи для других доменов, обслуживаемых нашей почтовой системой.
Выставим права доступа к файлам приватных ключей:
cd /etc/exim4/dkim
chmod u=rw,g=r,o= *
chown root:Debian-exim *
Добавляем в секцию транспортов файла /etc/exim4/exim4.conf, в транспорт remote_smtp, настройки для добавления DKIM-подписей к письмам:
remote_smtp:
driver = smtp
dkim_domain = ${lc:${domain:$h_from:}}
dkim_selector = mail
dkim_private_key = ${if exists{/etc/exim4/dkim/$dkim_selector.$dkim_domain.private} \
{/etc/exim4/dkim/$dkim_selector.$dkim_domain.private}{}}
Достаточно перезагрузить конфигурацию, чтобы письма во внешние домены начали подписываться DKIM-ключами:
/etc/init.d/exim4 reload
Проверим работоспособность
gnutls-cli --no-ca-verification -p 465 nebesa.me
или
openssl s_client -showcerts -connect nebesa.me:465
cd /opt
wget repository.rainloop.net/v2/webmail/rainloop-latest.zip
mkdir /var/www/rainloop
unzip rainloop-latest.zip -d /var/www/rainloop
find /var/www/rainloop -type d -exec chmod 755 {} \;
chown -R www-data:www-data /var/www/rainloop
-
прописываем конфиг в nginx, и не забудем создать сертификаты
-
заходим по адресу
http://webmail.domain.com/?admin
, при первом входе логин:admin, пароль: 12345, меняем пароль и конфигурируем под себя. -
Для настроенных exim и dovecot работает следующий конфиг доменов
imap_host = "mail.nebesa.me"
imap_port = 993
imap_secure = "SSL"
imap_short_login = Off
sieve_use = Off
sieve_allow_raw = Off
sieve_host = ""
sieve_port = 4190
sieve_secure = "None"
smtp_host = "127.0.0.1"
smtp_port = 465
smtp_secure = "SSL"
smtp_short_login = Off
smtp_auth = On
smtp_php_mail = Off
white_list = "[email protected] [email protected] [email protected]"
- устанавливаем все модули php в вышеприведенном разделе
- следуем инструкциям по установке на сайте разработчика, проще всего через web установку
- прописываем конфигурацию для nginx
server.conf
tls-auth ta.key 0
cipher DES-EDE3-CBC
client-config-dir /etc/openvpn/staticip
port 2342
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 120
comp-lzo
max-clients 10
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn-status.log
log-append /var/log/ openvpn.log
verb 3
client-config-dir /etc/openvpn/staticip
- с помошью этой строки каждому устройству присваивается постоянный ip, в каталоге создаются файлы с именами клиентских конфигов в которых содержится информация о присваиваемым им адресам, это может быть полезным, через эту подсеть можно взаимодействовать между устройствами
mob1
ifconfig-push 10.8.0.22 10.8.0.0″
pc1
ifconfig-push 10.8.0.50 10.8.0.0″
squid.conf
acl localnet src 10.8.0.0/24
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow localnet
http_access deny all
cache deny all
http_port 3128
http_port 3129 intercept
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/opt/squid/etc/squidCA.pem
ssl_bump none
ssl_bump server-first all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
httpd_suppress_version_string on
via off
forwarded_for transparent
reply_header_access X-Cache deny all
reply_header_access X-Cache-Lookup deny all
request_header_access Cache-Control deny all
coredump_dir /opt/squid/var/cache/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
iptables -A INPUT -i tun0 ! -s 10.8.0.0/24 -j DROP
iptables -t nat -A PREROUTING -i tun0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Разрешаем форвардинг
/etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 0
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0