Download app

Quét mã QR để tải về ứng dụng

QR code

Iptables là gì?

04/06/2021, 11:29 am
5,213

Trong các server Linux luôn tích hợp sẵn một hệ thống tường lửa (firewall), đây là công cụ tường lửa rất mạnh. Tuy nhiên, công cụ này lại hơi khó sử dụng cho người mới. Trong bài viết này, Nhân Hòa sẽ giải thích khái niệm Iptables là gì và cấu trúc cũng như cách sử dụng Iptables, đưa ra một vài ví dụ cụ thể tạo tường lửa trên server.

1. Iptables là gì?

IPtables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng giúp bạn ngăn chặn các truy cập không hợp lệ. Đối với các bản phân phối Linux như Ubuntu, Fedora, CentOS… bạn có thể tìm thấy công cụ tường lửa tích hợp sẵn IPtables.

Iptables là gì?

>>> Xem thêm: SSH là gì?

2. Thành phần của Iptables

Cơ chế lọc gói tin của Iptable được xây dựng dựa trên 3 thành phần cơ bản đó là table, chain và target. Nói đơn giản, table là một xử lý các gói tin theo những cách cụ thể. Nếu không chỉ định cụ thể thì mặc định là chúng ta sẽ làm việc với filter table, ngoài ra còn có các bảng khác.

Mỗi bảng sẽ được gắn thêm các chain. Việc gắn thêm chain vào table cho phép xử lý gói tin ở những giai đoạn khác nhau, ví dụ chúng ta có thể xử lý gói tin ngay khi gói tin vừa đến interface hay xử lý các gói tin trước khi các gói này được đẩy ra interface. Bạn có thể tạo ra rule rất cụ thể, ví dụ gói tin đó đến từ port nào, đến từ IP nào sau đó chỉ định hành động (TARGET) sẽ áp dụng với gói tin này.

Khi có một gói tin đến hoặc gói tin đi Iptable sẽ so sánh với từng rule trong một chain. Khi một gói tin giống với rule đặt ra Iptable sẽ thực hiện hành động ứng với rule đó. Nhưng nếu gói tin không khớp với bất cứ rule nào thuộc chain, Iptable sẽ áp dụng "default policy" cho gói tin đó. Mặc định "default policy" của các chain là cho phép gói tin.

Các thành phần trong Iptables bao gồm:

- Table

Iptable sử dụng table để định nghĩa các rules cụ thể cho các gói tin. Các phiên bản Linux hiện nay có 4 loại table khác nhau:

+ Filter table

Table này quen thuộc và hay được sử dụng nhất. table này nhằm quyết định liệu gói tin có được chuyển đến địa chỉ đích hay không

+ Mangle table

Table này liên quan đến việc sửa header của gói tin, ví dụ chỉnh sửa giá trị các trường TTL, MTU, Type of Service

+ Table Nat

Table này cho phép route các gói tin đến các host khác nhau trong mạng NAT table cách thay đổi IP nguồn và IP đích của gói tin. Table này cho phép kết nối đến các dịch vụ không được truy cập trực tiếp được do đang trong mạng NAT

+ Table raw

1 gói tin có thể thuộc một kết nối mới hoặc cũng có thể là của 1 một kết nối đã tồn tại. Table raw cho phép bạn làm việc với gói tin trước khi kernel kiểm tra trạng thái gói tin

Thành phần của Iptables

- Chains

Mỗi table được tạo với một số chains nhất định. Chains cho phép lọc gói tin tại các điểm khác nhau. Iptable có thể thiết lập với các chains sau:

+ Chain PREROUTING

Các rule thuộc chain này sẽ được áp dụng ngay khi gói tin vừa vào đến Network interface. Chain này chỉ có ở table NAT, raw và mangle

+ Chain INPUT

Các rule thuộc chain này áp dụng cho các gói tin ngay trước khi các gói tin được vào hệ thống. Chain này có trong 2 table mangle và filter

+ Chain OUTPUT

Các rule thuộc chain này áp dụng cho các gói tin ngay khi gói tin đi ra từ hệ thống. Chain này có trong 3 table là raw, mangle và filter

+ Chain FORWARD

Các rule thuộc chain này áp dụng cho các gói tin chuyển tiếp qua hệ thống. Chain này chỉ có trong 2 table mangle và table

+ Chain POSTROUTING

Áp dụng cho các gói tin đi network interface. Chain này có trong 2 table mangle và NAT

- Target

Target hiểu đơn giản là các hành động áp dụng cho các gói tin. Đối với những gói tin đúng theo rule mà chúng ta đặt ra thì các hành động (TARGET) có thể thực hiện được đó là:

+ ACCEPT

Chấp nhận gói tin, cho phép gói tin đi vào hệ thống

+ DROP

Loại bỏ gói tin, không có gói tin trả lời, giống như là hệ thống không tồn tại

+ REJECT

Loại bỏ gói tin nhưng có trả lời table gói tin khác, ví dụ trả lời table 1 gói tin “connection reset” đối với gói TCP hoặc bản tin “destination host unreachable” đối với gói UDP và ICMP

+ LOG

Chấp nhận gói tin nhưng có ghi lại log

Gói tin sẽ đi qua tất cả các rule chứ không dừng lại khi đã đúng với 1 rule đặt ra. Đối với những gói tin không khớp với rule nào cả mặc định sẽ được chấp nhận

3. Cách thức hoạt động của Iptables

Toàn bộ dữ liệu trong gói tin gửi đi được internet định dạng. Tiếp đến, Linux kernel thực hiện lọc chúng thông qua giao diện bảng các bộ lọc. Và IPtables chính là ứng dụng dòng lệnh, đồng thời cũng là tường lửa của Linux. Nó giúp người dùng cấu hình, duy trì và quản lý các bảng này.

Người dùng có thể thiết lập nhiều bảng khác nhau. Trong đó, mỗi bảng chứa nhiều chuỗi và mỗi chuỗi ứng với một quy tắc. Các quy tắc này sẽ định nghĩa hành động được thực thi khi gói tin phù hợp với nó.

Cách thức hoạt động của Iptables

Một mục tiêu (target) chỉ đưa ra khi đã xác định được một gói tin. Mục tiêu có thể là chuỗi khớp với một trong những giá trị như: ACCEPT (gói tin được đi qua), DROP (gói tin bị từ chối, không được đi qua), RETURN (chuỗi hiện tại bị bỏ qua, quy lại quy tắc kế tiếp của chuỗi mà gói tin được gọi).

>>> Xem thêm: Chứng chỉ SSL là gì? Làm thế nào để mua chứng chỉ SSL?

4. Các quy tắc trong Iptables

Các quy tắc đang có trong IPtables Linux, bạn sử dụng câu lệnh sau: 

IPtables -L –v

TARGET    PROT OPT  IN OUT SOURCE DESTINATION

ACCEPT    all --   lo any anywhere   anywhere

ACCEPT    all --   any any anywhere   anywhere ctstate  RELATED,ESTABLISHED

ACCEPT    tcp --   any any anywhere   anywhere tcp dpt:ssh

ACCEPT    tcp --   any any anywhere   anywhere tcp dpt:http

ACCEPT    tcp --   any any anywhere   anywhere tcp dpt:https

DROP      all --   any any anywhere   anywhere

Các quy tắc trong Iptables

Trong đó:

- TARGET: Hành động được thực thi

- PROT: Chính là Protocol. Nó là giao thức được sử dụng để thực thi quy tắc với 3 chọn lựa all, TCP hay UDP. Hầu hết những ứng dụng phổ biến như FTP, sFTP, SSH,… đều dùng TCP

- IN: Quy tắc được áp dụng đối với những gói tin đi vào từ một interface được xác định hay cho tất cả các interface

- OUT: Quy tắc được áp dụng đối với những gói tin đi ra từ một interface được xác định hay cho tất cả các interface

- DESTINATION: Là địa chỉ của lượt truy cập áp dụng quy tắc

- ACCEPT    all - - lo any anywhere   anywhere: Là chấp nhận tất cả các gói tin từ interface lo (đây là một interface ảo của nội bộ).

- ACCEPT    all - - any any anywhere   anywhere ctstate  RELATED,ESTABLISHED: Là chấp nhận tất cả các gói tin của kết nối. 

- ACCEPT    tcp - - any any anywhere   anywhere tcp dpt:ssh: Là chấp nhận tất cả các gói tin của giao thức SSH đến từ bất kỳ interface, không loại trừ bất cứ IP nguồn hay đích. Mặc định, hệ thống hiển thị dpt:ssh, tức là cổng 22 của SSH. Trong trường hợp, bạn muốn đổi thành cổng khác thì điền giá trị cổng vào

- ACCEPT    tcp - - any any anywhere   anywhere tcp dpt:http: Mặc định hiển thị là http, tức cho phép kết nối đến cổng 80

- ACCEPT    tcp - - any any anywhere   anywhere tcp dpt:https: Mặc định hiển thị là https, tức cho phép kết nối đến cổng 443

- DROP      all - -   any any anywhere   anywhere: Toàn bộ những gói tin không khớp với các quy tắc trên sẽ bị loại bỏ

>>> Xem thêm: Cấu hình VPS là gì?

5. Hướng dẫn sử dụng Iptables

Khi nắm rõ khái niệm Iptables là gì, sau đây sẽ hướng dẫn cách thực hiện một số tác vụ trong Iptables

Liệt kê cấu hình hiện tại:

iptables -L -n -v --line-numbers

+ -L liệt kê danh sách.

+ -n cho output là số (không phân giải tên; dẫn đến hiệu suất nhanh hơn).

+ -v thêm thông tin chi tiết

Để chặn mọi packet input hoặc output khỏi hệ thống một cách mặc định khi chúng không match rule nào (còn được gọi là default Policy):

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

-P cho policy. Có các policy khác nhau như đã đề cập ở trên

-Cho phép các packet bên trong local interface của bạn khi di chuyển mà không bị chặn.

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

+ -A để chèn rule vào cuối chain. Bạn cũng có thể chèn, xóa hoặc cập nhật bằng các chuyển đổi khác nhau

+ -i dành cho input interface, interface mà các packet tới

+ -o dành cho output interface, interface mà các packet đi ra

+ -j để jump đến TARGET. Bạn có thể chọn ACCEPT, REJECT, DROP, LOG… với một packet

- Để cho phép các gói DNS và DHCP input và output ra khỏi máy tính của bạn

iptables -A INPUT -p udp --dport 67 -j ACCEPT

iptables -A INPUT -p tcp --dport 67 -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

iptables -A OUTPUT -p udp --dport 68 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 68 -j ACCEPT

+ -p  dành cho giao thức. Các giao thức khác nhau có thể được sử dụng như tcp, udp, gre, v.v. Thông thường DNS và DHCP giao tiếp thông qua giao thức UDP. Nhưng với các packet lớn hơn, TCP thường được sử dụng. Đó là lý do tại sao tôi đề cập đến các rule đó

+ –dport cho destination port. Bạn cũng có thể sử dụng –sport cho source port

- Để mở kết nối SSH khi máy tính của bạn là máy client, bạn phải thêm hai rule theo cả hai hướng

iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

+ -m là một options để sử dụng extension của iptables. Bạn có thể đọc thêm về các extension khác nhau bằng cách sử dụng man iptables-extension. Ví dụ khác về các phần mở rộng này là limit để hạn chế số lượng tần số packet

Kết nối SSH không chỉ xảy ra theo một hướng duy nhất. Thay vào đó, bạn sẽ gửi một packet đến destination port 22, và các packet sẽ đến máy tính của bạn với trạng thái RELATED và ESTABLISHED. Connection tracking phân biệt điều này cho bạn và bạn không phải lo lắng về điều đó.

- Cho phép kết nối SSH khi máy tính của bạn là máy chủ

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Đây là hướng ngược lại với rule trước đó, mở các packet đến port 22 và gửi các packet thành công có trạng thái RELATED và ESTABLISHED trở lại client

Nếu bạn muốn có thể ping các máy tính khác và cho phép các máy tính khác có thể ping máy tính của bạn, bạn nên cho phép các packet icmp

iptables -A INPUT -p icmp -j ACCEPT

iptables -A OUTPUT -p icmp -j ACCEPT

- Nếu bạn muốn có thể duyệt các trang web, đây là điều bạn nên làm

iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

Thao tác này sẽ cho phép cả lưu lượng HTTP và HTTPS ra khỏi hệ thống của bạn

Hướng dẫn sử dụng Iptables

Bạn muốn ghi lại các packet bị DROP để bạn có cái nhìn về những gì đang xảy ra. Nó cũng sẽ giúp bạn nếu bạn muốn mở một port trong tương lai

iptables -N LOGGING

iptables -A INPUT -j LOGGING

iptables -A OUTPUT -j LOGGING

iptables -A FORWARD -j LOGGING

iptables -A LOGGING -j LOG --log-level error --log-prefix "iptables-dropped: "

iptables -A LOGGING -j DROP

Dòng đầu tiên tạo ra một chain mới. Và trong 3 dòng tiếp theo, chúng ta sẽ forward các packet đến chain mới được tạo

- 2 dòng cuối cùng cũng sẽ log lại packet và DROP packet đó

+ –log-prefix là một tham số của LOG target, mà bạn có thể đọc thêm về phần man iptables-extension

+ –log-level cũng là tham số của LOG target, chỉ ra cách chúng ta muốn ghi log chi tiết như thế nào. error là một mức độ ghi khá tốt vì chúng ta chỉ quan tâm đến các packet không được phép

Sự khác biệt giữa DROP và REJECT là DROP không thông báo cho người gửi về packet bị gỡ bỏ, mà REJECT sẽ thông báo cho người gửi một cách rõ ràng

Khi bạn gửi một packet đến mục tiêu REJECT, người gửi sẽ nhận được “connection reset by peer”

Nếu bạn muốn áp dụng NAT cho iptables của mình, tùy thuộc vào việc bạn muốn áp dụng nó cho các kết nối input hay kết nối output hoặc địa chỉ IP của máy tính của bạn là tĩnh hay động, bạn có thể sử dụng các quy tắc sau:

iptables -t nat -A OUTPUT -p tcp --dport 22 --destination 192.168.40.40 -j DNAT --to-destination 123.123.123.123:4040

Sau lệnh trên, mọi lưu lượng đi từ máy tính của bạn đến địa chỉ IP 192.168.40.40 port 22 sẽ được gửi đến địa chỉ IP 123.123.123.123 port 4040

Cờ –destination sẽ lọc các packet dựa trên destination IP

Khi muốn phủ định rule thì hãy sử dụng dấu chấm than !

Vì vậy, bạn có thể phủ định một rule bằng cách đặt trước nó bằng dấu !. Ví dụ ! –source 192.168.40.40 sẽ có hiệu lực đối với bất kỳ source IP nào ngoài 192.168.40.40

iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source 10.0.0.56:8000-8010

Sau khi áp dụng rule trên, mọi packet cho bất kỳ destination IP cùng với cổng 80 sẽ thay đổi địa chỉ nguồn thành 10.0.0.56:8000-8010, là một dải cổng được chỉ định bằng dấu gạch ngang. Điều này giúp NAT bên trong mạng nội bộ của bạn có thể truy cập được từ thế giới bên ngoài (internet)

iptables -A FORWARD -i wlan0 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

MASQUERADE phù hợp nhất khi bạn cần forward mọi traffic từ một Interface cụ thể để được định tuyến qua máy tính của bạn mà không cần thay đổi bất kỳ thứ gì bên trong packet. Tất nhiên, bạn sẽ cần thiết lập tham số kernel trước khi thiết lập việc thực hiện các thao tác trên:

sysctl net.ipv4.ip_forward=1

Để máy tính của bạn có khả năng routing các packet. Lệnh trên chỉ là một thiết lập cấu hình runtime và nếu bạn cần có hiệu lực khi khởi động lại, bạn sẽ thực hiện như sau

echo net.ipv4.ip_forward = 1 > /etc/sysctl.d/30-ip-forward.conf

iptables là một công cụ với phần lớn các tính năng. Các lệnh trên là những lệnh được sử dụng nhiều nhất. Và thỉnh thoảng bạn sẽ thấy mình đang sử dụng lệnh này hoặc lệnh kia.

Đọc kỹ hướng dẫn sử dụng vì họ có thông tin chi tiết tốt:

man iptables

man iptables-extension

6. Kết luận

Hy vọng rằng bài hướng dẫn trên có thể giúp các bạn tự mình cấu hình Iptables. Sử dụng tường lửa là một trong những cách hiệu quả để kiểm soát truy cập vào máy chủ, trong quá trình thực hiện nếu gặp khó khăn hãy để lại thông tin của bạn để Nhân Hòa có thể giải đáp cho bạn một cách kịp thời.

Nhân Hòa với 20 năm kinh nghiệm kinh doanh mua tên miền, hosting, thuê máy chủ, ssl giá rẻ, email theo tên miền, vps... luôn giữ vững top đầu là nhà đăng ký chất lượng và uy tín nhất Việt Nam. Mọi nhu cầu sử dụng dịch vụ hay phản hồi liên hệ với Nhân Hòa theo địa chỉ sau.

+ Fanpage: https://www.facebook.com/nhanhoacom

+ Chỉ đường: https://g.page/nhanhoacom

+ Chương trình khuyến mãi mới nhất: https://nhanhoa.com/khuyen-mai.html

————————————————————

CÔNG TY TNHH PHẦN MỀM NHÂN HÒA

https://nhanhoa.com

Hotline: 1900 6680

Trụ sở chính: Tầng 4 - Tòa nhà 97-99 Láng Hạ, Đống Đa, Hà Nội

Tel: (024) 7308 6680 – Email: sales@nhanhoa.com

Chi nhánh: 270 Cao Thắng (nối dài), Phường 12, Quận 10, Tp.HCM

Tel: (028) 7308 6680 – Email: hcmsales@nhanhoa.com

Bài viết liên quan
16/11/2024
Không phải bàn cãi việc WordPress đang là một trong những nền tảng hàng đầu trong việc xây dựng website hiện nay. Và giải...
16/11/2024
Tên miền .co đang trở thành một xu hướng mới trong việc xây dựng thương hiệu trực tuyến. Tại sao lại như vậy? Cùng...
12/11/2024
Hosting PHP Free có thể là giải pháp tiết kiệm cho những người mới bắt đầu xây dựng website. Tuy nhiên, liệu đây có phải...
Chuyên nghiệp và tận tình
Hỗ Trợ Trực Tuyến 24/7
Đội ngũ chuyên gia giúp xử lý vấn đề kỹ thuật để website của bạn luôn hoạt động tốt và chạy nhanh. Bất kỳ lúc nào.
Kết nối với Nhân Hoà

Map Tầng 4 - Toà nhà 97 - 99 Láng Hạ, Quận Đống Đa, Thành Phố Hà Nội

Phone Điện thoại: 1900 6680 - (024) 7308 6680

Mail Mail: sales@nhanhoa.com

Hotline Phản ánh chất lượng dịch vụ: 091 140 8966

Map 927/1 CMT8, Phường 7, Quận Tân Bình, Thành phố Hồ Chí Minh

Phone Điện thoại: 1900 6680 - (028) 7308 6680

Mail Mail: hcmsales@nhanhoa.com

Hotline Phản ánh chất lượng dịch vụ: 091 140 8966

Map Tầng 2 Tòa nhà Sài Gòn Sky, ngõ 26 Nguyễn Thái Học, phường Đội Cung, TP. Vinh, Nghệ An

Phone Điện thoại: 1900 6680 - (024) 7308 6680 - nhánh 6

Mail Mail: contact@nhanhoa.com

Hotline Phản ánh chất lượng dịch vụ: 091 140 8966

Kết nối với Nhân Hoà
Gọi lại cho tôi
Gọi miễn phí
Gọi miễn phí
×
Thông báo

Đăng nhập thành công!