logo
Hỗ trợ: 24/7
Điện thoại: 098 984 8886
Email: info@thuonghieuweb.com

Chống DDOS với iptables

2/5 1250 votes
updated on 2020-08-04

ddos-attack.jpg

Giới thiệu về iptables

Nguyên tắc làm việc của iptables là nó cho phép người dùng định nghĩa các quy tắc (rules), các quy tắc này nằm trong bộ nhớ và sẽ được iptables kiểm tra để thực thi mỗi khi có một request đến máy chủ. Nếu một request thỏa mãn quy tắc, nó sẽ được thực hiện theo action của quy tắc đó.

Các request được nhận diện bằng các thông số sau:
- địa chỉ nguồn (một ip hay cả một dải ip)
- địa chỉ đích
- giao thức (giao thức phổ biến là TCP/IP)
- cổng (các cổng phổ biến là cổng 80 http, cổng 21 ftp ...)
- interface vật lý (là request đến từ card mạng nào của máy chủ)

Còn các action mà iptables có thể thực hiện là
- ACCEPT cho phép request đó được thực hiện, hay nói đúng hơn là cho gói tin thỏa mãn các điều kiện trên đi qua.
- REJECT không cho phép gói tin đi qua, gửi trả lại địa chỉ xuất phát request một thông báo
- DROP không cho phép gói tin đi qua và cũng không gửi trả lại thông báo gì
- LOG cho phép gói tin đi qua nhưng sẽ ghi log lại để phân tích
- DNAT cho phép gói tin đi qua nhưng dùng NAT để thay thế địa chỉ đích
- SNAT cho phép gói tin đi qua nhưng dùng NAT để thay thế địa chỉ nguồn

Ngoài ra các rules còn được kiểm soát bởi kiểu của request, có 3 kiểu sau đây
- INPUT: là các request đến máy chủ
- FORWARD: là các request đi qua máy chủ (vào cổng mạng này và đi ra cổng mạng khác) nó áp dụng trong trường hợp máy chủ của bạn làm việc như một routing server.
- OUTPUT: áp dụng cho các request đi từ máy chủ ra ngoài (ví dụ bạn không muốn các website trên VPS của bạn truy cập đến một website khác nằm ở đâu đó trên internet).

Các lệnh quản lý iptables


Bạn có thể khởi tạo một rule và kiểm tra iptables ngay từ dùng lệnh của hệ điều hành linux. Dưới đây là một số lệnh cơ bản

Kiểm tra xem dịch vụ iptables đã chạy hay chưa:
     # service iptables status

Nếu như iptables đang chạy nó sẽ liệt kê ra các rules nằm trong 3 kiểu là chain INPUT, chain FORWARD và chain OUTPUT. Nếu như iptables chưa chạy sẽ có thông báo là Firewall is stopped. Lưu ý là trong trường hợp chưa có một rule nào đã được định nghĩa, thì có thể bạn cũng nhận được thông báo Firewall is stopped. Lúc đó bạn chỉ cần thêm vào một rules là iptables sẽ được bật.

Bật dịch vụ iptables
     # service iptables start

Khởi động lại dịch vụ iptables. Thông thường mỗi khi bạn tạo rules từ dòng lệnh, thì các rule này có hiệu lực ngay. Tuy nhiên trong trường hợp bạn tạo rules vào file thì bạn cần dùng lệnh sau để khởi động lại iptables và tải lại các rules từ file

     # service iptables restart

Ghi các rules hiện thời vào file. Thông thường các rules được lưu trong bộ nhớ RAM để thực thi cho nhanh. Tuy nhiên khi tắt máy hoặc khởi động lại, các rules này sẽ không còn. Để lưu lại các rules bạn cần thực hiện lệnh sau:

# service iptables save

Lệnh trên sẽ lưu các rules đang chạy vào file /etc/sysconfig/iptables Sau khi đã có file này, các bạn có thể thêm trực tiếp các rules vào trong file này. Tuy nhiên lưu ý là các rules trong iptables sẽ có tác dụng ngay lập tức vì vậy để tránh tạo ra các rules lỗi, bạn nên tạo các rules trong một file nháp ví dụ như file /etc/sysconfig/iptables.tmp  sau đó chạy kiểm tra iptables bằng lệnh sau:

# iptables-restore < /etc/sysconfig/iptables.tmp

Nếu các bạn muốn lưu các rules đang chạy ra một file bất kỳ (để backup hoặc để gửi cho người khác) thì có thể dùng lệnh sau

# iptables-save > /etc/sysconfig/iptables.backup

Nếu dùng lệnh trên mà không có tên file theo sau, nó sẽ in các rules đang chạy ra màn hình để bạn kiểm tra.

Các lệnh tạo rules cho iptables.


Cú pháp chung cho các lệnh tạo rules của iptables như sau

# iptables [command] [kiểu] [mô tả rule] [-j acction]

Trong đó kiểu là INPUT, FORWARD, hoặc OUTPUT như đã nói ở trên. Acction = ACCEPT, REJECT, DROP.... như đã nói ở trên, còn command, các bạn có thể tham khảo danh sách các command bằng cách gõ lệnh:

# iptables -h

Các command thông dụng là:
      - I  (Thêm một quy tắc mới vào iptable)
      - A (chèn thêm các mô tả vào một quy tắc)
      - D (xóa bỏ một quy tắc)

Còn đoạn mô tả rule thì được xây dựng từ địa chỉ nguồn, địa chỉ đích, cổng dịch vụ, cổng mạng.... các bạn tìm hiểu các rule này qua các ví dụ sau:

- Rule 1: chặn một địa chỉ bên ngoài đến interface ethe0 và truy xuất cổng 80 giao thức tcp,  tới địa chỉ đích 27.118.22.10
      -s 116.10.191.15 -i ethe0 -d 27.118.22.10 -p tcp --dport 80

- Rule 2:  chặn một network (cả một dải ip) truy xuất các cổng 3000 đến 4000 của địa chỉ 27.118.22.10
      -s 116.10.191.0/24 -d 27.118.22.10 -p tcp --dport 3000:4000

- Rule 3: Cấm một ip dùng cổng 20 (ftp) truy xuất đến máy chủ
      -s 116.10.191.15 -d 27.118.22.10 -p tcp --sport 20

Giải thích các option:

      -s (chỉ ra địa chỉ nguồn của gói tin)
      -d (chỉ ra địa chỉ đích của gói tin)
      -p (chỉ ra giao thức, có thể là tcp, icmp, udp....)
      -dport (chỉ ra các cổng dịch vụ ở địa chỉ ip đích )
      -sport (chỉ ra các cổng dịch vụ của ip nguồn)
      -i (chỉ ra cổng vật lý mà gói tin xuất hiện ví dụ cổng ethe0)

Tham khảo các option khác bằng lệnh # iptables -h

Bây giở chúng ta sẽ ghép các thành phần trên để tạo thành một rule thực sự. Giả sử chúng ta cần cấm tất cả các gói tin có địa chỉ IP nguồn đến từ một network là 116.10.191.0 đi đến VPS của chúng ta, bất kể là gói tin đó sử dụng giao thức gì, dịch vụ gì, và bất kể nó đòi truy xuất đến địa chỉ IP nào, chúng ta gõ lệnh sau trực tiếp vào dòng lệnh của hệ điều hành

# iptables -I INPUT -s 116.10.191.0/24 -j DROP

Ngay sau khi gõ lệnh trên, toàn bộ các host có địa chỉ IP là 116.10.191.x sẽ không còn truy xuất được đến máy VPS của bạn nữa.  Nếu muốn xóa bỏ quy tắc trên, chúng ta gõ lệnh

# iptables -D INPUT -s 116.10.191.0/24 -j DROP

Sau khi thực hiện việc tạo, thêm bớt các rule, các bạn nhớ dùng lệnh sau để ghi lại các rules để nếu như có khởi động lại VPS thì iptables có thể dùng lại các rule này.

# service iptables save

Sau đó cũng cần phải đặt chế độ tự khởi động dịch vụ iptables mỗi lần khởi động VPS bằng lệnh sau:

# chkconfig iptable on

Áp dụng iptables


Qua các bước trên các bạn đã biết cách dùng iptables để ngăn chặn các truy xuất từ các IP xấu. Vậy bây giờ chúng ta sẽ dùng nó như thế nào? Để chống lại các cuộc tấn công DDOS, chúng ta có nhiều phương án khác nhau.

Cách thứ nhất: Phân tích log

Phân tích thường xuyên file log để biết IP nào hay trọc phá VPS và block ip đó. Các bạn hãy xem toàn bộ file /var/log/secure để biết được các request bất thường hay đến từ địa chỉ IP nào. Sau đó  các bạn tạo ra một file shell như sau để dùng nhiều lần

# cd /etc/sysconfig/
# vi iptables.sh (sau đó đặt các lệnh tạo rules của iptables vào trong file này)
# chmod +x iptables.sh   (cho phép chạy file này)
# ./iptables.sh  (chạy file để tạo ra các rules)

Từ nay về sau mỗi khi phát hiện một ip xấu nào, bạn chỉ cần thêm một dòng vào file iptables.sh này và chạy nó thì các rules sẽ được tạo ra.

Cách thứ 2: Chặn IP theo vùng

Nhận xét thấy là các cuộc tấn công DDOS thường đến từ các quốc gia như Trung Quôc, Hàn Quốc... trong khi VPS của bạn không có khách hàng nào ở các quốc gia này thì bạn có thể chặn toàn bộ IP của các nước có nghi ngờ xuất phát các cuộc tấn công DDOS như sau:

Đầu tiên bạn cần có danh sách ip của các quốc gia này. Ví dụ danh sách các IP hay tấn công DDOS từ Trung Quốc các bạn có thể lấy ở link này: http://www.ipdeny.com/ipblocks/data/countries/cn.zone

Khi đã có link, các bạn lấy danh sách ip đó về một file gọi là iptables.block.list bằng lệnh sau

# wget -c --output-document=iptables.block.list http://www.ipdeny.com/ipblocks/data/countries/cn.zone

Sau khi có file danh sách này bạn viết một script như sau:

#vi iptables.sh
Nội dung file:
#!/bin/bash
WORKDIR="/root"
#######################################
cd $WORKDIR
if [ -f iptables.block.list ]; then
  iptables -F
  BLOCKDB="iptables.block.list"
  IPS=$(grep -Ev "^#" $BLOCKDB)
  for i in $IPS
  do
    iptables -A INPUT -s $i -j DROP
  done
fi

Tiếp theo là chạy file iptables.block.list và nhớ save danh sách bằng lệnh service iptables save như các bước trên.


File iptables-config


File /etc/sysconfig/iptables-config có chứa một số cấu hình cho dịch vụ iptables. Các bạn cũng nên tìm hiểu một số lệnh trong file này để ứng dụng.

IPTABLES_SAVE_ON_STOP = "no"  Giá trị này nên chuyển thành "yes" khi đó mỗi lần stop iptables (hay là khi tắt máy) thì các rules trong bộ nhớ sẽ được save vào file /etc/sysconfig/iptables để tải lại các lần sau

IPTABLES_SAVE_ON_RESTART ="no"  Giá trị này nếu sửa thành "yes" thì mỗi khi restart dịch vụ iptables, các rules cũng được ghi lại vào file

... ngoài ra còn một số tham số khác các bạn tự tìm hiểu thêm

Nguyên tắc cuối cùng: chống tự tử

Những ai đã từng làm filtering và firewalling đều có những bài học xương máu về việc tự sát. Đó là trong khi mải mê tạo ra các rules để ngăn chặn các cuộc tấn công, vô tình chúng ta cấm luôn cả ip của chính mình và kể từ đó không còn access được vào server nữa. Để tránh gặp phải thảm cảnh này, các bạn nên tuân thủ một số nguyên tắc sau:

1- The First match rule.

Trước khi tạo bất cứ một rules nào bạn cần phải tạo một rule cho phép chính mình và đặt ở đầu file iptables. Bởi vì mọi firewall đều làm việc theo nguyên tắc duyệt các rule từ trên xuống dưới, nếu thỏa mãn thì áp dụng ngay bất kể các rule bên dưới có match hay không. Vậy nên các trong khi thao tác với iptables, bạn cần biết IP của máy mình đang dùng là gì. Nếu có ip tĩnh thì quá tốt, nếu không thì cũng phải biết dải ip mà ADSL của mình thường xuyên được cấp. Sau đó tạo một rules đầu tiên trong file iptables như sau:

-A INPUT -s 111.111.111.111/32 -j ACCEPT

Trong đó 111.111.111.111 giả định là ip mà máy của bạn đang dùng. Nếu như bạn có một dài IP hay dùng thì thay bằng dòng

-A INPUT -s 111.111.111.0/24 -j ACCEPT

Như vậy bất kể sau đó bạn có khai báo một lệnh DROP hay REJECT nào thì ip của bạn vẫn access được đến server mà không sợ thiết lập rules "tự tử" cấm chính mình.

2- Alway got the second road.

Cho dù bạn cẩn thận đến đâu, kể cả khi bạn đã áp dụng nguyên tắc thứ nhất thì vẫn có thể bạn không access được vào server, chẳng hạn như bạn đã mở ip của bạn, nhưng mạng của nhà cung cấp dịch vụ lại cấm ip của bạn thì sao? hoặc giả bạn cho phép dải ip ở công ty của bạn access, nhưng bạn đang ở quán cafe wifi và muốn access vào VPS thì sao? Để tránh tình huống này bạn cần tạo ra một rule thứ 2 cho phép một máy dự phòng và máy này thì bạn có thể remote từ xa vào để thao tác. Hãy add thêm dòng lệnh sau vào ngay bên dưới dòng lệnh nêu trên trong file iptables

-A INPUT -s 222.222.222.222/32 -j ACCEPT

trong đó 222.222.222.222 là máy dự phòng để bạn có thể access vào máy chủ khi mà IP thứ nhất bị cấm.

3- Kiểm tra tất cả mọi thứ trước khi đặt lệnh chkconfig on

Các tác giả iptables đã lường trước rằng người dùng sẽ có thể vô tình tự tử khi thiết lập rule nên họ đặt ra một nguyên tắc là iptables làm việc với các rule thường trực trong RAM và chỉ save xuống iptables để lưu. Đồng thời họ để chế độ ngầm định là iptables sẽ không khởi động mỗi khi reboot máy. Đây là một cơ may cuối cùng khi bạn bị cấm ip. Lúc đó chỉ cần khởi động lại máy là các rules trong RAM sẽ bị xóa sạch và thậm chí là iptables sẽ không khởi động theo máy nên bạn sẽ có thể access lại máy chủ sau khi reboot. Tôn trọng nguyên tắc này bạn cần lưu ý mấy điểm sau:

  • Gõ các rules từ dòng lệnh của linux để rules ghi vào ram chứ không ghi vào file iptables, để kiểm tra xem rule có tác động như thế nào, nếu sau khi ứng dụng rule mà bị ngắt thì khởi động lại server.
  • Save các rule từ RAM sang một file tạm trước khi save vào iptable bằng lệnh iptables-save > filename. Việc này vừa để backup iptables và vừa đảm bảo là các rules được test kỹ trước khi save lại vào file cấu hình.
  • Hãy kiểm tra cẩn thận trước khi gõ lệnh chkconfig iptables on vì sau khi gõ lệnh này, mỗi lần khởi động lại server sẽ tự load file iptables lên và áp dụng các rules ngay, do vậy nếu như đã trót save các lệnh "tự tử" vào file iptables mà lại đặt lệnh chkconfig on cho dịch vụ này thì coi như hết thuốc chữa.




   
 
Có thể bạn muốn xem thêm....

Những điều cần biết khi xây dựng website

Xây dựng một website không đơn giản chỉ là một gian hàng hay một tờ rơi. Bạn cần phải làm mọi cách để website của mình hướng tới khách hàng, và quan trọng hơn cả, là làm sao để nội dung của bạn có sức lan tỏa nhanh chóng trong môi trường mạng từ đó lôi kéo khách hàng đến với website của bạn

Xem chi tiết

Những điều cần biết về dịch vụ email với tên miền riêng

Email tên miền riêng là email gắn với tên miền của doanh nghiệp kiểu như tennhanvien@tencongty.com. Email tên miền riêng sẽ tạo sự chuyên nghiệp và tin cậy khi giao dịch, đồng thời có thể cấp phát cho nhân viên khi mới đi làm, thu hồi lại khi nhân viên đó thôi việc và lưu trữ được mọi giao dịch trên email mà không sợ nhân viên đổi mật khẩu, mang theo hòm thư khi rời công ty...

Xem chi tiết
Đội ngũ lập trình viên, kỹ thuật viên và seo-er của Thương Hiệu Web cam kết

Hỗ trợ 24/7

Hỗ trợ khách hàng 24 giờ 1 ngày, 7 ngày 1 tuần qua điện thoại, email và chat online

Hoàn tiền 100%

Trong thời gian 45 ngày sử dụng dịch vụ, nếu quý khách không hài lòng!

Cam kết uptime 99.99%

Nếu dịch vụ của quý khách bị gián đoạn, chúng tôi sẽ cộng thêm 1 tháng sử dụng

KHÁCH HÀNG NÓI VỀ CHÚNG TÔI

Một đơn vị xây dựng web tận tâm và chuyên nghiệp!

"Thương Hiệu Web là đơn vị thiết kế website có năng lực, tôn trọng và có trách nhiệm với khách hàng, đặt mình vào vị trí khách hàng để mang lại cho khách hàng nhiều giá trị từ chính dịch vụ của mình. Với tôi, Thương Hiệu Web là một lựa chọn hợp lý!" Chị Nguyễn Phượng, TP kinh doanh, Công Ty Cổ Phần Quản Lý Công Trình Đô Thị Hải Dương.

Xem bình luận trên FB
Sitemap Điều khoản sử dụng Chính sách riêng tư
Bản quyền thuộc về công ty cổ phần truyền thông số VDATA
Tầng 2, tòa nhà 71 Hoàng Cầu, Đống Đa, Hà Nội
Điện thoại: (04) 3990 9643 - Email: info@vdata.com.vn
Giấy chứng nhận ĐKKD số: 0102766780, do Sở KHĐT Tp Hà Nội cấp ngày 28/04/2009

Online