Skip to the content.

Tìm hiểu bảo mật hệ thống với firewalld và iptable.

I. Một số thuật ngữ mở đầu.

1.Packet forwarding

Packet forwarding( chuyển tiếp gói tin) là quá trình chuyển tiếp một gói tin từ phần đoạn mạng này đến phân đoạn mạng khác thông qua các điểm trong mạng. Cách các gói tin được chuyển tiếp dựa trên sự so sánh giữa địa chỉ đích của gói tin với bảng định tuyến trên node.

2.Packer filtering

Packet filtering(lọc gói tin) là kỹ thuật tường lửa sử dụng để kiểm soát các truy cập trong mạng bằng cách giám sát các gói tin đến và đi, cho phép hay chặn các gói tin dựa trên địa chỉ IP nguồn, đích, giao thức và cổng.

3.Nat

NAT(Network Address Translation) là một giao thức cho phép ánh xạ một hay nhiều địa chỉ ip ra một ra một hay nhiều địa chỉ ip khác.

4.PAT

Port Address Translation( NAT Overload) được dùng để ánh xạ nhiều địa chỉ IP thành một địa chỉ IP duy nhất bằng cách xác định qua port.

5.SNAT

Source Network Address Translation (source-nat hay SNAT) thường được sử dụng để máy chủ trong mạng nội bộ cần kết nối đến một máy chủ công cộng. Thiết bị NAT thay đổi địa chỉ IP máy chủ nguồn thành một địa chỉ IP công cộng được khai báo của thiêt bị NAT.

6.IP masquerade

Masquerade là một kiểu NAT mà sử dụng để ánh xạ nhiều địa chỉ IP thành một địa chỉ IP khác(1:many). Khác với SNAT, masquerade sẽ ánh xạ các địa chỉ IP nội bộ ra địa chỉ của IP của một interface mà không cần biết địa chỉ IP đó là gì.

7.DNAT

Destination Network Address Translation(DNAT) được dùng để ánh xạ địa chỉ ip public của thiết bị Nat đến một địa chỉ ip private trong mạng nội bộ. Các gói tin đến địa chỉ Ip Public của thiết bị Nat sẽ chuyển tiếp đến địa chỉ IP nội bộ đó.

8. /proc/sys/net/ipv4/ip_forward

/proc/sys/net/ipv4/ip_forward là file chứa thông tin về packet forward trên linux có được enable hay không. Để disable packet forward:

echo 0 > /proc/sys/net/ipv4/ip_forward

Để enable packet forward:

echo 1 > /proc/sys/net/ipv4/ip_forward

Để kiểm tra dùng lệnh cat với 1 là enable và 0 là disable:

cat /proc/sys/net/ipv4/ip_forward

9.Netfilter

Netfilter là một framework lọc package trong Linux Kernel từ 2.4.x trở lên. Iptable là phần mềm thường xuyên tương tác với netfilter. Các phần mềm trong netfilter framework cho phép lọc gói tin, nat, pat,… Netfilter sử dụng những hook trong linux kernel cho phép sử dụng các hàm callback để phân tích, thay đổi hay sử dụng các gói tin. Có 5 loại netfilter hook khác nhau:

  1. NF_IP_PRE_ROUNTING : Hook này được gọi khi một gói tin tới máy.
  2. NF_IP_LOCAL_IN : Hook này được gọi khi một gói tin có đích đến là chính máy đó.
  3. NF_IP_FORWARD : Hook này được gọi khi gói tin có đích đến là interface khác
  4. NF_IP_POST_ROUTING : Được gọi khi một gói đang trên đường trở về dây và bên ngoài máy.
  5. NF_IP_LOCAL_OUT: Được gọi khi một gói tin được tạo local và có đích đến là bên ngoài.

Các hook chủ yếu được tập hợp lại thành một nhóm để xây dựng một quá trình chuyển tiếp một loại packet : input packet, forward packet, output packet

II. Tìm hiểu về Iptables.

1. Tổng quan về IPtables

1.1. Khái niệm.

Iptables là một phần mềm tường lửa mạnh mẽ và miễn phí có sẵn trên các bản phân phối của linux. Iptables chịu trách nhiệm giao tiếp với người dùng và sau đó đẩy các luật của người dùng vào cho Netfiler xử lí. Netfilter tiến hành lọc các gói dữ liệu ở mức IP. Netfilter làm việc trực tiếp trong nhân, nhanh và không làm giảm tốc độ của hệ thống.

1.2. Lịch sử

Được phát triển trong dự án iptable bắt đầu năm 1998, được dẫn đầu bởi Rusty Russell. Iptable được tạo ra như một sự kế thừa và phát triển cho ipchains - một tiện ích tường lủa trước đó trên Linux cũng được tạo ra bởi Russell. Khi dự án mở rông, Russell thành lập Netfilter Core Team năm 1999. Họ đã tạo ra Netfilter framework và iptables, phân phối cúng dưới giấy phép GNU. Vào tháng 3 năm 2000, Netfilter và iptables đã được hợp nhất vào dòng chính của Linux Kernel.

2. Các chức năng của Iptables.

2.1. Tables

2.3. Rule

3. Sử dụng iptable command.

3.1. Cài đặt iptables-services trên Centos7

OPTION Ý nghĩa
-t/--table table Để chỉ ra table mà rule sẽ được thêm vào. Nếu không thiết lập thì mặc định là FILTER
-A/--append chain rule Để thêm một hay nhiều rule vào chain được chỉ định
-D/--delete chain rule Để xóa một hay nhiều rule khỏi chain được chỉ định
-C/--check chain rule Để kiểm tra xem một rule có tồn tại trong chain hay không
-I/--insert chain rulenum rule Để trèn một hay nhiều rule vào chain được chọn với số thứ tự nào đó
-L/--list chain Để liệt kê hết các rule trong một chain được chọn.Nếu không có chain nào được chọn thì nó sẽ liệt kê các rule của tất cả các chain
-R/--replace chain rulenum rule Dùng để thay thế rule trong chain được chọn
-F/--flush chain Xóa tất cả các rule của một chain, nếu không chỉ định chain thì nó sẽ xóa tất cả các rule trên các chain của table
-E/--rename-chain old-chain new-chain Đổi tên chain
-N/--new-chain chain Tạo một chain mới
-P/--policy chain policy Thiết lập policy mặc định cho chain, policy như một rule đặt ở cuối chain
-h Để xem thêm

Các thông số:

Thông số Ý nghĩa
-p/--protocol Thông số về giao thức. Ví dụ: tcp, udp, icmp,..
-s/--source Thông số về địa chỉ nguồn:địa chỉ, tên mạng, hoặc hostname,..
-d/--destination Thông số về địa chỉ đích: địa chỉ, tên mạng hoặc hostname,..
-j/--jump Thông số về target-hành động sẽ thực hiện với gói tin khớp với rule
-i/--in-interface Tên interface mà nhận gói tin
-o/--out-interface Tên interface mà gói tin sẽ được gửi
f/--fragment Rule sẽ chỉ áp dụng từ fragment thứ 2 trở đi của một gói tin bị phân mảnh
-g/--goto chain Xác định quy trình sẽ tiếp tục trong một chain nào đó
--mac-source address Thông số về địa chỉ MAC. Chỉ áp dụng với thiết bị Ethernet trong chain PREROUTING, FORWARD hay INPUT
-sport Thông số về port nguồn
dport Thống số về port đích

Ví dụ:

#Liệt kê các rule và các chain của table filter
iptables -t filter -L --line-number

# Cho phép truy cập port 22
iptables -A INPUT --dport 22 -j ACCEPT

#  Chặn kết nối đến địa chỉ 1.2.3.4
iptables -A OUTPUT -d 1.2.3.4 -j REJECT

#Xóa một rule 
iptables -D INPUT