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:
- NF_IP_PRE_ROUNTING : Hook này được gọi khi một gói tin tới máy.
- NF_IP_LOCAL_IN : Hook này được gọi khi một gói tin có đích đến là chính máy đó.
- NF_IP_FORWARD : Hook này được gọi khi gói tin có đích đến là interface khác
- 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.
- 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.
- Có nhiều phiên bản khác nhau của iptables sử dụng cho các giao thức khác nhau: iptables dùng cho IPv4, ip6tables dùng cho IPv6, arptable dùng cho ARP, và ebtables dùng cho Ethernet frames.
2.1. Tables
- Iptable được dùng để thiết lập, quản lý, kiểm tra các table quy định việc sử lý gói tin IPv4:
- Filter Table : Bảng mặc định quy định có cho packet đi qua hay không
- Mangle Table : Bảng này cho phép chỉnh sử header của gói tin.(ví dụ như MTU,TTL,…)
- NAT Table : sử dụng để chỉnh sửa địa chỉ nguồn hay địa chỉ đich của gói tin bằng cơ chế NAT.
- RAW Table : cho phép làm việc với các packet khi đang ở dạng thô, trước khi kernel kiểm tra trạng thát packet đó.
- Security table: Bảng security dùng để đánh dấu policy của SELinux lên các gói tin, các dấu này sẽ ảnh hưởng đến cách thức xử lý của SELinux hoặc của các máy khác trong hệ thống có áp dụng SELinux. Bảng này có thể đánh dấu theo từng gói tin hoặc theo từng kết nối.
2.2. Chains
- Các table chứa các chains, các chains là các điểm mà packet tại đây sẽ chịu ảnh hưởng của table, mỗi table có thể có nhiều chain, và mỗi chain có thể thuộc nhiều table.
- Các chain có thể được thiết lập trong iptable:
- PREROUTING: Các rule trong chain này xử lý các gói tin đi ngay sau khi đi vào interface.
- INPUT: Các rule trong chain xử lý các gói tin trước khi đi vào local process.
- OUTPUT: Các rule trong chain này xử lý các gói tin sau khi được khởi tạo bởi local process.
- FORWARD: Các rule trong chain này xử lý các gói tin được forward bởi host.
- POSTROUTING: Các rule trong chain này xử lý các gói tin trước khi chúng rời khỏi interface.
2.3. Rule
- Rules chứa criteria và target.
- Nếu các criteria là phù hợp, nó sẽ thực hiên target của rules này.
- Nếu các criteria là không phù hợp, nó sẽ chutyển sang rules tiếp theo.
2.3. Target.
- Target là hành động được áp dụng với các gói tin, nếu các gói tin khớp với các rule thì một số target có thể thực hiện là:
- ACCEPT: Chấp nhận gói tin, cho phép gói tin đi qua chain đó.
- DROP: Loại bỏ gói tin, không có phản hồi về việc loại bỏ này, như hệ thống không tồn tại.
- REJECT: Hủy gói tin và trả về gói tin báo lỗi đến người gửi.
- LOG: Ghi log đối với các gói tin khớp với rule.
- SNAT: Thay đổi ip nguồn của gói tin
- DNAT: Thay đổi ip đích của gói tin
3. Sử dụng iptable command.
3.1. Cài đặt iptables-services trên Centos7
- Tắt và disable firewalld:
systemctl stop firewalld systemctl disable firewalld
- Cài đặt, bật và enable iptables-services:
yum install -y iptables-services systemctl start iptables systemctl enable iptables
3.2 Cấu trúc câu lệnh.
Lệnh
iptables
có thể được sử dụng với một số tùy chọn, và thông số sau: Các tùy chọn:
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
- Lưu cấu hình iptables.
iptables-save
- Lưu iptables vĩnh viễn:
/usr/libexec/iptables/iptables.init save
- Khôi phục cấu hình mặc định của iptables:
iptables-restore