Tải bản đầy đủ (.docx) (21 trang)

Iptables Firewall

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (416.2 KB, 21 trang )

“BACHKHOA-NPOWER” − HỆ THỐNG ĐÀO TẠO CHUYÊN GIA MẠNG QUỐC TẾ
o0o
ĐỀ TÀI HOÀN THÀNH MÔN HỌC
“CompTIA Security+ Certification (Security +)”
Iptables Firewall
Giảng viên hướng dẫn: Vũ Quý Hòa

Học viên: Đào Quang Chiến
Dương Tiến Mạnh
Lớp: S0808H
Tháng 1, 2011
[1]
Mục lục
Iptables Firewall
Chương I.Giới thiệu về iptables
Iptables do Netfilter Organiztion viết ra để tăng tính năng bảo mật trên hệ
thống Linux. Iptables cung cấp các tính năng sau:
• Tính năng lọc gói (packet filtering)
• Tính năng NAT (network address translation)
• Và một số tính năng quản lý chất lượng gói tin (packet mangling)
• Iptables hoạt động ở tầng 3 trong mô hình OSI
1.Cơ chế xử lý package trong iptables
Iptables được chia làm 3 bảng:
NAT table: thực thi chức năng NAT (Network Address Translation), bao gồm
ba loại built-in chains sau đây:
[2]
• Pre-routing chain: NAT từ ngoài vào trong nội bộ. Quá trình NAT sẽ
thực hiện trước khi thực thi cơ chế routing. Điều này thuận lợi cho
việc đổi địa chỉ đích để địa chỉ tương thích với bảng định tuyến của
firewall, khi cấu hình ta có thể dùng khóa DNAT để mô tả kỹ thuật
này.


• Post-routing chain: NAT từ trong ra ngoài. Quá trình NAT sẽ thực
hiện sau khi thực hiện cơ chế định tuyến. Quá trình này nhằm thay
đổi địa chỉ nguồn của gói tin. Kỹ thuật này được gọi là NAT one-to-
one hoặc many-to-one, được gọi là Source NAT hay SNAT.
• OUTPUT: Trong loại này firewall thực hiện quá trình NAT.
Hình 1 : Quá trình xử lý gói tin trong bảng NAT
Filter table: chịu trách nhiệm thiết lập bộ lọc packet (packet filtering), có
ba loại built-in chains :
• Forward chain: Cho phép packet nguồn chuyển qua firewall.
• Input chain: Cho phép những gói tin đi vào từ firewall.
• Output chain: Cho phép những gói tin đi ra từ firewall.
[3]
Hình 2 :Quá trình xử lý gói tin trong bảng Filter
Mangle table: chịu trách nhiệm biến đổi quality of service bits trong TCP
header.
Hình 3 :Quá trình xử lý gói tin trong bảng Mangle
[4]
2.Một số khái niện 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
• 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 khá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ư:
 ACCEPT: chấp nhận chuyển gói tin di qua.
 DROP: chặn những gói tin.
 REJECT: chặn những gói tin và báo lại cho người gửi
 DNAT: thay đổi địa chỉ đích của gói tin

 SNAT: thay đổi địa chỉ nguồn của gói tin
 MASQUERADING: là một kỹ thuật đặc biệt của SNAT (Many to One
NAT).
Chương II.Cấu hình Iptables
Trong Centos , file cấu hình Iptables nằm trong /etc/sysconfig/iptables. Một
số lệnh để bật Iptables:
#chkconfig levels 345 iptables on
#service iptables start
Một số file cấu hình khác
• /etc/sysctl.conf
• /proc/sys/net/ipv4/ip_forward
• /proc/net/ip_conntrack
• /proc/sys/net/ipv4/ip_conntrack_max
Iptables yêu cầu load một số module sau:
• iptable_nat module cho NAT.
• ip_conntrack_ftp module cần cho FTP support
• ip_conntrack module để theo dõi trạng thái của TCP connect.
• ip_nat_ftp module cần cho việc load FTP servers sau NAT firewall.
[5]
1.Network Address Translation (NAT)
NAT có thể hoạt động trên nhiều chức năng khác nhau dựa trên thao tác với
địa chỉ ( đích hoặc nguồn ) và các cổng. NAT trong iptables hỗ trợ các module để
giúp nhúng địa chỉ vào các gói dữ liệu được trao đổi theo các giao thức. Nếu không
có các module giúp đỡ, các gói dữ liệu sẽ được sửa đổi để đi đến các host khác nhau,
nhưng dữ liệu của ứng dụng được trao đổi vẫn sẽ sử dụng Pre-NAT (DNAT) .
Helper Protocol
ip_nat_amanda Amanda backup protocol (cần cấu hình
file CONFIG_IP_NF_NAT_AMANDA)
ip_nat_ftp File Transfer Protocol (cần cấu hình file
CONFIG_IP_NF_NAT_FTP )

ip_nat_irc Internet Relay Chat (cần cấu hình file
CONFIG_IP_NF_NAT_IRC )
ip_nat_snmp_basic Simple Network Management Protocol
(cần cấu hình file
CONFIG_IP_NF_NAT_SNMP_BASIC)
ip_nat_tftp Trivial File Transfer Protocol (cần cấu
hình file CONFIG_IP_NF_NAT_TFTP)
Bảng 4 : Những module giúp đỡ của NAT
Nếu muốn một số gói tin nào đó vượt qua bảng NAT, chúng ta sử dụng lệnh:
#iptables -t nat -i eth1 -j ACCEPT
2. Source NAT , Destination NAT and Masquerading
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à gateway . Source NAT (SNAT) sẽ thay đổi địa chỉ nguồn của các gói tin
[6]
di ra internet bằng địa chỉ Ip internet tĩnh của gateway. Khi gateway nhận được
các gói tin trả về từ internet , Destination NAT (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
Source SNAT. Source NAT 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
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) . Ví dụ
# 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 di 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 .
3. Transparent Proxying
Transparent proxy là một cách để 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 đích ban
đầu. Kỹ thuật này cho phép chúng ta thiết lập proxy cho các dịch vụ mà không cần
phải cấu hình mỗi máy tính trong mạng nội bộ. Ví dụ có một proxy HTTP ( Squid)
được cấu hình lắng nghe trên cổng 8888, chúng ta có thể thêm một rule để chuyển
hướng lưu lượng HTTP ra ngoài thông qua Proxy :
#iptables -t nat -A PREROUTING -i eth0 -p tcp dport 80 -j REDIRECT
to-port 8888
[7]
4.Các câu lệnh trong Iptables
a,Các câu lệnh trợ giúp:
#iptables -h
#iptables -m match -h
#iptables -j TARGET -h
#man iptables
b,Các Tùy chọn
Tùy chọn Giải thích
-A ( append) Ghi thêm một rule vào chain
-D ( delete) Xóa rule
-E ( rename-chain) Đổi tên chain
-F ( flush) Xóa tất cả rule trong một chain
-I ( insert) Chèn thêm rule vào chain tại vị trí được
xác định
-L ( list) Xem các rule trong chain
-N ( new-chain) Tạo một chain mới
-P ( policy) Tạo 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) Xóa chain
-Z ( zero) Xóa bộ đếm trong chain
-t Chỉ định bảng cho iptables bao gồm:
filter, nat, mangle tables
-j Nhảy đến một target
-p Mô tả các giao thức bao gồm: icmp,
tcp, udp và all
-s Chỉ định địa chỉ nguồn
-d Chỉ định địa chỉ đích
-i Chỉ định địa chỉ interface cho các gói tin
đi vào
-o Chỉ định địa chỉ interface cho các gói tin
đi ra
[8]
-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
c,Các câu lệnh lưu và phục hồi Iptables
• iptables-restore : lệnh phục hồi iptables có hai tùy chọn :
Tùy chọn Giải thích
-c ( counters) Phục hồi bộ đếm gói và byte cho các
rule
-n ( noflush) Tắt chức năng xóa (-flush) trong

tables trước khi phục hồi
• iptables-save : lệnh ghi lại Iptables có hai tùy chọn
Tùy chọn Giải thích
-c ( counters) Hiện bộ đếm gói và byte cho các rule
-t ( table) Chỉ hiện bảng được chỉ định
Chương III, Các kiểu chặn và một số ví dụ về Iptables
1,Ví dụ về mô hình firewall
[9]
2,Các kiểu chặn Iptables
• Chặn theo giao thức : Dựa trên giao thức TCP , UDP và các port
Sử dụng với tùy chọn
–p tcp hoặc - udp
Giải thích
sport <port> Địa chỉ nguồn : có thể là một port
[10]
hoặc một dải port
start-portnumber:end-portnumber
dport <port> Địa chỉ đích : có thể là một port hoặc
một dải port
start-portnumber:end-portnumber
syn (chỉ sử dụng cho –p tcp) Sử dụng để xác định yêu cầu thiết lập
connection mới
Ví dụ :
# iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP
-sport 1024:65535 -dport 80 -j ACCEPT
Trong ví dụ này cho phép chuyển các gói tin đi vào từ interface eth0 và ra interface
eth1 có địa chỉ nguồn bất kỳ và địa chỉ đích là 192.168.1.58 với giao thức TCP có
port nguồn từ 1024 đến 65535 và port đích là 80 (http).
• Chặn gói ICMP (ping):
Sử dụng với tùy chọn

icmp-type
Giải thích
icmp-type <type> Sử đung với các tùy chọn thông dụng
như : echo-reply và echo-request
Ví dụ :
#iptables -A OUTPUT -p icmp icmp-type echo-request -j ACCEPT
#iptables -A INPUT -p icmp icmp-type echo-reply -j ACCEPT
Trong ví dụ này Iptables cho phép các máy tính trong mạng nội bộ ping ra ngoài .
• Chặn dựa trên trang thái kết nối :
Sử dụng với tùy chọn Giải thích
[11]
-m multiport
sport <port, port> Sử dụng để chỉ ra nhiều port nguồn
dport <port, port> Sử dụng để chỉ ra nhiều port đích
Sử dụng với tùy chọn
-m state
Giải thích
state <state> Sử dụng với các tùy chọn trạng thái như
ESTABLISHED ,NEW , RELATED
Ví dụ:
#iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP
sport 1024:65535 -m multiport dport 80,443 -j ACCEPT
Trong ví dụ trên Iptables cho phép chuyển các gói tin từ eth0 đến eth1 với điều kiện
các gói tin có địa chỉ nguồn bất kỳ và địa chỉ đích là 192.168.1.58 , giao thức TCP có
port nguồn từ 1024 đến 65535 và port đích là 80 (http) và 443 (SSL).
#iptables -A FORWARD -d 0/0 -o eth0 -s 192.168.1.58 -i eth1 -p TCP
-m state state ESTABLISHED -j ACCEPT
Trong ví dụ trên Iptables cho phép chuyển các gói tin từ eth0 đến eth1 với điều kiện
các gói tin có địa chỉ nguồn bất kỳ và địa chỉ đích là 192.168.1.58 , giao thức TCP
với trạng thái kết nối mới.

3. Ví dụ tạo chain và Iptables Scripts
• Tạo chain : ngoài các chain có sẵn chúng ta có thể tự tạo chain theo ý muốn
của mình để dễ dàng cho việc phân luồng quản lý và tăng tốc độ xử lý.
Ví dụ:
#iptables -A INPUT -i eth0 -d 206.229.110.2 -j fast-input-queue
#iptables -A OUTPUT -o eth0 -s 206.229.110.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
[12]
#iptables -A icmp-queue-out -p icmp icmp-type echo-request -m
state state NEW -j ACCEPT
#iptables -A icmp-queue-in -p icmp icmp-type echo-reply -j ACCEPT
Trong ví dụ trên chúng ta sử dụng 6 chain:
Chain Giải thích
INPUT Chain có sẵn trong Iptables
OUTPUT Chain có sẵn trong Iptables
fast-input-queue Xác định giao thức vào
fast-output-queue Xác định giao thức ra
icmp-queue-out Xác định giao thức ICMP vào
icmp-queue-in Xác định giao thức ICMP ra
• Tạo Iptables scripts: một ví dụ điển hình là file /etc/rc.d/rc.local .Đây
chính là file firewall scripts được chạy mỗi khi hệ điều hành khởi động.
Ví dụ:
#!/bin/bash
# Load modules cho FTP connection tracking và NAT
modprobe ip_conntrack_ftp
modprobe iptable_nat
# Xóa tất cả các rule trong chain
iptables flush
iptables -t nat flush

iptables -t mangle flush
#Xóa tất cả các chain
iptables delete-chain
iptables -t nat delete-chain
iptables -t mangle delete-chain
# Tạo rule mặc định cho các chain là Drop
iptables policy INPUT DROP
iptables policy OUTPUT DROP
iptables policy FORWARD DROP
[13]
# Cho phép tất cả được qua loopback interface
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Tiếp theo chúng ta có thể tạo rule riêng cho từng trường hợp
Rule 1
Rule 2
Rule 3

4. Ví dụ về một số rule trên Iptables
• Cho phép DNS hoạt động:
# iptables -A OUTPUT -p udp -o eth0 dport 53 sport 1024:65535
-j ACCEPT
#iptables -A INPUT -p udp -i eth0 sport 53 dport 1024:65535
-j ACCEPT
• Mở cổng cho phép WEB và SSL hoạt động :

#iptables -A OUTPUT -o eth0 -m state state ESTABLISHED,RELATED
-j ACCEPT
#iptables -A INPUT -p tcp -i eth0 dport 22 –sport 1024:65535 -m state
state NEW -j ACCEPT

# iptables -A INPUT -p tcp -i eth0 dport 80 –sport 1024:65535 -m state
state NEW -j ACCEPT
• Cho phép máy firewall vào WEB:
#iptables -A OUTPUT -j ACCEPT -m state state NEW -o eth0 –p tcp -m
multiport dport 80,443
#iptables -A INPUT -j ACCEPT -m state state ESTABLISHED,RELATED -i
eth0 –p tcp
• Cho phép máy tính mạng nội bộ vào internet:
#iptables -A INPUT -j ACCEPT -p all -s 192.168.1.0/24 -i eth1
[14]
#iptables -A OUTPUT -j ACCEPT -p all -d 192.168.1.0/24 -o eth1
• Masquerading (Many to One NAT)
Load NAT module:
#modprobe iptable_nat
Bật tính năng ip forward:
#echo 1 > /proc/sys/net/ipv4/ip_forward
Đổi địa chỉ 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ỉ của 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ứ hai:
#iptables -A FORWARD -t filter -i eth1 -m state state
NEW,ESTABLISHED,RELATED -j ACCEPT
[15]
#iptables -A FORWARD -t filter -i eth0 -m state state
ESTABLISHED,RELATED -j ACCEPT
• Static NAT
Load NAT module:
#modprobe iptable_nat
Bật tính năng ip forward

#echo 1 > /proc/sys/net/ipv4/ip_forward
Đổi địa chỉ đích các gói tin của máy tính ngoài mạng đi vào
eth0 (203.162.1.10) thành địa chỉ của WEB Server
#iptables -t nat -A PREROUTING -d 0/0 -o eth0 -p tcp dport 80 -j
DNAT to-destination 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
[16]
#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
5.Mô hình bài lab
Yêu cầu :
• Cho PC1 ra Internet
• Public DNS ,WEB, FTP Server
File /etc/sysconfig/iptables sau khi cấu hình xong:
• Firewall 1:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#Đổi địa chỉ nguồn của các gói tin ra eth0 thành địa chỉ của firewall (eth0)
[17]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]

:OUTPUT DROP [0:0]
:FORWARD DROP [0:0]
#Cho phép các gói tin có cổng đích là 80(http),443(https),21(ftp) đi vào eth1

#ra eth0
-A FORWARD -i eth1 -o eth0 -p tcp -m multiport dports 80,443,21 -j
ACCEPT
#Cho phép các gói tin giao thức udp có cổng đích là 53(DNS) đi vào eth1 và
ra
#eth0
-A FORWARD -s -i eth1 -o eth0 -p udp -m udp dport 53 -j ACCEPT
# Cho các gói tin của kết nối đã được thành lập , của kết nối thứ hai được
phép
#đi vào eth0 và ra eth1
-A FORWARD -i eth0 -o eth1 -m state state ESTABISHED,RELATED -j
ACCEPT
COMMIT
• Firewall 2:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#Đổi đỉa chỉ đích của các gói tin đi vào eth0 có cổng đích là
[18]
#80(http),443(https),21(ftp) thành 12.0.0.2
-A PREROUTING -i eth0 -p tcp -m multiport dport 80,443,21 -j DNAT to-
destination 12.0.0.2
#Đổi đỉa chỉ đích của các gói tin đi vào eth0 có cổng đích là 53 (DNS) thành
#12.0.0.2
-A PREROUTING -i eth0 -p udp -m udp dport 53 -j DNAT to-destination

12.0.0.2
#Đổi địa chỉ nguồn của các gói tin ra eth0 thành địa chỉ của firewall (eth0)
-A POSTROUTING -o eth0 -j MASQUERADE
#Đổi địa chỉ đích của các gói tin di vào eth0 giao thức tcp và có cổng đích từ
#1024 đến 65535 thành 12.0.0.2
-A PREROUTING -i eth0 -p tcp -m multiport dports 1024:65535 -j DNAT
to-destination 12.0.0.2
#Đổi địa chỉ nguồn của các gói tin di ra eth2 có địa chỉ đích là 12.0.0.2 thành
#12.0.0.1
-A POSTROUTING -d 12.0.0.2 -o eth2 -j SNAT to-source 12.0.0.1
COMMIT
*filter
:INPUT DROP [0:0]
:OUTPUT DROP [0:0]
:FORWARD DROP [0:0]
#Cho phép các gói tin có địa chỉ nguồn là 11.0.0.1 đi vào eth1 và ra eth0
-A FORWARD -s 11.0.0.1 -i eth1 -o eth0 -j ACCEPT
# Cho các gói tin của kết nối đã được thành lập , của kết nối thứ hai được
phép
[19]
#đi vào eth0 và ra eth1
-A FORWARD -i eth0 -o eth1 -m state state ESTABISHED,RELATED -j
ACCEPT
#Cho phép các gói tin có cổng đích là 80(http),443(https),21(ftp) đi vào eth0

#ra eth2
-A FORWARD -i eth0 -o eth2 -p tcp -m multiport dports 80,443,21 -j
ACCEPT
#Cho phép các gói tin có cổng đích là 53(DNS) đi vào eth0 và ra eth2
-A FORWARD -i eth0 -o eth2 -p udp -m udp dport 53 -j ACCEPT

# Cho các gói tin của kết nối đã được thành lập , của kết nối thứ hai được
phép
#đi vào eth2 và ra eth0
-A FORWARD -i eth2 -o eth0 -m state state ESTABLISHED,RELATED -j
ACEEPT
#Cho phép các gói tin có cổng nguồn từ 1024 đến 65535 đi vào eth0 và ra
eth2
-A FORWARD -i eth0 -o eth2 -p tcp -m multiport sports 1024:65535 -j
ACCEPT
COMMIT
Chương 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 rất phức
[20]
tạp. Ngoài việc 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 firewall này.
[21]

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×