Ngày càng có nhiều người sử dụng máy chủ VPS để xây dựng trang web, nhưng so với máy chủ ảo hoặc máy chủ được quản lý, máy chủ VPS cá nhân về cơ bản không được quản lý, tức là nhà cung cấp máy chủ chỉ chịu trách nhiệm đảm bảo mạng lưới của máy chủ VPS hoạt động trơn tru. Bạn phải tự mình tìm ra nó. Trước đây, các máy chủ VPS được Alibaba Cloud sử dụng thường xuyên bị CC và DDOS tấn công. Về cơ bản, mỗi lần bị tấn công là chúng sẽ lọt vào “lỗ đen” của Alibaba Cloud.

Các máy chủ VPS của Alibaba Cloud dành cho CC và DDOS thường không thể chống lại quá nhiều lưu lượng truy cập. Một khi lưu lượng tấn công tăng lên, các tuyến đường về cơ bản sẽ bị xóa. Nếu có quá nhiều cuộc tấn công, thậm chí sẽ có một "lỗ đen" trong một hoặc vài ngày. . Bây giờ tôi đã chuyển trang web của mình sang porter CN2 VPS cổ điển. Tôi đã nhận được lời nhắc từ những người bạn nhiệt tình trước đó rằng porter chỉ xử lý CC và DDOS nếu vượt quá ba lần, nó sẽ chặn trực tiếp VPS.

Cuộc tấn công này cũng dạy tôi rằng tôi vẫn cần phải thận trọng khi đặt trang web của mình trên máy chủ VPS cổ điển. Lúc đầu tôi không mở được trang, sau đó được nhiều bạn bè nhắc nhở nên tôi đăng nhập ngay vào backend của nhà cung cấp hosting để kiểm tra. Từ biểu đồ theo dõi, tôi có thể thấy mức sử dụng CPU của VPS đã vượt quá 100. % và tốc độ băng thông vượt quá hàng trăm MB, rõ ràng VPS đã bị nhà cung cấp dịch vụ lưu trữ ngắt kết nối.

Bài viết này sẽ chia sẻ với bạn bè sử dụng VPS hosting để xây dựng website, các bước cơ bản để đối phó với các cuộc tấn công CC và DDOS nhỏ, về cơ bản xoay quanh việc chặn IP độc hại thông qua tường lửa.

Những ý tưởng cơ bản để phòng chống tấn công máy chủ VPS trước CC và DDOS - chiến lược chặn tường lửa chống quét

Để biết thêm về bảo mật trang web và kinh nghiệm xây dựng trang web, có:

  1. Năm mẹo bảo mật khi sử dụng bảng điều khiển VPS miễn phí – đừng để tin tặc lợi dụng
  2. Quá trình trải nghiệm tối ưu hóa php-fpm của Linux-php-fpm chiếm bộ nhớ lớn và không giải phóng các vấn đề về bộ nhớ
  3. Độ phân giải tên miền DNS cho phép DNSSEC ngăn chặn việc chiếm quyền điều khiển DNS-Cài đặt DNS của Google Cloud DNSSEC

PS: Cập nhật ngày 6 tháng 3 năm 2018, Nếu bạn muốn ngăn các IP cụ thể truy cập vào trang web, bạn có thể sử dụng phương pháp này: Chặn trang web và chặn cài đặt truy cập IP cho các khu vực và quốc gia cụ thể - PHP code/Nginx / Cài đặt WordPress.

PS: Cập nhật ngày 19/03/2020 , nếu website của bạn bị hack, bạn có thể tham khảo các phương pháp sau để giải quyết vấn đề: Trojans website và phân tích khắc phục sự cố hack máy chủ - Phương pháp bảo mật máy chủ và máy chủ VPS.

1. Làm bài tập về nhà trước khi xử lý CC và DDOS

Bạn có thể nhanh chóng đánh giá cuộc tấn công hiện tại bằng hai lệnh sau: Nhập lệnh sau để kiểm tra số lượng kết nối của một IP.

netstat -nat|grep -i '80'|wc -l

Sắp xếp các IP được kết nối theo số lượng kết nối và xem trạng thái kết nối TCP.

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

1.1  Sao lưu thường xuyên-kết hợp sao lưu cục bộ và ngoại vi

Sao lưu trang web là một cách chắc chắn để đối phó với các cuộc tấn công CC và DDOS Bất kể cuộc tấn công nào, miễn là dữ liệu không bị phá hủy, chúng ta có thể giảm thiểu tổn thất. Đối với dữ liệu được cập nhật thường xuyên, nên sao lưu mỗi ngày một lần. Một số nhà cung cấp dịch vụ lưu trữ cũng sẽ cung cấp chức năng sao lưu ảnh chụp nhanh, chẳng hạn như Alibaba Cloud, Tencent Cloud và ảnh chụp nhanh Linode đã giới thiệu trước đó.

Ngoài việc sao lưu cục bộ, việc sao lưu bên ngoài trang web là điều đương nhiên. Sao lưu off-site có thể kết hợp với lưu trữ đám mây hoặc đĩa đám mây để lưu dữ liệu. VPS Linux được chia sẻ trước đó có thể tự động tải dữ liệu trên VPS lên đĩa mạng bằng cách gắn Google Drive và Dropbox hoặc sử dụng lưu trữ đám mây DigitalOcean Spaces hoặc chụp đám mây. , Qiniu Cloud Storage, Baidu BOS và các dịch vụ lưu trữ đám mây chuyên nghiệp khác.

1.2  Tìm hiểu cách kiểm tra tải hệ thống VPS Linux

Khi chúng tôi gặp phải các cuộc tấn công CC và DDOS, chúng tôi thường có thể kiểm tra nó thông qua bảng điều khiển của nhà cung cấp dịch vụ lưu trữ VPS. Chúng tôi có thể thấy những "sự bất thường" rõ ràng trong dữ liệu giám sát của mình. Hình ảnh bên dưới hiển thị IO, CPU, bộ nhớ, v.v. được giám sát bởi máy chủ VPS khi tôi bị tấn công, cho thấy tỷ lệ lấp đầy 100%. (Bấm vào để phóng to)

2.2  Sử dụng Fail2ban để chặn IP tấn công

Fail2ban là một phần mềm giám sát được phát triển bằng ngôn ngữ Python, nó gọi iptables để chặn IP đăng nhập tương ứng bằng cách theo dõi thông tin đăng nhập của nhật ký hệ thống nhằm ngăn chặn sự truy cập độc hại của một IP nhất định. Fail2ban đọc tệp nhật ký tương ứng, Debian/Ubuntu:/var/log/auth.log, CentOS/Redhat:/var/log/secure. Cài đặt Fail2ban:

apt-get install fail2ban

#CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban

Sau khi cài đặt hoàn tất, các tệp cấu hình chính nằm trong thư mục /etc/fail2ban, chứa hai tệp và hai thư mục:

Fail2ban.conf: Tệp cấu hình xác định cấp độ nhật ký, vị trí tệp nhật ký và ổ cắm được ghi lại bởi Fail2ban.

jail.conf xác định những dịch vụ đó sẽ được giám sát và một số chiến lược được sử dụng.

Phần đầu của jail.conf là khối cấu hình chung mặc định [DEFAULT]. Cấu hình mặc định được mô tả như sau:

[DEFAULT]
#忽略哪些IP,可以是具体IP、CIDR类型的地址,多个IP用空格分开
ignoreip = 127.0.0.1

#设置IP被锁住的时间,单位为秒
bantime  = 600

#检测时间,在此时间内超过规定的次数会激活fail2ban
findtime  = 600

#尝试的次数
maxretry = 3

#日志检测机器,有"gamin", "polling" and "auto"三种模式。
backend = polling

#发送报警邮件的地址
destemail = root@localhost #默认的动作执行行为,在action.d目录下有各种行为策略,默认是iptables-#multiport
banaction = iptables-multiport

#0.8.1版本后fail2ban默认用sendmail MTA
mta = sendmail

#默认使用tcp协议
protocol = tcp

#定义了各种行动的参数
#banaction参数在action.d目录下具体定义,name port protocol 也可以自己定义
#只禁止IP
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
#即禁止IP又发送email
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
              %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s]
#禁止IP、发送email、报告有关日志			  
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
               %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]

#如果没有定义行为,则默认的行为为action,可选择action_,action_mw, action_mwl 等		
action = %(action_)s

默认配置文件含有此模块
#定义子模块名
[ssh]
#是否激活
enabled = true
#定义port,可以是数字端口号表示,也可以是字符串表示
port= ssh
#过滤规则,在filter.d目录下定义
filter	= sshd
#检测日志的路径
logpath  = /var/log/auth.log
#尝试的次数,覆盖了全局配置的
maxretry = 6
#banaction 在action.d目录下定义,此参数值会替换action中选用的默认行为中定义的banaction参数
banaction = iptables-allports
#注意 port protocol banaction 可以不用分开定义,直接使用action定义也可以,例如:
#action   = iptables[name=SSH, port=ssh, protocol=tcp]
#在子模块中定义的port protocol banaction 都会在action_ action_mw, action_mwl中替换成具体的设置值。

Các chức năng thư mục khác của Fail2ban được mô tả như sau:

Thư mục filter.d xác định các quy tắc lọc dựa trên tệp nhật ký, chủ yếu sử dụng các biểu thức chính quy để khớp với các từ khóa gây ra lỗi.

Thư mục action.d chứa loại hành động nào sẽ được thực hiện đối với IP tương ứng theo quy tắc lọc.

Ví dụ về cuộc tấn công chống CC của Fail2ban:

#需要先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

Tiếp tục sửa đổi jail.local và thêm nội dung sau:

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 60
findtime = 60
bantime = 3600
logpath = /data/wwwlogs/wzfou.com_nginx.log

Cấu hình trên có nghĩa là nếu cùng một IP đạt 60 yêu cầu trong vòng 60 giây, IP của nó sẽ bị cấm trong 1 giờ. Hãy nhớ sửa đổi đường dẫn nhật ký trang web của bạn. Sử dụng lệnh sau để xem trạng thái Fail2ban và hiển thị danh sách các địa chỉ IP bị cấm.

/usr/local/python/bin/fail2ban-client status ssh-iptables

Sau khi lưu mã trên, cấp quyền x (thực thi). Để nhận ra Shell Script giống như một daemon ở chế độ nền, bạn cần sử dụng Nohup:

nohup 该shell script的位置 >/dev/null 2>&1 &

>/dev/null 2>&1 có nghĩa là chuyển hướng đầu ra thông tin bằng cách thực thi tập lệnh shell (một số tiếng vang trong tập lệnh shell, được sử dụng để gỡ lỗi) thành /dev/null. & ở cuối thể hiện việc thực thi ở chế độ nền. Trong trường hợp này, ngay cả khi bạn đăng xuất, Shell Script vẫn sẽ được thực thi ở chế độ nền.

3. Tóm tắt

Tôi đã sử dụng hai đoạn script trên để phát hiện nhật ký trang web theo thời gian thực và tự động thêm IP bất thường vào iptables để chặn. Kết quả rất tốt và có thể đối phó với các cuộc tấn công CC nhỏ. Hiện tại, Fail2ban được sử dụng để phát hiện nhật ký trang web và chặn IP độc hại. Mỗi tập lệnh trong số ba tập lệnh đều có những ưu điểm riêng và bạn có thể lựa chọn theo nhu cầu của riêng mình.

Tuy nhiên, nếu gặp phải một cuộc tấn công DDOS lớn hơn, bạn vẫn phải sử dụng dịch vụ chống tấn công chuyên dụng. Ví dụ: Dịch vụ chống tấn công Cloudflare về cơ bản thì mọi người trong ngành VPS đều sử dụng. Nếu trang web của bạn bị tấn công và không thể truy cập được, bạn có thể nâng cấp Cloudflare lên phiên bản trả phí để bảo vệ tốt hơn.

Để lại một câu trả lời