Cấu hình Firewall CSF giảm thiệt hại DDOS

Tác giả: 11/03/2023

Để tiếp tục về bài viết Cài đặt và hướng dẫn sử dụng tường lửa CSF , hôm nay Nhân Hòa sẽ hướng dẫn các bạn cấu hình firewall CSF để hạn chế được phần nào thiệt hại của các cuộc tấn công ở dạng tấn công trực diện hoặc quy mô mạng botnet nhỏ.

Bài viết của mình sẽ nói về 2 mục chính :

  • Cấu hình CSF giảm thiểu thiệt hại của DDOS
  • Cluster CSF cho các cụm máy chủ

I- Firewall CSF 

CSF (Config Server Security & Firewall) là tường lửa Stateful Packet Inspection (SPI) mã nguồn mở phổ biến giúp bảo vệ hệ thống trên hệ điều hành Linux.

Ngoài các tính năng cơ bản của Firewall là filter packet in/out thì CSF còn hỗ trợ ngăn chặn các cuộc tấn công như Brute Force, DDOS …

CSF có thể cấu hình block/restrict port để giới hạn port truy cập. Đồng thời CSF duy trì danh sách whitelist và blacklist để kiểm soát truy cập.

CSF cũng cung cấp Connection Limiting để giới hạn số lượng kết nối, Rate Limiting để giới hạn tần số truy cập, Real Time Block List và Port Scan Tracking (chống Scan Port).

Mình demo trên Template Centos 7  Directadmin , template này của Nhân Hòa có cài sẵn Firewall CSF, nếu các bạn đang sử dụng template khác, bạn hãy kiểm tra xem đã cài CSF hay chưa, nếu bạn muốn dùng CSF thì hãy cài CSF theo link wiki Nhân Hòa bên trên .

Các nội dung mình có đề cập ở phần này:

  • Ẩn IP máy chủ
  • Hạn chế hoặc bỏ các port không sử dụng trên máy chủ
  • Port Scan Tracking
  • Cấu hình Port Flood – Port Knocking
  • Phòng chống SYN flood
  • Connection Limit
  • IP Blocklists
  • CSF allow /deny theo quốc gia.
  • Server quá tải

1 – Ẩn IP máy chủ

Có một dịch vụ DNS miễn phí đó là dịch vụ DNS của CloudFlare, khi các bạn cấu hình các bản ghi ở đây thì CloudFlare có tính năng ẩn IP máy chủ của bạn.

 

Bản chất nó chính là cụm proxy server , request sẽ đi qua proxy này trước sau đó mới gửi mới đến máy chủ của bạn.

Bạn phải cấu hình bản ghi có đám mây màu vàng thì trạng thái proxy mới được kích hoạt, nếu đám mây màu xám có nghĩa là request sẽ được gửi thẳng đến máy chủ của bạn.

Địa chỉ 104.21.46.58 chính là địa chỉ của Proxy CloudFlare.

Tài khoản Cloudflare free  cung cấp tính năng ẩn IP máy chủ như trên và tính năng lọc IP của các mạng là các mạng IP spam,proxy xấu, mạng của botnet để chặn, nếu website của bạn đang bị tấn công, bạn hãy quan tâm đến 2 vấn đề này

  • Bật proxy cho bản ghi
  • Kích hoạt Under Attack Mode

Và tất nhiên nếu bạn trả phí thì sẽ có nhiều tính năng hơn

2 – Hạn chế các port không sử dụng

Các bạn quan tâm đầu tiên đến giá trị thời gian chặn, và số lượng IP chặn đó là

DENY_IP_LIMIT = “200” đây là giá trị mặc định, bạn hãy tăng số lượng chặn này lên và thời gian chặn khi vi phạm, các giá trị thường để là 1800s hoặc 3600s.

Cấu hình mặc định của CSF là mở các port chiều IN và OUT như hình vẽ

Một website thông thường chỉ sử dụng các port TCP sau

25,53,80,110,143,443,465,587,993,995

Trong đó các port 80 và 443 là dành cho dịch vụ web,53 là DNS, các port còn lại sử dụng cho việc gửi nhận email.

Như port 22 bạn có thể dùng ssh key hoặc đổi port lên 1 giá trị cao ~ 50000 , không sử dụng ftp mà sử dụng upload luôn qua http

Các port còn lại các bạn có thể cấu hình cho phép kết nối theo địa chỉ IP public của bạn hoặc hoặc khóa port bằng cách xóa port tại dòng này và reload csf qua giao diện directadmin hoặc chạy câu lệnh

csf -r

Thường thì TCP_OUT để  port  25 53 80 443 465 587  dùng để send mail và kết nối máy chủ với website khác.

Cũng tương tự UDP chỉ cần sử dụng  UDP 53 sau khi hoàn tất cài đặt website, máy chủ khi cần kết nối ra bên ngoài.

3 – Port Scan Tracking – Chống scan Port

Thường thì kẻ tấn công sẽ scan IP của bạn xem đang có những dịch vụ gì, cần phải thăm dò trước, những port nào mở…

Port scan là một phương pháp để xác định cổng nào trên mạng được mở

CSF có khả năng chặn các địa chỉ IP tham gia vào quá trình port scan bằng cách sử dụng tính năng Port Scan Tracking. Tính năng này hoạt động bằng cách quét các gói tin bị Iptables block trong syslog. Nếu địa chỉ IP tạo port block được ghi lại log nhiều hơn giá trị PS_LIMIT trong vòng PS_INTERVAL giây, địa chỉ IP sẽ bị chặn

Ví dụ: Khi PS_INTERVAL được đặt ở giá trị mặc định là 300 và PS_LIMIT được đặt ở 10, bất kỳ địa chỉ IP nào được ghi lại hơn 10 lần trong khoảng thời gian 300 giây sẽ bị chặn

Chặn luôn IP khi scan port bạn hãy để 2 giá trị này là 1:1 và reload lại csf.

4 – Cấu hình Port Flood – Port Knocking

Giám sát tổng số lượng kết nối từ một IP tới một cổng trong một khoảng thời gian chỉ ra với thiết lập PORTFLOOD. Giá trị gán vào có dạng

PORTFLOOD = “port;tcp;tổng số kết nối;thời gian kết nối trong ? giây”

Ví dụ:

Có nghĩa là 1 IP nào đó kết nối tới cổng 80 bằng giao thức tcp, trong vòng 5s mà tạo ra tới 50 kết nối thì bị block

Để cấu hình chính xác thông tin các thông số ở phần này các bạn lưu ý hãy cho địa chỉ IP công ty bạn hoặc đối tác vào whitelist, nếu không có thể gây chặn nhầm.

5 – Phòng chống SYN flood


Trong đó SYNFLOOD = “1” để kích hoạt SYN FLOOD. SYNFLOOD_RATE thiết lập số gói SYN gửi tới từ 1 IP /1s. Số lần mà một IP có thể chạm tới SYNFLOOD_RATE trước khi bị block.

6- Connection Limit

Cấu hinh tại CONNLIMIT=”” với giá trị gán là “port1;limit1,port2,limit2 …”

Ví dụ:

Có nghĩa là cổng 80 (http) cho phép 50 kết nối với 1 IP => Như vậy từ một máy tạo ra truy cấn liên tục tới server tạo ra quá 50 kết nối sẽ bị block, cổng 22 (ssh) là 50 kết nối 1 IP

Để cấu hình chính xác thông tin các thông số ở phần này các bạn lưu ý hãy cho địa chỉ IP công ty bạn hoặc đối tác vào whitelist, nếu không có thể gây chặn nhầm.

7 – IP Block List – Cập nhật danh sách IP cần chặn

CSF cung cấp khóa cả danh sách IP, bằng cách đưa URL của danh sách đó vào file /etc/csf/csf.blocklists. Bạn có thể mở file đó ra thêm các danh sách IP mà các dịch vụ phát hiện IP SPAM cung cấp

Tính năng này cho phép csf và lfd tải xuống định kỳ danh sách địa chỉ IP và CIDR từ published block hoặc black list. Danh sách blocklists được khai báo trong file: /etc/csf/csf.blocklists

Mỗi block list phải được liệt kê dưới dạng NAME|INTERVAL|MAX|URL

  • NAME: List name với tất cả các ký tự chữ cái viết hoa không có khoảng trắng và tối đa 25 ký tự – tên này sẽ được sử dụng làm Iptables chain name
  • INTERVAL: Khoảng thời gian làm mới để tải xuống danh sách, tối thiểu phải là 3600s và tối đã 86400s
  • MAX: Đây là số lượng địa chỉ IP tối đa để sử dụng từ danh sách, giá trị bằng 0 có nghĩa là tất cả IP đều được sử dụng
  • URL: URL để tải xuống danh sách

Các bạn chỉ cần bỏ #  và cân nhắc nên chặn theo các danh sách nào, vì đôi khi nó cũng sẽ ảnh hưởng đến dịch vụ của bạn.

8 – Allow / Deny IP theo quốc gia

Cho phép và từ chối các truy cập quốc tế và server của mình. Để làm như vậy vân nhập country code vào danh sách được phân tách bởi dấu phẩy. Ví dụ:

# Each option is a comma separated list of CC’s, e.g. “US,GB,DE”
CC_DENY = “”
CC_ALLOW = “”

Khi sử dụng CC_ALLOW, IP sẽ được allow mà không quan tâm đến Port. Ta có thể sử dụng CC_ALLOW_POT để cho phép truy cập từ các quốc gia nhưng vẫn dựa trên port

9 Server Quá Tải

CSF mặc định có kiểm tra mức độ hoạt động của CPU xem nó có bị quá tải hay không. Nếu có sự kiện đó xảy ra thì một email sẽ được gửi đi, trong nhiều trường hợp quá tải dẫn tới Server bị treo. Bạn có thể thiết lập khi quá tải CPU như vậy sẽ chạy script bạn tạo ra để làm một số việc bạn thiết lập ví dụ như khởi động lại Apache

Giả sử bạn tạo ra một script để khởi động lại Apache, lưu tại /restartapache.sh

chmod +x /restartapache.sh

Và giá trị

PT_LOAD_ACTION = "/restartapache.sh"

 


Như vậy Nhân Hòa đã giới thiệu đến các bạn cách cấu hình giảm thiểu thiệt hại của DDOS, một loại tấn công làm quá tải máy chủ.

Hy vọng bài viết sẽ giúp ích được cho các bạn.

Trả lời