Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
314,73 KB
Nội dung
I. GIỚI THIỆU VỀ IPTABLES Iptables là một chương trình chạy ở không gian người dùng. Iptables là một firewall được tích hợp sẵn trong hệ điều hành Linux, do Netfilter Organiztion viết ra nhằm tăng tính bảo mật trên hệ thống Linux. Iptables cung cấp các tính năng sau: • Sử dụng firewall cho mail server, web server, DNS server. • Đảm bảo tính năng của Router như NAT, chuyển tiếp cổng (port forwarding) để vừa bảo vệ hệ thống mạng, vừa cho phép một web server công khai địa chỉ IP firewall. • Tích hợp tốt với Linux kernel, cải thiện sự tin cậy và tốc độ chạy iptables. • Có khả năng phân tích các packet một cách hiệu quả, cho phép firewall theo dõi các kết nối thông qua nó. • Tính năng lọc gói (packet filtering) dựa trên địa chỉ MAC và các cờ trong TCP Header. Từ đó, giúp hệ thống ngăn chặn việc tấn công từ bên ngoài và bảo mật hệ thống nội bộ. • Cung cấp chi tiết các tùy chọn để ghi nhận sự kiện hệ thống, ghi chép hệ thống (System logging) cho phép việc quản lí truy cập hệ thống. • Hỗ trợ việc tích hợp các chương trình Web Proxy chẳng hạn như Squid. • Ngăn chặn các kiểu tấn công từ chối dịch vụ. 1. Cơ chế xử lý packet trong iptables: Tất cả mọi dữ liệu đều được kiểm tra khi đi qua iptables, quá trình kiểm tra này được thực hiện một cách tuần tự từ entry đâu đến entry cuối bằng cách sử dụng các bảng tuần tự xây dựng sẵn (queues). Có 3 loại bảng này gồm: • Mangle: chịu trách nhiệm thay đổi các bits chất lượng dịch vụ ( quality of service bits) trong TCP header như TOS (type of service), TTL (time to live) và Mark. Hình 1: Quá trình xử lí gói tin trong bảng Mangle • Filter: chịu trách nhiệm lọc gói dữ liệu. Gồm 3 quy tắc nhỏ (Chain) để giúp thiết lập các nguyên tắc lọc gói, gồm: + Forward chain: lọc gói khi đi đến các server khác. + Input chain: lọc gói khi đi vào trong server. + Output chain: lọc gói khi đi ra khỏi server. Hình 2: Quá trình xử lý gói tin trong bảng Filter • NAT (Network Address Translation): thực thi các chức năng chuyển đổi địa chỉ IP, gồm 2 loại: + Pre-routing chain: NAT tử ngoài vào trong nội bộ. Quá trình NAT sẽ thay đổi địa chỉ đích của gói dữ liệu khi cần thiết trước khi thực hiện cơ chế routing. + Post-routing chain: NAT từ trong ra ngoài. Quá trình NAT sẽ thay đổi địa chỉ nguồn của gói dữ liệu khi cần thiết sau khi thực hiện cơ chế routing. Hình 3: Quá trình xử lý gói tin trong bảng NAT Bảng 1: Các loại queues và chain cùng chức năng của nó. Loại queues Chức năng của queuse Quy tắc xử lý gói (chain) Chức năng của chain Filter Lọc gói FORWARD Lọc gói dữ liệu đi đến các server khác kết nối trên các NIC (Network Interface Controller) của firewall. INPUT Lọc gói khi đi đến firewall. OUTPUT Lọc gói khi đi ra khỏi firewall. NAT Network Address Translation (biên dịch địa chỉ PREROUTING Thay đổi địa chỉ đích của gói tin trước khi thực hiện cơ chế routing. Sử dụng Destination NAT (DNAT). mạng) POSTROUTING Thay đổi địa chỉ nguồn của gói tin sau khi thực hiện cơ chế routing. Sử dụng Source NAT (SNAT). OUTPUT NAT sử dụng cho các gói tin xuất phát từ firewall. Rất ít khi sử dụng trong môi trường SOHO (Small Office – Home Office). Mangle Chỉnh sửa TCP header PREROUTING POSTROUTING OUTPUT INPUT FORWARD Điều chỉnh các bit qui định chất lượng dịch vụ trước khi dẫn đường. Rất ít khi sử dụng trong môi trường SOHO (Small Office – Home Office). • Mô hình mô tả đường đi của một gói dữ liệu: Hình 4: đường đi của một gói dữ liệu khi qua Firewall Đầu tiên, gói dữ liệu đi đến mạng A, tiếp đó nó được kiểm tra bởi Mangle Table PREROUTING Chain (nếu cần). Tiếp theo là kiểm tra gói dữ liệu bởi Nat Table ‘s PREROUTING Chain để kiểm tra xem gói dữ liệu có cần DNAT hay không ? DNAT sẽ thay đổi địa chỉ đích của gói dữ liệu, rồi chuyển gói dữ liệu đi. Nếu gói dữ liệu đi vào một mạng được bảo vệ, nó sẽ được lọc bởi FORWARD Chain của Filter Table, và nếu cần gói dữ liệu sẽ được SNAT trong POSTROUTING Chain để thay đổi IP nguồn trước khi vào mạng B. Nếu gói dữ liệu được định hướng vào bên trong Firewall, nó sẽ được kiểm tra bởi INPUT Chain trong Mangle Talbe, và nếu gói dữ liệu qua được các kiểm tra của INPUT Chain trong Filter Table, nó sẽ vào trong các chương trình của Server bên trong Firewall. Khi Firewall cần gói dữ liệu ra ngoài. Gói dữ liệu sẽ được dẫn và đi qua sự kiểm tra của OUTPUT Chain trong Mangle Table (nếu cần), tiếp đó là kiểm tra trong OUTPUT Chain của NAT Table để xem DNAT (DNAT sẽ thay đổi địa chỉ đến) có cần hay không và OUTPUT Chain của Filter Table sẽ kiểm tra gói dữ liệu nhằm phát hiện các gói dữ liệu không được phép gửi đi. Cuối cùng trước khi gói dữ liệu được đưa ra lại Internet, SNAT và QoS sẽ được kiểm tra trong POSTROUTING Chain. 2. Một số khái niệm trong Iptables: • Chain: là một chuỗi bao gồm nhiều Rule, mặc định các bảng có sẵn các chain như: INPUT, OUTPUT, FORWARD • Rule: là các luật đưa ra các điều kiện so sánh, tập hợp nhiều rule tạo thành chain. • Jump: là cơ chế chuyển một packet đến một target nào đó để xử lý thêm một số thao tác. • Target: là quá trình xử lý khi các gói tin đủ điều kiện. Các target được xây dựng sẵn trong iptables như trong bảng sau: Bảng 2: Miêu tả các target thường dùng trong iptables. Targets Ý nghĩa Tùy chọn ACCEPT Iptables ngừng xử lý gói dữ liệu đó và chuyển tiếp nó vào một ứng dụng cuối hoặc hệ điều hành để xử lý tiếp tục. DROP Iptables ngừng xử lý gói dữ liệu đó và gói dữ liệu bị chặn lại, loại bỏ. LOG Thông tin của gói dữ liệu sẽ đưa vào syslog để kiểm tra. Iptables tiếp tục xử lý gói với quy luật kế tiếp. log-prefix “string” Iptables sẽ thêm vào log message một chuỗi do người dùng định sẵn. Thông thường là để thông báo lý do loại bỏ gói tin. REJECT Tương tự như DROP, nhưng reject-with qualifier nó sẽ gởi trả lại cho phía người gởi một thông báo lổi rằng gói tin đã bị chặn và loại bỏ. Tham số qualifier sẽ cho biết loại thông báo gởi trả lại phía gửi. Qualifier gồm các loại sau: Icmp-port-unreachable (default) Icmp-net-unreachable Icmp-host-unreachable Icmp-proto-unreachable Icmp-net-prohibited Icmp-host-prohibited Tcp-reset Echo-reply DNAT Dùng để thực hiện Destination Network Address Translation, địa chỉ đích của gói dữ liệu sẽ được viết lại. to-destination <ipaddress> Iptables sẽ được viết lại địa chỉ IP vào địa chỉ đích của gói dữ liệu. SNAT Dùng để thực hiện Source Network Address Translation, địa chỉ nguồn của gói dữ liệu sẽ được viết lại. to-source <ipaddress> Iptables sẽ được viết lại địa chỉ IP vào địa chỉ nguồn của gói dữ liệu. MASQUERADE Dùng để thực hiện Source Network Address Translation, mặc định thì địa chỉ IP nguồn sẽ giống như IP nguồn của firewall. to-ports <port> Ghi rõ tầm các port nguồn mà port gốc có thể ánh xạ được. II. CẤU HÌNH IPTABLES: 1. Cài đặt iptables: • Iptables được cài đặt mặc định trong hệ thống Linux, packet của iptable là iptables-version.rpm hoặc iptables-version.tgz , ta có thể dùng lệnh sau để cài đặt packet này: Đối với Red Hat: # rpm –ivh iptables-version.rpm Đối với Debain # apt-get install iptables • Lệnh khởi động iptables: # service iptables start • Lệnh tắt iptables: # service iptables stop • Lệnh khởi động lại iptables: # service iptables restart • Lệnh xem tình trạng của iptables: # service iptables status • Lệnh save cấu hình iptables: # service iptables save • Để khởi động iptables mỗi khi khởi động Linux: # chkconfig iptables on 2. Xử lý khi iptables không khởi động: • Khi cài đặt và khởi động iptables thì ta dùng lệnh /etc/init.d/iptables start. Lúc này, iptables gọi script trong file /etc/sysconfig/iptables. Do đó, nếu file này không tồn tại hoặc bị lỗi thì iptables sẽ không khởi động được. • Khi thay đổi cấu hình trên iptables, ta phải dùng lệnh service iptables save để lưu lại các thông tin cấu hình. Sau đó mới tiến hành restart lại iptables. • Khởi động iptables: # service iptables start • Tạo file iptables trống: # touch /etc/sysconfig/iptables • Thiết lập quyền cho file này: # chmod 600 /etc/sysconfig/iptables # service iptables start 3. Các tham số chuyển mạch (switching) quan trọng của iptables: Các tham số sau cho phép iptables thực hiện các hành động sao cho phù hợp với biểu đồ xử lí gói do người dùng hoạch định sẵn. Bảng 3: Các tham số chuyển mạch (switching) quan trọng của iptables. Lệnh switching quan trọng ý nghĩa -A ( append) Nồi thêm một quy luật nào đó vào cuối chuỗi (chain). -D ( delete) Xóa rule đã chỉ định. -E ( rename-chain) Đổi tên chain. -F ( flush) chainname Xóa hết tất cả mọi quy luật trong bảng đã chọn. -I ( insert) Chèn thêm rule vào vị trí được xác định. -L ( list) Xem các rule trong các chain. -N ( new-chain) Tạo một chain mới. -P ( policy) Thay đổi rule mặc định cho chain. -R ( replace) Thay thế một rule bằng một rule khác tại vị trí đã xác định. -V ( version) Xem phiên bản của iptables. -X ( delete-chain) chainname Xóa chain. -Z ( zero) Xóa bộ đệm trong chain. -t <table> Chỉ định bảng cho iptables bao gồm: filter, nat, mangle. Nếu không chỉ định rõ ràng thì filter table sẽ được áp dụng. -j <target> Nhảy đến một target nào đó khi gói dữ liệu phù hợp quy luật hiện tại. -p <protocol-type> Chỉ định các giao thức bao gồm: icmp, tcp, udp và all. -s <ip-address> Chỉ định địa chỉ nguồn. -d <ip-address> Chỉ định địa chỉ đích. -i <interface-name> Chỉ định interface cho các gói tin đi vào. -o <interface-name> Chỉ định interface cho các gói tin đi ra. sport <port> Chỉ định port nguồn của gói tin. dport <port> Chỉ định port đích của gói tin. syn (chỉ sử dụng cho –p tcp) Yêu cầu một kết nối mới. -m <multiport> Chỉ định nhiều dãy cổng. -m state state Kiểm tra trạng thái: ESTABLISHED: đã thiết lập connection. NEW: bắt đầu thiết lập connection. RELATED: thiết lập connection thứ 2. INVALID: gói dữ liệu không thể nhận dạng được do thiếu tài nguyên. icmp-type <type> Sử dụng với các tùy chọn thông dụng như: echo- reply và echo-request. Để hiểu rõ hơn về các lệnh, ta cùng xem một số ví dụ sau: Ví dụ 1: Tạo một chain NEWCHAIN trong bảng iptables. # iptables -N NEWCHAIN Ví dụ 2: Xóa chain NEWCHAIN trong bảng iptables. # iptables -X NEWCHAIN Ví dụ 3: Xóa các rule có trong chain INPUT. # iptables -F INPUT Ví dụ 4: Xóa dòng rule thứ 2 trong chain INPUT. # iptables -D INPUT 2 Ví dụ 5: Thay đổi rule mặc định cho chain INPUT là ACCEPT. # iptables –P INPUT ACCEPT Ví dụ 6: Firewall chấp nhận cho bất kì gói tin nào có giao thức TCP đi vào interface eth0 đến địa chỉ 192.168.1.1 . # iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p tcp -j ACCEPT Ví dụ 7: Firewall chấp nhận gói tin nào có giao thức TCP được định tuyến khi nó đi vào interface eth0 và đi ra interface eth1 để đến đích 172.28.2.2 với port nguồn bắt đầu từ 1024 đến 65535 và port đích là 8080. # iptables -A FORWARD -s 0/0 -i eth0 -o eth1 -d 172.28.2.2 -p tcp sport 1024:65535 dport 8080 -j ACCEPT Ví dụ 8: Firewall cho phép gửi gói tin icmp echo-request và icmp echo-reply. # iptables -A OUTPUT -p icmp icmp-type echo-request -j ACCEPT # iptables -A INPUT -p icmp icmp-type echo-reply -j ACCEPT Ví dụ 9: Firewall chấp nhận gói tin có giao thức TCP từ bất kì địa chỉ nào đi vào interface eth0 đến địa chỉ 172.28.24.195 qua interface eth1, source port từ 1024 đến 65535 và destination port là 8080 và 433. Khi gói dữ liệu được nhận trở lại từ 172.28.2.2, thay vì mở các port nguồn và đích, bạn chỉ việc cho phép dùng kết nối cũ đã thiết lập bằng cách dùng tham số -m state và state ESTABLISHED. # iptables -A FORWARD -s 0/0 -i eth0 -d 172.28.24.195 -o eth1 -p tcp sport 1024:65535 -m multiport dport 8080,433 -j ACCEPT # iptables -A FORWARD -d 0/0 -i eth0 -s 172.28.2.2 -o eth1 -p tcp -m state state ESTABLISHED -j ACCEPT 4. Sử dụng chain tự định nghĩa (user defined chains): Chuỗi User Defind Chains nằm trong bảng iptables. Nó giúp cho quá trình xử lý gói tốt hơn. Thay vì sử dụng các “single chain” đã được xây dựng trong iptables để xử lý cho từng giao thức, ta có thể sử dụng User Defind Chains để định nghĩa một chain gồm nhiều chuỗi chain mô tả cho tất cả kiểu giao thức (protocol style) cho gói tin. Mặc khác, ta có thể dùng User Defined Chains để thay thế cho những chuỗi “long chain” bằng cách sử dụng chain chính chỉ đến các chain con. Ví dụ 10: Sáu lệnh sau giúp việc cải tiến tốc độ xử lý: # iptables -A INPUT -i eth0 -d 192.168.10.2 -j fast-input-queue # iptables -A OUTPUT -o eth0 -s 192.168.1.2 -j fast-output-queue # iptables -A fast-input-queue -p icmp -j icmp-queue-in # iptables -A fast-output-queue -p icmp -j icmp-queue-out # iptables -A icmp-queue-in -p icmp icmp-type echo-reply -j ACCEPT # iptables -A icmp-queue-out -p icmp icmp-type echo-request -m state state NEW -j ACCEPT Bảng 4: Danh sách các lệnh (Queue) Chain Description INPUT Được xây dựng trong INPUT chain trong bảng iptables. OUTPUT Được xây dựng trong OUTPUT chain trong bảng iptables. Fast-input-queue INPUT chain tách riêng biệt để hỗ trợ cho những giao thức đặc biệt và chuyển các gói đến những protocol specific chains. Fast-output-queue OUTPUT chain tách riêng biệt để hỗ trợ cho những giao thức đặc biệt và chuyển các gói đến những protocol specific chains. Icmp-queue-in Lệnh input tách riêng cho giao thức ICMP. Icmp-queue-out Lệnh output tách riêng cho giao thức ICMP. 5. Cơ chế NAT trong iptables: Source NAT (SNAT) và Destination NAT (DNAT) thường được dùng để chia sẽ kết nối internet giữa các máy tính trong mạng nội bộ. Máy tính kết nối internet được coi là một gateway. SNAT sẽ thay đổi địa chỉ nguồn của các gói tin đi ra internet bằng địa chỉ IP tĩnh internet của gateway. Khi gateway nhận được các gói tin trả về internet, DNAT sẽ thay đổi địa chỉ đích của các gói tin rồi chuyển đến các máy tính trong mạng nội bộ. Trong iptables POSTROUTING chain của bảng NAT sẽ đảm nhận công việc SNAT. SNAT có hai phần mở rộng đó là SNAT và MASQUERADE. SNAT dùng cho các máy tính gateway có địa chỉ IP tĩnh. Còn MASQUERADE dùng cho các máy tính gateway có địa chỉ IP động. Chúng ta có thể thiết lập SNAT trên giao diện eth1 bằng lệnh : # iptables -t nat -A POSTROUTING -o eth1 -j SNAT to-source 192.168.10.1 Và với MASQUERADE : # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE Tương tự như vậy PREROUTING chain của bảng NAT sẽ đảm nhận công việc Destination NAT (DNAT) : # iptables -t nat -A PREROUTING -i eth1 -p tcp dport 80 -j DNAT to- destination 192.168.1.3:8080 Câu lệnh trên cho phép những gói tin đi vào từ interface eth1 với giao thức tcp cổng được chuyển đến địa chỉ IP 192.168.1.3 cổng 8080. 6. Transparent proxying: Transparent proxy là một cách để kiểm soát việc truy cập internet của các máy trong mạng nội bộ. Transparent proxy được thiết lập để ngăn chặn những kết nối ra ngoài và chuyển hướng chúng vào một máy tính thay thế vị trí của các máy tính [...]... thể mở rộng khả năng giới hạn của iptables để giảm thiểu khả năng tấn công DOS Đây là cách phòng chống kiểu tấn công SYN flood bằng cách khi gói tin nhận tới là 3 thì Firewall sẽ giới hạn năm gói tin SYN trong dòng một giây # iptables -A INPUT -p tcp syn -m limit limit 5/s limit-burst 3 -j ACCEPT 2 Một số ví dụ về iptables Firewall: Ví dụ 12: Cho phép truy cập WEB # iptables -A INPUT -i eth0 -p tcp... multiport dport 80,433 -j ACCEPT # iptables -A OUTPUT -o eth0 -p tcp -m multiport dport 80,433 -j ACCEPT Ví dụ 13: Cho phép ssh vào trong firewall # iptables -A INPUT -i eth0 -p tcp dport 22 -j ACCEPT # iptables -A OUTPUT -o eth0 -p tcp sport 22 -j ACCEPT Ví dụ 14: Cho phép DNS hoạt động: # iptables -A INPUT -i eth0 -p udp sport 53 dport 1024:65535 -j ACCEPT # iptables -A OUTPUT -o eth0 -p udp... trên cổng 8888, tất cả gói tin đi ra ngoài bằng giao thức HTTP qua port 80 sẽ bị chuyển hướng đến port 8888 # iptables -t nat -A PREROUTING -i eth0 -p tcp dport 80 -j REDIRECT toport 8888 III Phòng chống tấn công và một số ví dụ về iptables: 1 Phòng chống tấn công từ chối dịch vụ (DOS): Iptables cho phép giới hạn số lượng các gói tin phù hợp trong một giây Ta có thể chỉ định số lượng gói tin trong... địa chỉ của WEB Server: # iptables -t nat -A PREROUTING -d 0/0 -o eth0 -p tcp dport 80 -j DNAT todestination 10.0.0.10 (địa chỉ WEB Server) # iptables -A POSTROUTING -s 10.0.0.0/24 -j SNAT -o eth1 to-source 203.162.1.10 (địa chỉ internet của firewall) # iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 10.0.0.10 -p tcp dport 80 sport 1024:65535 -m state state NEW -j ACCEPT # iptables -A FORWARD -t filter... iptables -A FORWARD -t filter -i eth0 -m state state ESTABLISHED,RELATED -j ACCEPT IV Kết luận: Iptables là firewall rất mạnh do được tích hợp sẵn trong nhân của hệ điều hành Linux Iptables có tốc độ nhanh hơn nhiều so với các firewall khác Có thể nói đây là một trong những firewall chi tiết nhất vì các rule của nó áp dụng chi tiết cho từng gói tin Nhưng cũng chính vì vậy mà cách tạo rule trong Iptables. .. nguồn các gói tin của máy tính trong mạng nội bộ đi ra ngoài (eth0) thành địa chỉ Firewall: # iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE Cho phép các kết nối đã thành lập, kết nối mới, kết nối thứ 2: #iptables -A FORWARD -t filter -i eth1 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT #iptables -A FORWARD -t filter -i eth0 -m state state ESTABLISHED,RELATED -j ACCEPT Ví dụ... phải ghi nhớ những tham số và câu lệnh khá dài thì người quản trị còn phải hiểu rõ phương thức sử lý gói tin trong Iptables. Người quản trị còn phải nắm vũng lý thuyết về phương thức tạo kết nối cũng như các cổng làm việc của từng ứng dụng Vì vậy việc quản trị loại firewall này không phải dễ Iptables có nhiều ưu điểm nhưng cũng không ít nhược điểm Do đó chúng ta nên cân nhắc kỹ trước khi sử dụng loại... vì /second Trong ví dụ sau đây, gói ICMP echo requests bị giới hạn tốc độ truyền không nhiều hơn một yêu cầu trong một giây Đặc điểm này của iptables giúp ta lọc bớt các lưu lượng lớn, đây chính là đặc tính của tấn công từ chối dịch vụ (DOS) và sâu internet # iptables -A INPUT -i eth0 -p icmp -icmp-type echo-request -m limit limit 1/s -j ACCEPT Syn flood là 1 dạng tấn công từ chối dịch vụ, kẻ tấn . –ivh iptables- version.rpm Đối với Debain # apt-get install iptables • Lệnh khởi động iptables: # service iptables start • Lệnh tắt iptables: # service iptables stop • Lệnh khởi động lại iptables: #. lại iptables: # service iptables restart • Lệnh xem tình trạng của iptables: # service iptables status • Lệnh save cấu hình iptables: # service iptables save • Để khởi động iptables mỗi khi khởi. chkconfig iptables on 2. Xử lý khi iptables không khởi động: • Khi cài đặt và khởi động iptables thì ta dùng lệnh /etc/init.d /iptables start. Lúc này, iptables gọi script trong file /etc/sysconfig /iptables.