Sejarah menciptakan cloud rumah. Bagian 2. Membuat server - mengatur LAMP di Debian

Dalam perjalanan untuk membuat layanan cloud kami sendiri, kami terbiasa dengan sistem Debian . Sekarang waktunya telah tiba untuk langkah berikutnya - pembuatan dan konfigurasi server web, yang menjadi dasar Nextcloud dapat diluncurkan.


Daftar isi


Bagian 1. Mengatur lingkungan Debian Anda untuk penggunaan sehari-hari
Bagian 2. Membuat server - mengatur LAMP di Debian
Bagian 3. Membuat cloud pribadi - menginstal dan mengkonfigurasi Nextcloud
Bagian 4. Pembaruan 2018 - Debian 9 dan Nextcloud 13
Bagian 5. Memperbarui 2019 - PHP 7.2, MariaDB 10.4 dan Nextcloud 17



Navigasi bab cepat


Kata Pengantar
Instalasi perangkat lunak
Mengkonfigurasi server web Apache2 dan mengaksesnya melalui protokol HTTP dan HTTPS
Penyetelan SQL
Pengaturan PHP
Pengaturan Akses SSH
Perlindungan akses
Referensi Server Web
Referensi MySQL
Bahan referensi Fail2ban



Kata Pengantar


Bagian pertama dari cerita ini menunjukkan salah satu opsi yang memungkinkan untuk menyiapkan GUI Debian untuk penggunaan yang nyaman dan akrab (sudut pandang eksklusif subjektif dari penulis) yang digunakan oleh orang yang datang ke Linux dari Windows. Dan jika saya hanya menggunakan sistem host untuk mengkonfigurasi mesin virtual dengan Debian, maka saya secara khusus bekerja hanya di mesin virtual ini, mencari informasi di Internet, membuat catatan di Notepadqq atau gedit, mendengarkan musik melalui Audacious, membuka file melalui LibreOffice dan sejenisnya. Dengan cara ini, Anda dapat terbiasa dan merasa jauh lebih dalam dan menghargai bekerja dengan sistem operasi dan lingkungannya, yang cukup penuh dan fungsional dalam paket standar Debian.

Saat ini, sistem kami dikonfigurasi sedemikian rupa sehingga di masa depan Anda hanya dapat menggunakan baris perintah dengan editor teks konsol, misalnya, nano atau menggunakan manajer file Double Commander dengan editor Notepadqq terintegrasi. Dimungkinkan untuk menggabungkan kedua metode ini, misalnya, dengan menavigasi dalam sistem dan mengedit file konfigurasi melalui manajer file, dan semua perintah lainnya melalui konsol. Semua metode setara untuk mencapai hasil akhir.

Tujuan saat ini adalah untuk membuat server, yang akan dikhususkan untuk bagian ini. Server dapat dikonfigurasi baik dengan instalasi dan penggunaan antarmuka grafis, dan tanpa itu. Dalam kasus kedua, dari bagian sebelumnya, Anda dapat melewatkan bagian tentang menginstal dan mengkonfigurasi perangkat lunak untuk antarmuka grafis dan pengaturannya, menginstal paket perangkat lunak grafis dan vmware-tools.

Saya melihat tidak ada yang salah dengan menggunakan antarmuka grafis ketika membuat server: jika lebih akrab, lebih nyaman dan nyaman bagi seseorang untuk membuat server pertama atau kedua mereka dengan lingkungan grafis - mengapa tidak? Pada akhirnya, server web saya dengan antarmuka grafis bekerja selama satu tahun dan akan bekerja bertahun-tahun sesuai kebutuhan. Namun, Anda perlu mengingat beberapa poin.

Idealnya, sekali dikonfigurasi, sistem harus bekerja tanpa campur tangan kita untuk waktu yang sangat lama. Server saya dalam versi "selesai" dikonfigurasikan dalam dua hari, dan bekerja tanpa intervensi selama hampir setahun. Ini berarti bahwa antarmuka grafis digunakan 0,05% dari keberadaan aktif server (komputer hanya bekerja selama setengah hari) dan pada saat yang sama mengambil sumber daya: RAM, ruang disk, waktu prosesor. Semua sumber daya ini dihabiskan lebih baik untuk memastikan berfungsinya server itu sendiri: misalnya, naik memory_limit untuk PHP atau simpan lebih banyak data pengguna di hard drive. Selain itu, jika terjadi masalah dan malfungsi saat bekerja dengan server jarak jauh nyata, seringkali lebih mudah untuk menggunakan akses SSH . Dalam konteks ini, kehadiran antarmuka grafis tidak diinginkan dan itulah sebabnya server kedua di jaringan saya sudah menjadi mesin virtual tanpa lingkungan grafis yang hanya menginstal Midnight Commander dari perangkat lunak grafis, yang saya gunakan untuk menavigasi sistem file dan mengedit file konfigurasi melalui editor mceditnya. . Oleh karena itu, berikut ini adalah instruksi universal: diberikan perintah dengan penekanan pada penggunaan baris perintah, namun, dapat dipahami bahwa untuk pertama kalinya pengguna mengkonfigurasi mesin dengan lingkungan grafis, yang disebabkan oleh penggunaan browser untuk memeriksa ketersediaan situs yang dibuat secara lokal dan beberapa fitur pengaturan program surat.

Dalam proses membuat server dan ketika menambahkan situs baru ke dalamnya, saya mengumpulkan beberapa informasi latar belakang yang mungkin berguna bagi pengguna pemula. Saya menguraikannya setelah materi tentang menginstal dan mengkonfigurasi server.

Catatan
Setelah membaca lebih lanjut dalam konstruksi formulir http: // 127.0.0.1 (https: // 127.0.0.1), spasi setelah http: // (https: //) harus dihapus ketika memasuki bilah alamat browser. Ruang disisipkan saat menerbitkan artikel ini untuk mencegah mesin dari secara otomatis mengubah teks menjadi tautan.



Instalasi perangkat lunak


Apache dan Nginx adalah sepasang server web sumber terbuka tempat sekitar 55% server di seluruh dunia dibangun. Apache adalah server web paling populer sejak 1995 dan saya memilihnya dengan harapan akan dokumentasi yang baik, popularitas dan, untuk berbicara, saya ingin memulai dari awal. Ini tidak berarti bahwa Nginx lebih buruk: Nginx lebih efisien dalam mengonsumsi sumber daya dan bekerja di bawah beban. Di segmen Internet Rusia, server Nginx menempati sekitar 65%, sementara Apache - sekitar 18%. Artikel komparatif yang baik dari dua server diposting di hub

Menginstal Apache2 Web Server:

# apt-get install apache2 apache2-doc

Dan itu saja. Sekitar dua puluh megabyte dan server web sudah diinstal. Tidak perlu reboot atau pengaturan - server sudah tahu cara membuka halaman HTML . Namun, situs web modern di Internet tidak hanya sekumpulan file statis, gaya, font, dan sejenisnya seperti dua puluh tahun yang lalu. Situs modern berisi skrip yang ditulis dalam PHP , dan informasi dinamis (misalnya, konten teks, komentar, profil pengguna) tidak ditulis ke file di sebelah file PHP, tetapi ke database SQL khusus. Untuk server lengkap, Anda harus memberikan dukungan untuk teknologi ini. Selain itu, tidak sulit:

# apt-get install mysql-server mysql-client phpmyadmin
# apt-get install php5 php5-mysql libapache2-mod-php5

Selama instalasi MySQL, Anda akan diminta untuk mengatur kata sandi pengguna super mysql dan Anda harus memilih server apache2 untuk secara otomatis mengkonfigurasi pekerjaan dengan mysql. Ketika menginstal paket phpmyadmin , saya setuju untuk secara otomatis mengkonfigurasi paket dan di mana-mana memasukkan kata sandi root mysql. Instalasi PHP terjadi tanpa permintaan apa pun.

Saya tidak menggunakan PHP7 lebih cepat atau MariaDB gratis sebagai alternatif pengganti SQL terbuka dan memutuskan untuk membangun server saya di LAMPU "kanonik" = Linux + Apache + MySQL + PHP, menggunakan solusi lama dan terbukti, jika ada masalah yang saya dapat dengan cepat dan dengan mudah menemukan informasi di Internet.

Tiga tim (yang sebenarnya dapat direduksi menjadi satu) dan kami telah menginstal secara lokal server modern dan penuh. Ini sangat sederhana!

Tetapi pengaturan server membutuhkan waktu lebih lama daripada menginstal komponennya. Awalnya, di bagian ini saya ingin menunjukkan kesalahan khas saya, solusi palsu untuk masalah dan hasil yang mereka tuju, tetapi ternyata banyak hal telah dihapus dari ingatan saya dalam setahun, saya harus memulihkan banyak dari catatan, jadi di bawah ini hanya akan menetapkan instruksi kerja dengan sedikit komentar, memungkinkan untuk mencapai hasil kerja universal.



Konfigurasikan Server Web Apache2


Pertama, Anda perlu memastikan bahwa server web berfungsi. Untuk melakukan ini, buka browser dan tekan alamat http: // 127.0.0.1 ( localhost ). Prasasti yang membesarkan hati harus terbuka: “Apache2 Debian Default Page. Ini berhasil! " Server benar-benar berfungsi. Jika Anda memiliki satu set file situs untuk tahun 2000, maka Anda dapat meletakkannya di direktori / var / www / html dan mungkin akan terbuka di server kami.



Semua pengaturan server web dasar disimpan di jalur / etc / apache2. Jika Anda membuka direktori ini, Anda dapat melihat file konfigurasi utama apache2.conf dan direktori conf-available, mod-available, available-sites. Direktori-direktori ini berisi file-file yang telah dikonfigurasikan sebelumnya dengan pengaturan (yang disebut snippet), yang dapat Anda gunakan secara default, dengan pengeditan Anda sendiri, atau menjadikannya sebagai templat untuk membuat konfigurasi Anda sendiri. Misalnya, dalam direktori yang tersedia di situs adalah file konfigurasi host default 000-default.conf. Jika Anda membukanya dan mempelajarinya, ternyata file ini hanya menetapkan jalur yang dibuka situs web kami di alamat http: // 127.0.0.1: "DocumentRoot / var / www / html". Selain itu, baris "<VirtualHost *: 80>" berarti bahwa jika saya melepaskan mesin saya di jaringan lokal dan mengaksesnya di port 80 (port untuk HTTP ), saya akan membuka situs yang terletak di jalur / var / www / html. Bagaimana cara memverifikasi ini?

Pertama, Anda perlu mengetahui alamat IP yang ditugaskan ke mesin virtual setelah itu dimuat. Untuk melihat konfigurasi adapter jaringan, jalankan:

# ifconfig

Dalam informasi yang ditampilkan pada konsol, mudah untuk menentukan bahwa alamat berikut ini diatur untuk adaptor eth0:

inet addr:192.168.233.138

Sekarang di mesin host, saya membuka alamat browser http: // 192.168.233.138 di browser dan mengharapkan halaman yang sudah dikenal untuk membuka. Tapi ... dia tidak membuka. Setelah beberapa waktu, browser saya menulis: "Koneksi habis." Dan dia menulis dengan benar. Memang, pada bagian pertama saya menyalakan firewall, tetapi port 80 tidak terbuka! Mari kita perbaiki ini:

# ufw izinkan 80

Sekali lagi, coba buka alamat http: // 192.168.233.138 dan pastikan halaman yang diharapkan terbuka. Tuan rumah virtual di mesin virtual dibuka dari luar semua virtualisasi ini. Kami mengambil langkah kecil dalam membangun Internet virtual kecil kami sendiri.

Selain direktori yang tersedia, ada juga direktori yang diaktifkan yang berisi apa yang saat ini "disertakan". Jika Anda melihatnya, Anda dapat melihat bahwa direktori-direktori ini berisi tautan ke file-file yang terletak di direktori yang tersedia. Saat ini hanya ada satu tautan di direktori yang didukung situs - file /etc/apache2/sites-available/000-default.conf. Ini sangat mudah - kita dapat mengontrol pintasan hidup atau mati host tanpa mengedit file konfigurasi mereka. Selain itu, sumber konfigurasi adalah apakah satu file konfigurasi disertakan secara mandiri atau tidak sekarang, dan ini mencegah kesalahan ketika sesuatu dikoreksi dalam satu file dan dilupakan pada yang lain. Untuk menonaktifkan host kami, Anda perlu menghapus pintasan yang diperlukan, dan untuk mengaktifkannya, buatlah. Agar tidak menghapus atau membuat pintasan secara manual, lebih mudah dan lebih dapat diandalkan untuk menggunakan utilitas khusus.

Nonaktifkan host virtual:

# a2dissite 000-default

Nyalakan host virtual:

# a2enssite 000-default

Setelah setiap perubahan, Anda harus memulai ulang konfigurasi host atau me-restart server:

# service apache2 reload

atau

# service apache2 restart

Jadi, pemahaman dasar tentang cara mengkonfigurasi host biasa di apache sekarang tersedia, dan kemudian saya akan menunjukkan contoh bagaimana saya mengkonfigurasi server saya untuk bekerja melalui protokol HTTP dan HTTPS .

Anda harus mulai dengan fakta bahwa ketika melepaskan 000 host virtual default, pemutusan seperti itu tidak terjadi. Yaitu, situs yang dibuka dari dalam dan luar mesin virtual - dan akan terbuka terlepas dari apakah konfigurasinya ada di folder yang didukung situs. Ini tidak terduga dan saya menghabiskan waktu yang relatif lama untuk memahami apakah saya melakukan semuanya dengan benar atau dipahami. Sampai akhir, saya masih tidak mengerti ini, ternyata ini disebabkan oleh kenyataan bahwa path / var / www / html diatur secara global sebagai direktori default untuk DocumentRoot. Karena saya tidak ingin sesuatu yang tidak perlu dimasukkan dan diakses, saya memutuskan untuk menyingkirkan direktori html itu sendiri, dan untuk semua nested / var / www, tolak akses secara default.

Untuk mengkonfigurasi virtual host default, saya mengedit file konfigurasinya:

# nano /etc/apache2/sites-available/000-default.conf

Isi file konfigurasi adalah sebagai berikut:

 <VirtualHost *:80> ServerName localhost ServerAdmin user@localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Dengan konfigurasi ini, saya mereset direktori default ke / var / www, mengizinkan server untuk mengikuti tautan simbolik di direktori ini, mengizinkan server untuk menjalankan semua arahan yang dideklarasikan dalam file .htaccess yang ditemukan, dan menolak akses ke direktori ini. Logika dari tindakan ini adalah bahwa saya dapat mengontrol akses ke direktori ini tanpa mengakses pengaturan server web sama sekali dan tanpa me-restart itu. Sekarang Anda perlu memeriksa solusi ini.
Transfer file:

# mv /var/www/html/index.html /var/www/index.html

Dan hapus direktori:

# rm / var / www / html

Kami me-restart server untuk pengaturan default host virtual baru agar berlaku:

# service apache2 restart

Buat file:

# nano /var/www/.htaccess

Di mana kami menulis satu baris (tanpa tanda kutip): "Wajibkan semua diberikan".

Untuk meringkas. Sekarang tidak ada path / var / www / html, tetapi host secara default dikonfigurasi ulang ke path / var / www, di mana file index.html berada, dan secara default, pada tingkat server web, akses ke direktori ini ditolak, tetapi konten diperbolehkan secara lokal file .htaccess terletak di sana.

Buka browser http: // 127.0.0.1 dan lihat halaman yang sudah dikenal “Apache2 Debian Default Page. Ini berhasil. " Sekarang mari kita periksa operabilitas kontrol akses "lokal":
Hapus file .htaccess:

# rm /var/www/.htaccess

Dan kami memperbarui halaman yang terbuka di browser - halaman dengan pemberitahuan pembatasan akses (Terlarang) akan terbuka. Ya, semua ini berfungsi, jadi semuanya dilakukan dengan benar.

Pada prinsipnya, pengaturan sederhana ini cukup untuk operasi server web yang lebih mudah. Tetapi bagi saya itu tampaknya tidak cukup. Sekarang server web kami hanya dapat bekerja menggunakan protokol HTTP. Tetapi bagaimana dengan protokol HTTPS? Lagi pula, jika di masa depan untuk membawa proyek berdasarkan server web ini ke Internet, kemampuan untuk bekerja pada protokol ini setidaknya diinginkan. Dan saya memutuskan untuk mengatur dukungan HTTPS berdasarkan penciptaan sertifikat SSL yang ditandatangani sendiri.

Pertama, Anda perlu mendapatkan sertifikat SSL yang akan diinstal di server kami. Kami tidak memiliki domain apa pun, dan kami juga tidak memiliki alamat IP statis. Tetapi semua ini tidak masalah, karena saya akan menghasilkan sertifikat sendiri, menggunakan alat dari sistem saya.

Perhatian! Petunjuk di bawah ini menganggap bahwa server diinstal pada mesin tanpa nama. Jika ada IP asli atau nama domain, maka mereka harus ditentukan di TIGA tempat: <Nama Umum IP / Domain>; <ServerName IP / Domain>; <Redirect "/" "https: // IP / Domain /"> - dalam konstruksi yang sesuai, ganti IP / Domain dengan alamat IP atau nama domain. Dalam teks di bawah ini, localhost digunakan sebagai ganti IP / Domain.

Hasilkan sertifikat SSL:

# openssl req -x509 -nodes -days 3650 -newkey rsa: 2048 -kunciout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Perintah ini akan membuat sertifikat yang ditandatangani sendiri standar X.509 segera selama 10 tahun dengan melewatkan opsi perlindungan sertifikat dengan frasa sandi - ini diperlukan agar ketika memulai server Apache dapat membaca file tanpa intervensi pengguna, karena mengatur kata sandi, Anda harus memasukkannya setelah setiap boot atau reboot server. Bersama dengan sertifikat, kunci RSA baru untuk 2048 bit akan dibuat, dengan mana sertifikat akan ditandatangani. Opsi –keyout dan –out menunjukkan jalur di mana OpenSSL harus menghasilkan kunci dan sertifikat.

Dalam proses pembuatan sertifikat, pertanyaan akan diajukan, yang saya tunjukkan data berikut:

Nama Negara = MW
Nama Negara Bagian atau Provinsi = Sistem Matahari
Nama Daerah = Bulan
Nama Organisasi = Hellium Inc.
Nama Unit Organisasi = 2
Nama umum = localhost
Alamat Email = user @ localhost

Selanjutnya, buat kunci Diffie-Hellman untuk memberikan dukungan PFS :

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Dots dan plus akan berjalan di terminal dan setelah akhir kartun, Anda dapat membuat file ssl-params.conf di mana parameter SSL untuk server akan ditentukan:

# nano /etc/apache2/conf-available/ssl-params.conf

Untuk pengaturan yang aman dan terkini, saya menggunakan kode yang dibuat di generator untuk mengkonfigurasi SSL di mozilla.imtqy.com . Di generator, saya memilih server Apache2, profil Modern dan dengan benar mengatur versi server dan OpenSSL, yang dapat dikenali dengan perintah berikut:

# apache2 -v
# versi openssl

Sebagai hasilnya, saya mendapatkan teks berikut:

 # 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.imtqy.com/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) 

Sekarang konfigurasikan virtual host dengan dukungan SSL:

# nano /etc/apache2/sites-available/default-ssl.conf

Saya membawa teks file ini ke bentuk berikut:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin user@localhost ServerName localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

Dari penjelasan di atas, kita juga memiliki / var / www didefinisikan sebagai direktori DocumentRoot, akses yang dikonfigurasi sama dengan pengaturan sebelumnya. Mekanisme HSTS diaktifkan , yang membantu memaksa koneksi melalui protokol HTTPS. Dukungan SSL disertakan dengan sertifikat dan kunci yang digunakan, serta dukungan untuk memproses data sertifikat dalam skrip PHP dan CGI . Bagian terakhir dirancang untuk memberikan kompatibilitas dengan versi Internet Explorer sebelumnya dan, secara umum, tidak perlu.

Sekarang mari kita lakukan sentuhan akhir.

Mari kita buka porta untuk SSL:

# ufw izinkan 443

Aktifkan modul apache untuk dukungan SSL dan HSTS:

# a2enmod ssl
# header a2enmod

Aktifkan konfigurasi SSL:

# a2enconf ssl-params

Aktifkan host virtual berkemampuan SSL:

# a2ensite default-ssl

Mulai ulang server untuk menerima semua pengaturan baru:

# service apache2 restart

Jadi saat yang menarik telah datang - memeriksa operabilitas fungsionalitas baru dari sistem yang dikonfigurasi.

Buat file:

# nano /var/www/.htaccess

Di mana kami meresepkan satu baris: "Wajibkan semua diberikan".

Buka di browser https: // 127.0.0.1. Halaman tentang sertifikat yang tidak dikenal harus dibuka, setelah menerimanya (izin tunggal atau permanen), halaman yang akrab dengan pemberitahuan tentang server web yang berjalan akan terbuka.

Hapus file .htaccess:

# rm /var/www/.htaccess

Dan kami memperbarui halaman yang terbuka di browser - halaman dengan pemberitahuan pembatasan akses (Terlarang) akan terbuka. Semuanya bekerja dengan benar. Sekarang situs kami dapat diakses melalui HTTP dan HTTPS.

Akses HTTP dapat dibiarkan diaktifkan, dinonaktifkan, atau dipaksa untuk dialihkan ke HTTPS.

Untuk akses berkemampuan HTTP, tidak ada yang perlu dilakukan, karena server memproses permintaan untuk port 80 dan 443 secara individual dan situs kami di folder / var / www akan terbuka baik melalui HTTP maupun melalui HTTPS.

Untuk menonaktifkan akses HTTP, Anda hanya perlu menonaktifkan host virtual yang sesuai dan memulai kembali server web:

# a2dissite 000-default
# service apache2 restart

Sekarang, jika Anda membuka http: // 127.0.0.1 di browser, halaman dengan notifikasi tentang tidak adanya halaman (Not Found) akan terbuka.

Opsi ketiga yang paling menarik. Dalam hal ini, HTTP secara formal tetap diaktifkan, tetapi pemrosesan data akan dialihkan secara paksa melalui HTTPS.

Untuk melakukan ini, pertama-tama aktifkan modul redirection:

# a2enmod menulis ulang

Sekarang buka file 000-default.conf:

# nano /etc/apache2/sites-available/000-default.conf

Dan sebelum tag penutup, tambahkan teks berikut:

 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

Mulai ulang server:

# service apache2 restart

Buat file:

# nano /var/www/.htaccess

Di mana kami meresepkan satu baris: "Wajibkan semua diberikan".

Sekarang, jika Anda membuka alamat http: // 127.0.0.1 di browser, kami akan secara otomatis dialihkan ke https: // 127.0.0.1 dengan peringatan tentang sertifikat yang tidak dikenal (jika sebelumnya tidak ditambahkan ke daftar pengecualian di browser), setelah menerimanya, yang sudah akrab akan terbuka halaman pemberitahuan server web.



Penyetelan SQL


Untuk pengaturan awal mysql, jalankan saja perintah berikut:

# mysql_secure_installation

Setelah memasukkan kata sandi pengguna super mysql, saya menjawab pertanyaan yang diajukan dalam urutan berikut:

  • menolak untuk mengubah kata sandi root;
  • mengkonfirmasi penghapusan pengguna anonim dari basis data;
  • Mengonfirmasi pemblokiran koneksi jarak jauh untuk root (untuk alasan keamanan, root hanya terhubung secara lokal);
  • mengkonfirmasi penghapusan database uji;
  • setuju untuk memuat ulang tabel privilege.

Untuk memverifikasi kesehatan mysql, Anda dapat menjalankan perintah berikut:

# mysql -uroot -p

Setelah memasukkan kata sandi superuser mysql, kita melihat prompt mysql - itu berarti layanan sudah berjalan dan berjalan. Anda dapat keluar dari terminal mysql dengan memasukkan perintah keluar.

Untuk memeriksa kinerja phpmyadmin, buka alamat http: // 127.0.0.1/phpmyadmin di browser. Jika sebuah halaman terbuka dengan undangan untuk memasukkan phpmyadmin, maka layanan sudah berjalan dan berjalan.



Pengaturan PHP


Setelah menginstal PHP, saya membuka file pengaturannya:

# nano /etc/php5/apache2/php.ini

Dan dia membawa beberapa parameter ke bentuk berikut:

  • memory_limit = 1024M
  • default_charset = "UTF-8"
  • upload_max_filesize = 256M
  • sendmail_path = /usr/bin/fake_sendmail.sh

Menggunakan modul PHP, Anda dapat memberikan caching data dalam memori. Caching berguna jika server memuat data yang tinggi, yang pembuatannya membutuhkan sejumlah besar sumber daya, misalnya, hasil kueri ke database atau pemrosesan "berat" potongan templat situs. Sebagai server caching, saya memilih modul memcached .

Instal memcache:

[ Teks ini ditulis khusus untuk situs geektimes.ru oleh AlexanderS .
Tautan ke sumber itu opsional, tetapi rujukannya sangat diinginkan! ]

# apt-get install memcached php5-memcached

Mari kita lihat pengaturan konfigurasi layanan:

# nano /etc/memcached.conf

Dalam pengaturan, saya meningkatkan ukuran memori yang digunakan untuk caching: -m 64 -> -m 256. Dan saya memeriksa ketersediaan mode operasi hanya di zona lokal: -l 127.0.0.1.

Kami memulai kembali layanan caching dan server web:

# layanan memcached restart
# service apache2 restart

Sekarang Anda perlu memastikan layanannya berfungsi. Untuk melakukan ini, buat file:

# nano /var/www/info.php

Dan tambahkan teks berikut ke dalamnya:

 <?php phpinfo (); ?> 

Jangan lupa untuk memeriksa keberadaan file .htaccess di direktori / var / www dengan konten permisif yang sesuai, jika tidak ada, buatlah.

Sekarang Anda dapat membuka di browser Anda http: // 127.0.0.1/info.php - halaman dengan informasi tentang PHP harus terbuka, di mana Anda perlu memeriksa bagian memcached di dalamnya. Jika tabel muncul - PHP berfungsi.

Anda dapat memeriksa layanan memcached yang berjalan seperti ini:

$ ps -aux | grep memcached

Terminal harus mengembalikan string yang berisi pengaturan memcached.

Membuat rintisan surat untuk PHP

Dalam pengaturan PHP, skrip shell ditentukan sebagai parameter sendmail_path. Fungsi skrip ini adalah untuk menyimpan surat yang dikirim melalui fungsi standar php mail () pada mesin lokal, dalam beberapa folder yang nyaman, dan tidak mengirimnya ke suatu tempat.

Buat file:

# nano / usr/bin/fake_semdmail.sh

Dengan konten berikut:

 #!/bin/sh prefix="/var/mail/sendmail/new" numPath="/var/mail/sendmail" if [ ! -f $numPath/num ]; then echo "0" > $numPath/num fi num=`cat $numPath/num` num=$(($num + 1)) echo $num > $numPath/num name="$prefix/letter_$num.txt" while read line do echo $line >> $name done chmod 777 $name /bin/true 

Jadikan file ini dapat dieksekusi:

# chmod + x /usr/bin/fake_semdmail.sh

Buat direktori yang diperlukan yang mungkin Anda perlukan jika Anda mengkonfigurasi koleksi surat oleh program surat:

# mkdir / var / mail / sendmail / var / mail / sendmail / cur / var / mail / sendmail / baru / var / mail / sendmail / tmp

Dan kami memberikan hak agar server dapat menulis file di folder ini:

# chmod 777 -R / var / mail / sendmail

Sekarang semua surat keluar akan ditambahkan ke / var / mail / sendmail. Mereka dapat dilihat dengan editor teks, atau dapat dikumpulkan melalui program surat. Perangkat lunak yang diinstal sebelumnya Debian dilengkapi dengan klien email Evolution. Saat mengatur akun, pilih "Maildir format directories mail" sebagai jenis server dan tentukan path ke direktori mail (/ var / mail / sendmail), dan pilih "Sendmail" sebagai server.

Itu saja. Secara umum, kita selesai dengan server - mesin virtual universal diperoleh, atas dasar di mana Anda dapat membangun layanan jaringan Anda. Saya meninggalkan akses HTTP dan HTTPS. Namun, setelah mendapatkan pengalaman dalam membuat dan mengonfigurasi server, serta menambahkan situs (lihat di bawah), saya akan merekomendasikan membuat mesin virtual baru dengan server tanpa antarmuka grafis sebagai konsumsi sumber daya yang paling optimal.



Pengaturan Akses SSH


Server tidak akan menjadi server penuh tanpa akses melalui SSH. Apa yang disebut "shell" memungkinkan Anda terhubung dengan cepat dan aman ke server jarak jauh, menggunakan, misalnya, program dempul kecil - di komputer lokal kami mendapatkan akses langsung ke terminal server jarak jauh.

Instalasi Layanan:

# apt-get install ssh

Mari kita buka port untuk SSH (sebenarnya, port default harus di nomor 22, tetapi di bawah ini saya mendefinisikan ulang port dalam konfigurasi SSH):

# ufw izinkan 106

Untuk mengatur akses bagi pengguna pengguna kami, buka file:

# nano / etc / ssh / sshd_config

Dan tambahkan arahan di akhir file:

Pengguna AllowUsers

Selain itu, untuk alasan keamanan, saya membuat perubahan berikut pada file ini:

  • port yang diubah dari 22 ke yang lain ( daftar port ): Port 22 -> Port 106
  • menonaktifkan protokol sebelumnya: Protokol 2.1 -> Protokol 2
  • akses remote yang dinonaktifkan untuk root: PermitRootLogin ya (atau PermitRootLogin tanpa kata sandi) -> PermitRootLogin no

Kemudian mulai kembali layanan:

# service sshd restart

Sekarang saya dapat menjalankan program dempul pada mesin host dan terhubung ke server saya dalam mode konsol dengan memasukkan alamat koneksi 192.168.233.138, port 106 dan nama pengguna.Saat menghubungkan, Anda harus menjawab dalam persetujuan untuk menerima kunci dan memasukkan kata sandi untuk pengguna pengguna. Jika Anda perlu menjalankan perintah dari superuser, maka Anda dapat menggunakan perintah su yang sudah dikenal.



Perlindungan akses


Saya tidak mulai melindungi server web dari DDoS, awalnya percaya bahwa jika di-host di VPS / VDS, hosting akan memberikan perlindungan yang efektif, dan jika Anda membuat server Anda "menonjol" ke Internet, masalah ini harus ditangani dengan serius dan ini adalah topik artikel terpisah. Perlindungan HTTP lambat DDoS relatif sederhana menurut banyak instruksi di Internet, tetapi itu tidak akan menyelamatkan Anda dari serangan didistribusikan dari banyak alamat IP yang berbeda.

Dengan DDoS, server kami hanya akan berhenti bekerja untuk sementara waktu. Tetapi setelah serangan yang tidak akan bertahan selamanya, server akan pulih. Tetapi jika seseorang berhasil mendapatkan akses melalui SSH, maka kontrol atas server akan hilang dan data di dalamnya akan dikompromikan, jadi kontrol akses ke server melalui SSH adalah ide yang bagus.

Hal paling sederhana dan paling umum yang dapat dilakukan adalah mengubah port standar, yang kami lakukan saat mengatur SSH. Sekitar lima tahun yang lalu, saya "mendorong" server yang baru dibuat di Internet pada alamat IP asli yang baru saja diterima dan terkejut bahwa selama minggu keberadaan server, tentang yang belum ada yang tahu, sejumlah besar catatan tentang upaya otorisasi gagal pada SSH dan FTP. Jelas, di Internet modern, ada sejumlah besar layanan robot yang mencari komputer dengan port terbuka dan mencoba menghubungkannya dengan mengurutkan kata sandi berdasarkan database yang ada atau menggunakan metode pencarian lengkap.

Untungnya bagi kita, ada yang namanya fail2ban:

# apt-get install fail2ban

Segera setelah instalasi, utilitas sudah dikonfigurasikan untuk melindungi sebagian besar port dan jika lebih dari enam upaya gagal tersambung muncul dalam log sistem dalam sepuluh menit, penyusup akan diblokir selama sepuluh menit. Mekanisme operasi fail2ban cukup sederhana - yang disebut penjara yang memicu tindakan yang dirancang untuk melindungi aplikasi dipicu oleh pemicu tertentu.

Parameter pemblokiran dapat diatur secara individual:

# nano /etc/fail2ban/jail.local

Dalam file yang dibuat, perlu untuk meresepkan pengaturan yang akan menggantikan yang sudah ada secara default. Contoh konten file saya:

#
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 2592000
findtime = 43200
maxretry = 6
banaction = iptables-multiport
#
destemail = user@localhost
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# SSH
[ssh]
enabled = true
port = 106
filter = sshd
logpath = /var/log/auth.log

#
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log

# php
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log

#
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

#
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2


Pengaturan di atas memungkinkan Anda untuk tidak mengontrol akses lokal, dan dengan enam upaya login yang salah dalam 12 jam, alamat IP penyerang menggunakan iptables akan diblokir selama 30 hari. Ia mengontrol tidak hanya akses port untuk SSH, tetapi juga tindakan mencurigakan yang ditujukan untuk mengganggu kestabilan operasi server web.



Referensi Server Web


Mulai, berhenti, dan restart server:

# service, apache2 start
# layanan, apache2 stop
# layanan, apache2 restart


Restart konfigurasi server:

# service, apache2 reload

Mengaktifkan atau menonaktifkan tes host:

# test a2ensite
test # a2dissite


mengaktifkan dan mengkonfigurasi tes penutupan:

# a2enconf uji
# a2disconf test


Memeriksa sintaks file (harus kembali: "Sintaks OK"):

# apache2ctl configtest

Opsi untuk menambahkan situs dengan akses HTTP atau HTTPS menggunakan virtual host yang ada

Katakanlah kita perlu menambahkan situs baru ke server kita yang terletak di direktori site.com yang berlokasi di / home / user / www. Ini bisa nyaman, karena pengguna pengguna tidak perlu meninggalkan batas direktori rumahnya ketika bekerja dengan situs tersebut.

Kami menetapkan izin untuk direktori pengguna (untuk berjaga-jaga):

# chmod 755 / home / user

Buat direktori untuk situs:

$ mkdir / home / user / www / rumah / pengguna / www / situs. Kami menempatkan

tautan simbolis ke direktori situs:

# ln -s /home/user/www/site.com /var/www/site.com

Untuk menambah akses melalui HTTP, buka file:

# nano /etc/apache2/sites-available/000-default.conf

Atau untuk menambahkan akses melalui HTTPS buka file:

# nano /etc/apache2/sites-available/default-ssl.conf

Dan tambahkan konten berikut ke file terbuka sebelum tag penutup / VirtualHost:

 <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> 

Kami me-restart server web:

# service apache2 restart Kami

memeriksa ketersediaan situs di http: // 127.0.0.1/site.com atau https: // 127.0.0.1/site.com (metode cek - lihat di bawah). Perlu dicatat bahwa situs akan terbuka terlepas dari ketersediaan file .htaccess, karena arahan: "Wajibkan semua yang diberikan" diatur untuk direktori dengan situs.

Opsi untuk menambahkan situs dengan akses HTTP atau HTTPS menggunakan host virtual baru dan mengatur akses ke situs melalui nama domainnya, bukan IP.

Kondisi tugasnya sama seperti di atas: katakanlah kita perlu menambahkan situs baru ke server kami yang terletak di direktori situs .com terletak di / home / user / www. Tapi sekarang saya masih ingin mengakses situs dengan memasukkan hanya nama domainnya ke dalam baris browser.

Kami menetapkan izin untuk direktori pengguna (untuk berjaga-jaga):

# chmod 755 / home / user

Membuat direktori untuk situs:

$ mkdir /home/user/www/site.com Kami menempatkan

tautan simbolis ke direktori situs:

# ln -s / home / user /www/site.com /var/www/site.com

Untuk menambahkan akses HTTP, buat file:

# nano /etc/apache2/sites-available/site.com.conf

Dan tambahkan konten berikut ke dalamnya:

 <VirtualHost *:80> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # Redirect HTTP->HTTPS #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Atau untuk menambahkan akses melalui HTTPS, buat file:

# nano /etc/apache2/sites-available/site.com-ssl.conf

Dan tambahkan konten berikut ke dalamnya:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

Tambahkan baris "127.0.0.1 site.com" ke

/ etc / hosts : # echo >> / etc / hosts 127.0.0.1 site.com

Aktifkan host HTTP:

# a2ensite site.com.conf

Atau aktifkan host HTTPS:

# a2ensite site. com-ssl.conf Kami

me-restart server web:

# service apache2 restart Kami

memeriksa ketersediaan situs di http: // site.com atau https: // site.com (metode cek - lihat di bawah). Perlu dicatat bahwa situs akan terbuka terlepas dari ketersediaan file .htaccess, karena arahan: "Wajibkan semua yang diberikan" diatur untuk direktori dengan situs.

Semua tindakan dilakukan di dalam mesin virtual tamu. Akan menarik untuk "membuka" situs di browser sistem host. Itu tidak sulit.Kami tahu nama domain dan alamat IP dari mesin tamu. Jika sistem host adalah Windows, maka Anda perlu membuka file c: \ Windows \ System32 \ drivers \ etc \ hosts dan tambahkan baris berikut di bagian paling akhir:

192.168.233.138 site.com

Setelah perubahan ini, komputer atau sistem host harus memulai ulang. Sekarang, ketika Anda membuka site.com di browser Anda, akses ke sana akan dialihkan ke mesin virtual kami. Bahkan, kami melakukan perutean paling sederhana di Internet pribadi kami di tingkat sistem operasi host.

Jika Anda memerlukan akses ke virtual host hanya melalui HTTPS, tetapi tidak ingin kehilangan koneksi melalui HTTP, Anda dapat mengonfigurasi redirect:

- buat file /etc/apache2/sites-available/site.com.conf sesuai dengan instruksi di atas, jika tidak dibuat
- dalam file /etc/apache2/sites-available/site.com.conf, batalkan komentar pada tiga baris RewriteEngine / RewriteCond / RewriteRule
- aktifkan host situs.com.conf jika tidak diaktifkan
- restart server: # service apache2 restart

Memeriksa kesehatan situs yang ditambahkan

Cara termudah untuk memeriksa ketersediaan situs adalah dengan menempatkan file index.html dengan beberapa konten di direktori rootnya.

Buat file index.html:

$ nano /home/user/www/site.com/index.html

dan tambahkan konten berikut ke dalamnya:

 <html> <head> <title>TEST OK</title> </head> <body> <h1>TEST OK</h1> </body> </html> 

Bergantung pada metode penambahan situs, buka di browser Anda alamat http: // 127.0.0.1/site.com (https: // 127.0.0.1/site.com) atau http: // site.com (https: // site.com ) - halaman yang berisi teks "TEST OK" harus terbuka.



Referensi MySQL


Membuat pengguna pengguna123 dengan kata sandi pass123 dan basis data db123 melalui konsol.

Masukkan mysql dengan memasukkan kata sandi superuser mysql ketika diminta:

# mysql -u root -p

Dan buat database (Anda tidak perlu mengetikkan awalan "mysql>", tanda titik koma wajib di akhir):

mysql> CREATE DATABASE `db123`;

Buat pengguna pengguna123 dengan kata sandi pass123:

mysql> CREATE USER 'user123' @ 'localhost' IDENTIFIEDED BY 'pass123';

Berikan hak istimewa kepada pengguna pada database:

mysql> GRANT ALL PRIVILEGES ON `db123`. * UNTUK 'user123' @ 'localhost';

Perbarui tabel hak istimewa:

mysql> FLUSH PRIVILEGES;

Keluar dari mysql:

mysql> keluar

Untuk memeriksa, buka alamat http: // 127.0.0.1/phpmyadmin dan masuk dengan detail akses user123 / pass123. Akses ke basis data db123 seharusnya terbuka.

Mengubah kata sandi untuk root mysql dengan pass123 ke pass456:

# mysqladmin -uroot -ppass123 kata sandi pass456

Mengubah kata sandi untuk user123 dari pass123 ke pass456:

# mysqladmin -uuser123 -ppass123 kata sandi pass456

Menghapus user123:

mysql> DROP USER 'user123' @ 'localhost' ;

Menghapus tabel db123:

mysql> DROP DATABASE `db123`;



Bahan referensi Fail2ban


Restart layanan:

# service fail2ban restart

Memeriksa aturan yang sedang berjalan:

# fail2ban-client status

Statistik terperinci tentang aturan sshd:

# fail2ban-client status ssh

Unbanning:

# fail2ban-client set ssh unbanip Banned_IP



Kembali ke awal, ke daftar isi .



Sejarah menciptakan cloud rumah.Bagian 2. Membuat server - mengatur LAMP di Debian.
Versi teks: 1.0.1.
Tanggal publikasi pertama: 30/01/2018.
Terakhir diedit: 15/01/2020.

Perbarui log
1.0.1 [15-01-2020]
Memperbarui daftar isi.

1.0.0 [30-01-2018]
Versi pertama.
Menjelaskan cara menginstal dan mengkonfigurasi LAMP di Debian 8.7.x.

Source: https://habr.com/ru/post/id409915/


All Articles