Тук ще демонстрирам опростен вариант на инсталиране и настройка на Apache. За да работи правилно един web сървър трябва да са пренасочени портове 80 и 443 от рутера към хоста(сървъра), като протокола да е TCP.
Инсталация на необходимите пакети.
apt install apache2 -y
След като се инсталира, Apache се стартира автоматично. Mоже да инсталираме и документацията към Apache както и помощни програми, но не е задължително.
apt install apache2-doc apache2-utils -y
Първото нещо което трябва да се направи е да проверим дали работи правилно. Няколко команди правят едно и също.
/etc/init.d/apache2 status systemctl status apache2 service apache2 status ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2) Active: active (running) since Thu 2016-04-07 19:09:53 EEST; 36min ago Process: 430 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) CGroup: /system.slice/apache2.service ├─478 /usr/sbin/apache2 -k start ├─481 /usr/sbin/apache2 -k start └─482 /usr/sbin/apache2 -k start Apr 07 19:09:53 home apache2[430]: Starting web server: apache2.
Всичко е стартирало правилно, но ще проверим логовете за грешки
cat /var/log/apache2/error.log
Няма отразени грешки, значи всичко е стартирало и работи правилно Може да проверим и правилността на синтаксиса
apache2ctl configtest Syntax OK
Няма грешка в конфигурационните файлове (чиста инсталация, иначе щеше да е бъг на системата), Горната команда има и още опции като fullstatus, graceful, graceful-stop, help, restart, start, status, stop. И щом няма грешка, и сме пренасочили портовете да пробваме как работи. Пишем в браузъра http://my.tlan.net
Прекрасно, Apache работи и се отваря страницата на http://my.tlan.net, по същия начин се отваря и http://185.163.245.186. За да не се получава това се правят виртуални хостове в Apache и се забранява 000-default.conf.
a2dissite 000-default.conf Site 000-default disabled. To activate the new configuration, you need to run: service apache2 reload
Това на практика изтри файла 000-default.conf от папка /etc/apache2/sites-enabled/ или по-точно казано изтри линка на файла 000-default.conf. Оригиналното място на файла се намира в /etc/apache2/sites-available/.
ls /etc/apache2/sites-enabled/
Няма нищо (празна директория), значи няма инсталиран виртуален сайт и е време да създадем нашите сайтове.
За създаване на този виртуален сайт ще създадем конфигурационен файл в /etc/apache2/sites-available/
nano /etc/apache2/sites-available/my.tlan.net.conf <VirtualHost *:80> ServerName my.tlan.net ServerAlias mail.my.tlan.net ns1.my.tlan.net www.my.tlan.net DocumentRoot /var/www/my.tlan.net/ </VirtualHost> mkdir -p /var/www/my.tlan.net chown www-data:www-data /var/www/my.tlan.net
Създадохме виртуален сайт, създадохме и папката където да работи, дефинирахме права върху папката. Активираме виртуалния сайт.
a2ensite my.tlan.net.conf Enabling site my.tlan.net. To activate the new configuration, you need to run: systemctl reload apache2
или създаваме линк в /etc/apache2/sites-enabled/ на файла /etc/apache2/sites-available/my.tlan.net.conf По същия начин се дефинира и my.tachko.com. Няма да го показвам за да не се получи дълга статията. Рестартираме Apache за да влязат актуализациите в сила
service apache2 reload service apache2 status
Да пробваме като напишем в браузъра http://my.tlan.net/.
Рабитим със сайта. В случая показва празна папка, защото вътре няма никакви файлове. Да създадем един за тест.
echo "Just a test My.TLan.NET" > /var/www/my.tlan.net/test
И наново тест чрез браузъра. http://my.tlan.net/test
Супер, до тук всичко е наред. Отново повтарям, аналогични са действията и за виртуалния сайт my.tachko.com, който за сега няма да го разглеждаме. По-надолу ще покажа командите в сгъстен ред, без пояснения. Сега да накараме виртуалния хост да работи с https протокола.
nano /etc/apache2/sites-available/my.tlan.net-ssl.conf <VirtualHost *:443> ServerName my.tlan.net ServerAlias mail.my.tlan.net ns1.my.tlan.net www.my.tlan.net DocumentRoot /var/www/my.tlan.net/ SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost>
Ползваме сертификатите получени по време на инсталацията (ssl-cert-snakeoil.pem и ssl-cert-snakeoil.key). Активираме виртуалния сайт отговарящ за HTTPS заявките.
a2ensite my.tlan.net-ssl.conf Enabling site my.tlan.net-ssl. To activate the new configuration, you need to run: systemctl reload apache2
За да се работи със сертификати е необходимо и зареждане на модула ssl за Apache.
a2enmod ssl
Рестартираме Apache за да влязат промените в сила.
service apache2 restart
Тестваме като пишем в браузъра https://my.tlan.net/test
До тук всичко работи нормално. Проблема е, че сертификата не е публично удостоверен, но преди да продължим с темата да повторим операциите за виртуалния сайт my.tachko.com.
nano /etc/apache2/sites-available/my.tachko.com.conf <VirtualHost *:80> ServerName my.tachko.com ServerAlias mail.my.tachko.com ns1.my.tachko.com www.my.tachko.com DocumentRoot /var/www/my.tachko.com/ </VirtualHost> mkdir -p /var/www/my.tachko.com chown www-data:www-data /var/www/my.tachko.com a2ensite my.tachko.com.conf echo "Just a test My.Tachko.COM" > /var/www/my.tachko.com/test nano /etc/apache2/sites-available/my.tachko.com-ssl.conf <VirtualHost *:443> ServerName my.tachko.com ServerAlias mail.my.tachko.com ns1.my.tachko.com www.my.tachko.com DocumentRoot /var/www/my.tachko.com/ SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost> a2ensite my.tachko.com-ssl.conf service apache2 reload
Готови сме и с my.tachko.com. Работи с протоколи http и https.
Проблема обаче с публичните сертификати си остава. За целта ще ползваме услугата на https://letsencrypt.org/, наречена certboot. Първо да я инсталираме.
apt install certbot python3-certbot-apache -y
Освен certboot инсталирахме и python3-certbot-apache. Тъй като работим с Apache за да интегрираме публичните сертификати е необходим плъгина за Apace на certboot. За начало да тестваме дали можем да генерираме сертификат за my.tlan.net, mail.my.tlan.net, ns1.my.tlan.net, www.my.tlan.net, my.tachko.com, mail.my.tachko.com, ns1.my.tachko.com, www.my.tachko.com
certbot certonly --webroot --dry-run -w /var/www/my.tlan.net -d my.tlan.net -d mail.my.tlan.net -d ns1.my.tlan.net -d www.my.tlan.net -w /var/www/my.tachko.com -d my.tachko.com -d mail.my.tachko.com -d ns1.my.tachko.com -d www.my.tachko.com Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): tachko@my.tlan.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Simulating a certificate request for my.tlan.net and 7 more domains The dry run was successful.
Теста мина без грешки Сега да създадем и интегрираме публичните сертификати.
certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email tachko@my.tlan.net -d my.tlan.net -d mail.my.tlan.net -d ns1.my.tlan.net -d www.my.tlan.net -d my.tachko.com -d mail.my.tachko.com -d ns1.my.tachko.com -d www.my.tachko.com Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Requesting a certificate for my.tlan.net and 7 more domains Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/my.tlan.net/fullchain.pem Key is saved at: /etc/letsencrypt/live/my.tlan.net/privkey.pem This certificate expires on 2024-07-20. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for my.tlan.net to /etc/apache2/sites-enabled/my.tlan.net-ssl.conf Successfully deployed certificate for mail.my.tlan.net to /etc/apache2/sites-enabled/my.tlan.net-ssl.conf Successfully deployed certificate for ns1.my.tlan.net to /etc/apache2/sites-enabled/my.tlan.net-ssl.conf Successfully deployed certificate for www.my.tlan.net to /etc/apache2/sites-enabled/my.tlan.net-ssl.conf Successfully deployed certificate for my.tachko.com to /etc/apache2/sites-enabled/my.tachko.com-ssl.conf Successfully deployed certificate for mail.my.tachko.com to /etc/apache2/sites-enabled/my.tachko.com-ssl.conf Successfully deployed certificate for ns1.my.tachko.com to /etc/apache2/sites-enabled/my.tachko.com-ssl.conf Successfully deployed certificate for www.my.tachko.com to /etc/apache2/sites-enabled/my.tachko.com-ssl.conf Congratulations! You have successfully enabled HTTPS on https://my.tlan.net, https://mail.my.tlan.net, https://ns1.my.tlan.net, https://www.my.tlan.net, https://my.tachko.com, https://mail.my.tachko.com, https://ns1.my.tachko.com, and https://www.my.tachko.com We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Имаме създадени сертификати за https://my.tlan.net, https://mail.my.tlan.net, https://ns1.my.tlan.net, https://www.my.tlan.net, https://my.tachko.com, https://mail.my.tachko.com, https://ns1.my.tachko.com, and https://www.my.tachko.com. Да проверим чрез браузъра: https://my.tlan.net/test
Всичко е наред имаме издаден сертификат и той е инсталиран където трябва. Пакетът certboot автоматично добавя времева задача която се изпълнява два пъти в деня на произволни часове. За да се подовява автоматино сертификата можем да ползвахме Cron или Systemd таймер. По-добрия вариант е втория. Таймера се определя във файла: /lib/systemd/system/certbot.timer За да разберем дали услугата е стартирана и кога ще е следващото събитеие изпълняваме:
systemctl status certbot.timer
Независимо от всичко това има и Cron файл в: /etc/cron.d/certbot. Не се бъркайте, тази задача няма да направи нищо поради “-d /run/systemd/system”, което проверява дали systemd е инсталиран. А както знаем Debian използва systemd. До тук всичко е прекрасно, но автоматично ще се подновяват само файловете на сертификата. Проблем е, че компоненти като Apahche, PostFix и Dovecot няма да забележат промяната. За целта добавяме така наречения post-hook към certboot. Това ще рестартира всички гореспоменати процеси. За целата:
nano /etc/letsencrypt/cli.ini # Най-отдолу добавяме: post-hook = systemctl restart apache2 # Ако имахме инсталирани още postfix и dovecot добавяме: post-hook = systemctl restart postfix dovecot apache2
Така вече всичко е наред. Сертификата автоматично ще се подновява на всеки 90 дена и след обновяването ще рестартира Apache, PostFix и Dovecot Между другото бях забравил. Да покажа какво и къде записа инсталацията на сертификата:
nano /etc/apache2/sites-available/my.tlan.net.conf <VirtualHost *:80> ServerName my.tlan.net ServerAlias mail.my.tlan.net ns1.my.tlan.net www.my.tlan.net DocumentRoot /var/www/my.tlan.net/ RewriteEngine on RewriteCond %{SERVER_NAME} =my.tlan.net [OR] RewriteCond %{SERVER_NAME} =www.my.tlan.net [OR] RewriteCond %{SERVER_NAME} =mail.my.tlan.net [OR] RewriteCond %{SERVER_NAME} =ns1.my.tlan.net RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> nano /etc/apache2/sites-available/my.tlan.net-ssl.conf <VirtualHost *:443> ServerName my.tlan.net ServerAlias mail.my.tlan.net ns1.my.tlan.net www.my.tlan.net DocumentRoot /var/www/my.tlan.net/ SSLEngine on Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/my.tlan.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/my.tlan.net/privkey.pem Header always set Strict-Transport-Security "max-age=31536000" SSLUseStapling on </VirtualHost> <IfModule mod_ssl.c> SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000) </IfModule>
Виждат се къде се намират файловете на сертификата, също се вижда, че ползваме сертификати на letsencrypt Сега да се спрем малко по-подробно на файловете които генерира letsencrypt.
ls -l /etc/letsencrypt/live/my.tlan.net lrwxrwxrwx 1 root root 35 Apr 28 17:27 cert.pem -> ../../archive/my.tlan.net/cert2.pem lrwxrwxrwx 1 root root 36 Apr 28 17:27 chain.pem -> ../../archive/my.tlan.net/chain2.pem lrwxrwxrwx 1 root root 40 Apr 28 17:27 fullchain.pem -> ../../archive/my.tlan.net/fullchain2.pem lrwxrwxrwx 1 root root 38 Apr 28 17:27 privkey.pem -> ../../archive/my.tlan.net/privkey2.pem -rw-r--r-- 1 root root 692 Apr 21 06:21 README
Имаме генерирани: cert.pem - Публичен ключ (Public Key). Тук се съдържа само нашия сертификат. chain.pem - Сертификат Chain (Certificate Chain) fullchain.pem - Резултат от cert.pem + chain.pem (). Сбор от нашия сертификат и междинните сертификати privkey.pem - Частен ключ (Private Key) fullchain.pem може да се получи по следния начин:
cat cert.pem chain.pem > fullchain.pem
Някои сървъри искат да ползват и трите сертификата в следния вид:
ssl_certificate /etc/letsencrypt/live/my.tlan.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/my.tlan.net/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/my.tlan.net/chain.pem;
Мисля, че със темата сертификата завършихме.