Dịch vụ firewall trên linux có tên gọi là gì

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.

Show

    Mục lục []

    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.

    Dịch vụ firewall trên linux có tên gọi là gì

    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

    Dịch vụ firewall trên linux có tên gọi là gì

    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ó.

    Dịch vụ firewall trên linux có tên gọi là gì

    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

    Dịch vụ firewall trên linux có tên gọi là gì

    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

    Dịch vụ firewall trên linux có tên gọi là gì

    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.

    Dịch vụ firewall trên linux có tên gọi là gì

    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.