127.0.0.1 localhost
127.0.0.1 test-site
127.0.1.1 my-hostname
# The following lines are desirable for IPv6 capable hosts. etc...
test-site
"localhost" ตัวที่สองอยู่ที่ไหน และmy-hostname
เป็น "ระบบชื่อโฮสต์" /etc/hostname
ที่กำหนดไว้ใน
2. คุณควรกำหนดและเปิดใช้งานVirtual Host (VH):
มี HTTP VH เริ่มต้น /etc/apache2/sites-available/
มันวางอยู่ใน 000-default.conf
ชื่อไฟล์เป็น คุณต้องแก้ไขมัน (คุณสามารถเปลี่ยนชื่อได้หากคุณต้องการหรือสร้างไฟล์. conf อื่น ๆ ขึ้นอยู่กับว่ามัน) และหลังจากนั้นคุณต้องเปิดใช้งาน
คุณสามารถเปิดใช้งานได้ด้วยตนเองผ่านการสร้าง "ลิงก์สัญลักษณ์นุ่ม":
sudo ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/
หรือคุณสามารถใช้เครื่องมือ Apache2 ที่เรียกว่าa2ensiteซึ่งทำสิ่งเดียวกัน:
sudo a2ensite 000-default.conf
สมมติว่ามีโฮสต์เสมือน 3 แห่ง SSL ที่เปิดใช้งานและโดเมนส่วนตัวที่ลงทะเบียน (ตัวอย่างเช่น SOS.info):
/etc/apache2/sites-available/http.SOS.info.conf
/etc/apache2/sites-available/https.SOS.info.conf
และสิ่งที่ถูกสร้างขึ้นเพื่อวัตถุประสงค์ของหัวข้อนี้:
/etc/apache2/sites-available/http.test-site.conf
เนื้อหาของ 2 VHs แรกคือ:
$ cat /etc/apache2/sites-available/
http.SOS.info.conf
<VirtualHost *:80>
ServerName SOS.info
ServerAlias www.SOS.info
ServerAdmin admin@SOS.info
# Redirect Requests to SSL
Redirect permanent "/" "https://SOS.info/"
ErrorLog ${APACHE_LOG_DIR}/http.SOS.info.error.log
CustomLog ${APACHE_LOG_DIR}/http.SOS.info.access.log combined
</VirtualHost>
อันนี้เปลี่ยนเส้นทางคำขอ HTTP ทั้งหมดไปยัง HTTPS
$ cat /etc/apache2/sites-available/
https.SOS.info.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName SOS.info
ServerAlias www.SOS.info
ServerAdmin admin@SOS.info
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/SOS.info.crt
SSLCertificateKeyFile /etc/ssl/private/SOS.info.key
SSLCertificateChainFile /etc/ssl/certs/SOS.info.root-bundle.crt
#etc..
</VirtualHost>
</IfModule>
นี่คือ HTTPS VH
เนื้อหาของไฟล์ทั้งสองนี้สามารถโพสต์ในไฟล์เดียว แต่ในกรณีนี้การจัดการ ( a2ensite
/ a2dissite
) ของพวกเขาจะยากขึ้น
โฮสต์เสมือนที่สามคือซึ่งสร้างขึ้นเพื่อวัตถุประสงค์ของเรา :
$ cat /etc/apache2/sites-available/
http.test-site.conf
<VirtualHost *:80>
ServerName test-site
ServerAlias test-site.SOS.info
DocumentRoot /var/www/test-site
DirectoryIndex index.html
ErrorLog ${APACHE_LOG_DIR}/test-site.error.log
CustomLog ${APACHE_LOG_DIR}/test-site.access.log combined
<Directory /var/www/test-site>
# Allow .htaccess
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
3. ด้วยการกำหนดค่านี้คุณควรเข้าถึง:
http://localhost # pointed to the directory of the mine Domain
https://localhost # iin our case: /var/www/html (SOS.info), but you should get an error, because the SSL certificate
http://SOS.info # which redirects to https://SOS.info
https://SOS.info # you should have valid SSL certificate
http://www.SOS.info # which is allied to http://SOS.info and redirects to https://SOS.info
https://www.SOS.info # which is allied to https://SOS.info
ในตัวอย่างหลักคุณควรเข้าถึงและ :
http://test-site # pointed to the directory /var/www/test-site
http://test-site.SOS.info # which is allied to http://test-site
ลองเปิดไซต์ในเว็บเบราว์เซอร์หรือลอง (ในเทอร์มินัล) ด้วยคำสั่งถัดไป:
$ curl -L http://test-site/index.html
$ curl -L http://test-site.SOS.info/index.html
แน่นอนคุณต้องมีบางindex.html
หน้าใน DocumentRoot ของพวกเขา :)
ฉันจะทิ้งโน้ตตัวต่อไปด้วยเหตุผลของการคุยโว :)
4. คุณต้องกำหนดค่าอย่างถูกต้อง `/ etc / apache2 / apache2.conf '
ฉันควรใช้เวลาในการปรับปรุงความปลอดภัยของเซิร์ฟเวอร์ของคุณ เหล่านี้เป็นคู่มือเกี่ยวกับการกำหนดค่าความปลอดภัย: วันที่ 1และครั้งที่ 2 ที่นี่คุณสามารถรับใบรับรอง SSL ฟรี เว็บไซต์เหล่านี้จะช่วยให้คุณสามารถตรวจสอบความคืบหน้าของคุณ: ที่ 1และครั้งที่ 2
ตาม/etc/apache2/apache2.conf
ไฟล์คู่มือความปลอดภัยข้างต้นต้องมีลักษณะดังนี้:
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 60
#KeepAlive Off
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options None FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /var/www/>
Options None FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
# Hide Server type in the http error-pages
ServerSignature Off
ServerTokens Prod
# Etag allows remote attackers to obtain sensitive information
FileETag None
# Disable Trace HTTP Request
TraceEnable off
# Set cookie with HttpOnly and Secure flag.
# a2enmod headers
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
# Clickjacking Attack
Header always append X-Frame-Options SAMEORIGIN
# CX-XSS Protection
Header set X-XSS-Protection "1; mode=block"
# Disable HTTP 1.0 Protocol
RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1.1$
RewriteRule .* - [F]
# Change the server banner @ ModSecurity
# Send full server signature so ModSecurity can alter it
ServerTokens Full
# Alter the web server signature sent by Apache
<IfModule security2_module>
SecServerSignature "Apache 1.3.26"
</IfModule>
Header set Server "Apache 1.3.26"
Header unset X-Powered-By
# Hde TCP Timestamp
# gksu gedit /etc/sysctl.conf
# >> net.ipv4.tcp_timestamps = 0
# Test: sudo hping3 SOS.info -p 443 -S --tcp-timestamp -c 1
# Disable -SSLv2 -SSLv3 and weak Ciphers
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
5. ตั้งค่าไฟร์วอลล์
ในการอนุญาต / ปฏิเสธการเข้าถึงเว็บเซิร์ฟเวอร์ของคุณจากภายนอกคุณสามารถใช้UFW (Uncomplicated Firewall):
sudo ufw allow http
sudo ufw allow https
หากต้องการอนุญาตให้tcp
ใช้โปรโตคอลเท่านั้น:
sudo ufw allow http/tcp
sudo ufw allow https/tcp
คุณสามารถใช้และหมายเลขพอร์ตโดยตรง:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
ในกรณีที่คุณสามารถโหลด "กฎตาราง":
sudo ufw reload
คุณสามารถใช้และ interface GUI UFW ที่เรียกว่าgufw
sudo apt update
sudo apt install gufw
gufw &
เลือกOffice
โปรไฟล์ มันจะตั้ง: Status:ON
, Incoming:Deny
และOutgoing:Allow
และเพิ่มกฎของคุณ
6. ถ้าคุณมีเราเตอร์อย่าลืมส่งต่อพอร์ต:
หากคุณมีเราเตอร์และต้องการให้เว็บเซิร์ฟเวอร์ของคุณสามารถเข้าถึงได้จากอินเทอร์เน็ตอย่าลืมเพิ่มการส่งต่อพอร์ต บางอย่างเช่นนี้
ServerName 192.168.0.2
บรรทัดเป็นคำสั่ง ServerName ควรมีชื่อเช่น www.server.com และไม่ใช่หมายเลข IP ฉันคิดว่านี่สามารถแก้ปัญหาได้ สำหรับ ServerName คุณควรป้อนชื่อของเซิร์ฟเวอร์หากคุณมี ServerName อนุญาตให้ใช้ชื่อโฮสต์เสมือนจริงซึ่งอนุญาตให้มีเว็บไซต์เพิ่มเติมใน IP เดียวกัน