Cách dùng .htaccess và .htpasswd để tạo bảo mật 2 lớp, tùy biến loại trừ các khu vực cần bảo vệ dùng Apache và Openlitespeed

Khi bạn cần bảo vệ website hay chống ddos thì htpasswd là giải pháp tạm thời giúp ngăn chặn.

1. ĐỐI VỚI APACHE

Đôi khi bạn cần loại trừ 1 số thư mục hay 1 số khu vực không cần bảo vệ, bạn cần áp dụng cách làm sau:

Ở file .htaccess bạn cần nhập nội dung sau

AuthType Basic
AuthName “Vui long nhap username va pass”
AuthUserFile /home/domains/public_html/domain.com/.htpasswd

Require valid-user

AuthUserFile: bạn phải nhập đường dẫn tuyệt đối nơi chứa file .htpasswd đây là file chứa thông tin username và mật khẩu

Nội dung file .htpasswd

admin:{SHA}rlraZ+RzrYgHcJ2HDOjkxtTb+cA=

Các bạn cần vào https://hostingcanada.org/htpasswd-generator/ để tạo mật khẩu đúng chuẩn của htpasswd

File .htaccess bạn để ở thư mục gốc ngang hàng index để giúp bảo vệ toàn bộ website, file htpasswd bạn có thể để bất kỳ đâu, lúc khai báo đường dẫn tuyệt đối cần chính xác, hoặc cũng có để ngang hàng file index ở thư mục gốc.

Nếu làm tới bước này thì bạn đã thành công bảo vệ toàn bộ website, tuy nhiên nếu có 1 thư mục nào đó bạn cần người khác truy cập mà không cần phải xác thực hay bảo vệ thì làm bước tiếp theo.

Mình ví dụ thư mục không cần bảo vệ là thư mục chứa ảnh tên là uploads vậy thì chúng ta sẽ tạo thêm 1 file .htaccess nằm trong thư mục uploads với nội dung sau:

# Tắt xác thực cho thư mục “uploads”
Satisfy any
Allow from all

Code trên ý nghĩa là cho phép tất cả truy cập vào thư mục này.

Bên trên là cách sử dụng htaccess và htpasswd 1 cách linh động trong dự án của bạn nhé.

2. ĐỐI VỚI OPENLITESPEED

Đối với server Openlitespeed có 2 cách để tạo bảo mật.

  1. Dùng giao diện Webgui, nếu bạn cài script quản trị server WPtangtoc OLS thì làm như sau:
    1. Bạn cần kích hoạt giao diện Webgui

Click vào menu Virtual Hosts và chọn vào view domain bạn cần

Tạo Realm bấm vào tab security => kéo xuống dưới cùng bên góc phải nhấn vào dấu cộng [+]

Điền Realm Name, điền User DB Location: $SERVER_ROOT/conf/vhosts/$VH_NAME/ [Thư mục nơi chứa file username và pass]

Điền các thông tin như trong hình dưới, URI: / nghĩa là áp dụng xác thực với toàn bộ đường dẫn từ domain gốc

Tiếp đến nhấn Load để reset lại Openlitespeed

Dùng phương pháp code config.

Bạn vào thư mục chứa config sau: /usr/local/lsws/conf/vhosts/domain.com tìm mở file domain.com.conf

Trong file nội dung bạn thêm như sau:

Tạo Realm verify như sau:

realm verify {

userDB {
location $SERVER_ROOT/conf/vhosts/$VH_NAME/htpasswd
}

groupDB {
location $SERVER_ROOT/conf/vhosts/$VH_NAME/htgroup
}

}

Tạo URI / như sau:

context / {
location /usr/local/lsws/domain.com/html
allowBrowse 1
extraHeaders <<<END_extraHeaders
X-XSS-Protection 1;mode=block
X-Frame-Options SAMEORIGIN
Referrer-Policy strict-origin-when-cross-origin
X-Content-Type-Options nosniff
X-Powered-By WPTangTocOLS
permissions-policy accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()
END_extraHeaders

realm verify
authName Vui lòng nhập mật khẩu

rewrite {

}
addDefaultCharset off

phpIniOverride {

}
}

 

Code mẫu đầy đủ

docRoot /usr/local/lsws/domain.com/html
vhDomain domain.com
enableGzip 1
cgroups 0

index {
useServer 0
indexFiles index.html index.php
autoIndex 0
}

scripthandler {
add lsapi:domaincom php
}

accessControl {
allow *
}

lsrecaptcha {
enabled 1
type 0
}

extprocessor domaincom {
type lsapi
address uds://tmp/lshttpd/domaincom.sock
maxConns 256
env PHP_LSAPI_CHILDREN=256
env LSAPI_AVOID_FORK=200M
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 25
respBuffer 0
autoStart 2
path /usr/local/lsws/lsphp81/bin/lsphp
backlog 100
instances 1
extUser domainwpcom
extGroup domainwpcom
runOnStartUp 2
priority 0
memSoftLimit 3789M
memHardLimit 3789M
procSoftLimit 4096
procHardLimit 4096
}

context / {
location /usr/local/lsws/domain.com/html
allowBrowse 1
extraHeaders <<<END_extraHeaders
X-XSS-Protection 1;mode=block
X-Frame-Options SAMEORIGIN
Referrer-Policy strict-origin-when-cross-origin
X-Content-Type-Options nosniff
X-Powered-By WPTangTocOLS
permissions-policy accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()
END_extraHeaders

rewrite {

}
addDefaultCharset off

phpIniOverride {

}
}

rewrite {
enable 1
autoLoadHtaccess 1
/usr/local/lsws/domain.com/html/.htaccess
}

module cache {
checkPrivateCache 1
checkPublicCache 1
maxCacheObjSize 10000000
maxStaleAge 200
qsCache 1
reqCookieCache 1
respCookieCache 1
ignoreReqCacheCtrl 1
ignoreRespCacheCtrl 0
storagePath /usr/local/lsws/domain.com/luucache
enableCache 0
expireInSeconds 3600
enablePrivateCache 0
privateExpireInSeconds 3600
ls_enabled 1
}
vhssl {
keyFile /etc/letsencrypt/live/domain.com/privkey.pem
certFile /etc/letsencrypt/live/domain.com/cert.pem
certChain 0
CACertFile /etc/letsencrypt/live/domain.com/chain.pem
sslProtocol 24
renegProtection 1
sslSessionCache 1
sslSessionTickets 1
enableSpdy 15
enableQuic 1
enableStapling 1
ocspRespMaxAge 86400
ocspResponder http://cert.int-x3.letsencrypt.org/
ocspCACerts /etc/letsencrypt/live/domain.com/chain.pem
}

realm domain.comwp {

userDB {
location /usr/local/lsws/domain.com/passwd/.mk
}
}

context exp:wp-login.php {
location $DOC_ROOT/$0
allowBrowse 1
realm domain.comwp

accessControl {
allow ALL
}

rewrite {

}
addDefaultCharset off

phpIniOverride {

}
}

context exp:^/adminlogin(/.*)?$ {
location /usr/local/lsws/domain.com/html
allowBrowse 1
realm domain.comwp

accessControl {
allow ALL
}

rewrite {

}
addDefaultCharset off

phpIniOverride {

}
}

 

Sau khi chèn code xong lưu lại và nhớ Reset Openlitespeed để có hiệu lực

Xem chi tiết ở Video bên dưới:

CÁCH LOẠI TRỪ XÁC THỰC MẬT KHẨU VỚI 1 THƯ MỤC BẤT KỲ.

Trong quá trình bảo vệ tất cả các thư mục, bạn có nhu cầu không cần bảo vệ 1 thư mục ví dụ thư mục uploads vì đây là thư mục chứa ảnh nên không cần xác thực, bạn cần làm như sau với giao diện Webgui

Tại tab context bấm vào dấu + để thêm static thư mục loại trừ xác thực:

Chúng ta có thể tạo xác thực với 1 file cụ thể. Ví dụ nếu tất cả truy vấn của bạn thông qua 1 file route duy nhất là index.php thì bạn có thể tạo Context xác thực cho /index.php là ok, như vậy các dạng file như ảnh trong thư mục upload sẽ không bị ảnh hưởng

context /index.php {
location /usr/local/lsws/domain.com/html/index.php
allowBrowse 1
realm domain.comlogin
authName Vui lòng nhập mật khẩu

accessControl {
allow *
}

rewrite {
enable 1

}
addDefaultCharset off

phpIniOverride {

}
}

Lưu file lại và nhớ Reset Openlitespeed để áp dụng

Như vậy là xong 2 cách

Nếu dùng WPtangtoc Ols thì gõ lệnh wptt reboot-ls để reset Openlitespeed

Tham khảo thêm cách dùng cho các hệ điều hành khác như apache, nginx https://dotrungquan.info/huong-dan-dat-mat-khau-cho-wp-admin/