Cấu hình bảo mật cho header của website Caddyserver

27 Likes Comment

Khi bạn dùng caddy mà muốn cấu hình bảo mật một số thông tin như CORS hoặc cấu hình chặn Iframe thì chúng ta có thể cấu hình đơn giản thông qua các block của caddy file hiệu quả

trong bài này mình sẽ tiếp tục dùng cấu hình trong bài hướng dẫn caddy bạn có thể xem cấu hình ở bài này Ẩn Một Số Thư Mục Quan Trọng Với Caddy Server

Cấu trúc của block header sẽ như sau

header [<matcher>] [[+|-|?]<field> [<value>|<find>] [<replace>]] {
	# Replace
	<field> <find> <replace>

	# Add or Set
	[+]<field> <value>

	# Delete
	-<field>

	# Default
	?<field> <value>

	[defer]
}

Các giá trị cần lưu ý trong cấu hình

field: Tên của giá trị trong header field, ví dụ một hear như sau:

Content-Type: text/html; charset=utf-8

Thì chúng ta sẽ có trường field này là Content-Type, với dữ liệu này thì nó sẽ đi cùng 3 cách cấu hình tương ứng với 3 dấu

  • Dấu +: thêm dữ liệu vào giá trị header và nghi đè lên giá trị đó nếu chúng đã tồn tại, mặc định hệ thống sẽ là + và ghi đè.
  • Dấu -: xóa giá trị đã tồn tại có thể dùng * ở cuối của 1 từ để xóa hết các giá trị khớp với nó theo regex, ví dụ có nhiều giá trị như Content-Type, Content-Type-x, Content-Type-y… thì bạn có thể dùng Content-Type* để xóa toàn bộ những giá trị đó mà không cần cấu hình nhiều
  • Dấu ?: sẽ cài đặt giá trị cho 1 value của header với điều kiện nó chưa có nếu có rồi thì nó sẽ không ghi đè như với dấu +

Value: Giá trị của header field sẽ được thêm vào

Find: tìm kiếm giá trị để phục vụ việc xóa bỏ hoặc thay thế

replace: Giá trị cần thay thế

defer: cái này thì mặc định bật bạn không cần quan tâm và tắt đi nó có tác dụng là kiểm soát giá trị backend trả về cho end user để đảm bảo quá trình xóa hoặc thêm giá trị hoàn thành trước khi gửi đi

Từ cấu hình trên ta có một cấu hình hoàn chỉnh như sau:

header +Custom-Header "My value"
header ?Cache-Control "max-age=3600"
header -Content-Type: text/html; charset=utf-8

Với cấu hình này thì có nghĩa mình sẽ:

  • Ghi đè: Custom-Header với giá trị My Value
  • Thêm giá trị Cache-Control nếu nó không tồn tại
  • Xóa cấu hình Content-Type trong header

Từ đó căn cứ vào nhu cầu chúng ta sẽ cấu hình từ

{
        order coraza_waf first
}

caddy.manhtuong.net {
        coraza_waf {
                include /etc/caddy/waf/config.conf
                include /etc/caddy/waf/whitelist.conf
                include /etc/caddy/waf/coreruleset/crs-setup.conf.example
                include /etc/caddy/waf/coreruleset/rules/*.conf
        }
        route {
                rate_limit {body.id} 2r/m
        }
        file_server {
	        hide .git
        }
        root * /home/caddy/web
        php_fastcgi unix//run/php/php7.4-fpm.sock
        log {
                output file /home/caddy/caddy.manhtuong.net.log
        }
}

Thành

{
        order coraza_waf first
}

caddy.manhtuong.net {
        coraza_waf {
                include /etc/caddy/waf/config.conf
                include /etc/caddy/waf/whitelist.conf
                include /etc/caddy/waf/coreruleset/crs-setup.conf.example
                include /etc/caddy/waf/coreruleset/rules/*.conf
        }
        route {
                rate_limit {body.id} 2r/m
                header +Custom-Header "My value"
                header ?Cache-Control "max-age=3600"
                header -Content-Type text/html; charset=utf-8
        }
        file_server {
	        hide .git
        }
        root * /home/caddy/web
        php_fastcgi unix//run/php/php7.4-fpm.sock
        log {
                output file /home/caddy/caddy.manhtuong.net.log
        }
}

Các bạn căn cứ nhu cầu cài đặt mà tùy chỉnh thành dữ liệu mình cần.

Nếu bạn cần một cấu hình áp dụng cho toàn bọ máy chủ của mình thì bạn cần tạo một snippets cho cấu hình này như sau

(cors) {
  @cors_preflight method OPTIONS
  @cors header Origin {args.0}

  handle @cors_preflight {
    header Access-Control-Allow-Origin "{args.0}"
    header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE"
    header Access-Control-Allow-Headers "Content-Type"
    header Access-Control-Max-Age "3600"
    respond "" 204
  }

  handle @cors {
    header Access-Control-Allow-Origin "{args.0}"
    header Access-Control-Expose-Headers "Link"
  }
}

bạn cần thay hết các thông tin về các giá trị bạn cần cài đặt mặc định sẽ là + và ghi đè dữ liệu, đẻ chạy được đoạn snippets này thì chúng ta cần dùng hàm import vào nơi chúng ta cần thì có thể chạy được cấu hình chúng ta mong muốn và kết quả chúng ta có một cấu hình hoàn chỉnh nó sẽ như sau

{
        order coraza_waf first
}

(cors) {
  @cors_preflight method OPTIONS
  @cors header Origin {args.0}

  handle @cors_preflight {
    header Access-Control-Allow-Origin "{args.0}"
    header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE"
    header Access-Control-Allow-Headers "Content-Type"
    header Access-Control-Max-Age "3600"
    respond "" 204
  }

  handle @cors {
    header Access-Control-Allow-Origin "{args.0}"
    header Access-Control-Expose-Headers "Link"
  }
}

caddy.manhtuong.net {
        coraza_waf {
                include /etc/caddy/waf/config.conf
                include /etc/caddy/waf/whitelist.conf
                include /etc/caddy/waf/coreruleset/crs-setup.conf.example
                include /etc/caddy/waf/coreruleset/rules/*.conf
        }
        import cors https://caddy.manhtuong.net
        route {
                rate_limit {body.id} 200r/s
        }
        file_server {
	        hide .git
        }
        root * /home/caddy/web
        php_fastcgi unix//run/php/php7.4-fpm.sock
        log {
                output file /home/caddy/caddy.manhtuong.net.log
        }
}

tùy vào điều kiện mà bạn có thể tùy chỉnh cấu hình cho phù hợp với ứng dụng của mình!

0 0 votes
Article Rating

You might like

Avatar

About the Author: Vô Ưu

Xin chào! Tôi là Vouu, người sáng lập blog này. Tôi là một người yêu thích. Tôi có một công việc ban ngày với tư cách là một chuyên viên bơm vá săm xe các loại, và trang web này là một trong những hoạt động yêu thích của tôi, đặc biệt là trong những lúc rảnh rỗi. Hy vọng bạn thích sử dụng trang web này, và nó sẽ mang lại cho bạn nhiều điều bổ ích. Phản hồi từ người đọc sẽ truyền cảm hứng cho tôi để tôi có thể viết được nhiều hơn nữa !. Bạn chỉ cần để lại nhận xét bên dưới nếu bạn thấy bài viết này hữu ích. Chúc bạn ngày mới tốt lành!
Subscribe
Notify of
guest
0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x