Chuyên cung cấp tài liệu


Từ khóa cần tìm:

Hệ thống firewall trên linux kernel 2.4 & Netfilter Iptables

Thứ năm - 25/09/2008 00:50

Nâng cấp tưÌ€ kernel 2.2, kernel 2.4 đưa ra rất nhiêÌ€u tính năng mới giúp Linux hoaÌ£t đôÌ£ng tin câÌ£y hơn vaÌ€ hỗ trơÌ£ cho nhiêÌ€u thiết biÌ£. MôÌ£t trong những tính năng mới của nó đó laÌ€ hỗ trơÌ£ Netfilter Iptables ngay trong kernel, giúp thao tác trên packet hiêÌ£u quả hơn so với các đaÌ€n anh trước đó như Ipfwadm trong kernel 2.0 vaÌ€ Ipchains trong kernel 2.2, tuy vẫn hỗ trơÌ£ cho các bôÌ£ lêÌ£nh cũ. Thiết lâÌ£p firewall theo kiểu loÌ£c packet (packet filtering “ loÌ£c gói thông tin) với Ipfwadm hoăÌ£c Ipchains có nhiêÌ€u haÌ£n chế: thiếu các tích hơÌ£p câÌ€n thiết để mở rôÌ£ng tính năng, khi sử duÌ£ng loÌ£c packet cho các giao thức thông thươÌ€ng vaÌ€ chuyển đổi điÌ£a chỉ maÌ£ng (Network Address Translation - NAT) thiÌ€ thưÌ£c hiêÌ£n hoaÌ€n toaÌ€n tách biêÌ£t maÌ€ không có đươÌ£c tính kết hơÌ£p. Netfilter vaÌ€ Iptables trên kernel 2.4 giải quyết tốt các haÌ£n chế trên, uyển chuyển hơn vaÌ€ có thêm nhiêÌ€u tính năng khác maÌ€ Ipfwadm vaÌ€ Ipchains không có.

Nguyên Tắc LaÌ€m ViêÌ£c Của Netfilter VaÌ€ Iptables
Netfilter laÌ€ thaÌ€nh phâÌ€n cơ bản API (Application Program Interface) cho phép giao diêÌ£n ở các lớp trên như Iptables có thể duÌ€ng nó để thao tác trên các maÌ£ng gói. HiêÌ£n nay Netfilter đưa ra bốn module cho các lớp trên sử duÌ£ng đó laÌ€ Ipfwadm+ipchains, Iptables, Connection tracking vaÌ€ Nat. Trong Iptables điÌ£nh nghĩa sẵn các bảng sau:
1. Filter: DuÌ€ng để thao tác trên các packet
2. Nat: Sử duÌ£ng để thưÌ£c hiêÌ£n NAT, ví duÌ£ như duÌ€ng để che các điÌ£a chỉ xuất phát tưÌ€ trong maÌ£ng LAN khi chúng đi ra ngoaÌ€i internet maÌ€ ngaÌ€y nay hâÌ€u hết các maÌ£ng đêÌ€u sử duÌ£ng.
3. Mangle: ThươÌ€ng duÌ€ng để đánh dấu các packet duÌ€ng cho những muÌ£c đích như QoS hoăÌ£c chuyển hướng packet.

Stateless Packet Filtering
DaÌ£ng bôÌ£ loÌ£c không biết đươÌ£c quan hêÌ£ của những packet vaÌ€o với packet đi trước nó hoăÌ£c đi sau nó, goÌ£i laÌ€ cơ chế loÌ£c không phân biêÌ£t đươÌ£c traÌ£ng thái của các packet hoăÌ£c nôm na laÌ€ loÌ£c thuÌ£ đôÌ£ng (stateless packet filtering), trong kernel 2.0 hoăÌ£c 2.2 thiÌ€ Ipfwadm hoăÌ£c Ipchains chỉ thưÌ£c hiêÌ£n đươÌ£c đến mức đôÌ£ naÌ€y. Với các firewall không phân biêÌ£t đươÌ£c quan hêÌ£ của các packet với nhau, chúng ta goÌ£i laÌ€ firewall chăÌ£n thuÌ£ đôÌ£ng (stateless firewalling). LoaÌ£i firewall naÌ€y khó có thể bảo vêÌ£ đươÌ£c maÌ£ng bên trong trước các kiểu tấn công phá hoaÌ£i như DoS, SYN flooding, SYN cookie, ping of death, packet fragmentation... hay các hacker chỉ câÌ€n duÌ€ng công cuÌ£ doÌ€ maÌ£ng như nmap chẳng haÌ£n laÌ€ có thể biết đươÌ£c các traÌ£ng thái của các hosts năÌ€m sau firewall. ĐiêÌ€u naÌ€y không xảy ra với firewall tích cưÌ£c (stateful firewall).

Stateful Packet Filtering
Với moÌ£i packet đi vaÌ€o maÌ€ bôÌ£ loÌ£c có thể biết đươÌ£c quan hêÌ£ của chúng như thế naÌ€o đối với packet đi trước hoăÌ£c đi sau nó, ví duÌ£ như các traÌ£ng thái bắt tay ba lâÌ€n trước khi thưÌ£c hiêÌ£n môÌ£t kết nối trong giao thức TCP/IP (SYN, SYN/ACK, ACK), goÌ£i laÌ€ firewall có thể phân biêÌ£t đươÌ£c traÌ£ng thái của các packet hay nôm na laÌ€ firewall tích cưÌ£c (stateful firewalling). Với loaÌ£i firewall naÌ€y, chúng ta có thể xây dưÌ£ng các quy tắc loÌ£c để có thể ngăn chăÌ£n đươÌ£c ngay cả các kiểu tấn công phá hoaÌ£i như SYN flooding hay Xmas tree... Hơn thế nữa Iptables coÌ€n hỗ trơÌ£ khả năng giới haÌ£n tốc đôÌ£ kết nối đối với các kiểu kết nối khác nhau tưÌ€ bên ngoaÌ€i, cưÌ£c kyÌ€ hữu hiêÌ£u để ngăn chăÌ£n các kiểu tấn công tưÌ€ chối phuÌ£c vuÌ£ (DoS) maÌ€ hiêÌ£n nay vẫn laÌ€ mối đe doaÌ£ haÌ€ng đâÌ€u đối vói các website trên thế giới. MôÌ£t đăÌ£c điểm nổi bâÌ£t nữa của Iptables laÌ€ nó hỗ trơÌ£ chức năng doÌ€ tiÌ€m chuỗi tương ứng (string pattern matching), chức năng cho phép phát triển firewall lên môÌ£t mức cao hơn, có thể đưa ra quyết điÌ£nh loaÌ£i bỏ hay chấp nhâÌ£n packet dưÌ£a trên viêÌ£c giám sát nôÌ£i dung của nó. Chức năng naÌ€y có thể đươÌ£c xem như laÌ€ can thiêÌ£p đươÌ£c đến mức ứng duÌ£ng như HTTP, TELNET, FTP... măÌ£c duÌ€ thưÌ£c sưÌ£ Netfilter Iptables vẫn chỉ hoaÌ£t đôÌ£ng ở mức maÌ£ng (lớp 3 theo mô hiÌ€nh OSI 7 lớp).

ThưÌ£c HiêÌ£n
Chi tiết vêÌ€ mô tả các bảng vaÌ€ các tham số trong iptables các baÌ£n có thể tham khảo taÌ£i điÌ£a chỉ
http://www.unixcircle.com/iptables/i...-tutorial.html. Sau đây tôi sẽ triÌ€nh baÌ€y cách thưÌ£c hiêÌ£n cuÌ£ thể trên hêÌ£ điêÌ€u haÌ€nh RedHat Linux 7.1 để minh hoaÌ£.
RedHat 7.1 đươÌ£c đóng gói với kernel 2.4.2 vaÌ€ đã đươÌ£c biên diÌ£ch để hỗ trơÌ£ cho Netfilter vaÌ€ Iptables, tuy nhiên muốn sử duÌ£ng đâÌ€y đủ các tính năng của Iptables nói trên thiÌ€ câÌ€n phải nâng cấp Iptables lên phiên bản mới nhất 1.2.4 (
http://netfilter.samba.org/iptables-1.2.4.tar.bz2) vaÌ€ biên diÌ£ch laÌ£i nhân Linux với phiên bản 2.4.16 (http://www.kernel.org/pub/linux/kern...-2.4.16.tar.gz, hiêÌ£n đã có phiên bản 2.4.17).
Khi sử duÌ£ng Linux RedHat 7.1 laÌ€m chức năng firewall, chúng ta nên caÌ€i đăÌ£t chế đôÌ£ server với chế đôÌ£ văn bản vaÌ€ loaÌ£i bỏ tất cả các chức năng (daemon) không câÌ€n thiết như sendmail, ftpd, httpd, telnetd, sshd, lpd v.v... chỉ nên login ngay taÌ£i máy để thao tác. LoaÌ£i bỏ phiên bản cũ của iptables trên máy nếu nó đã đươÌ£c đưa vaÌ€o trong quá triÌ€nh caÌ€i đăÌ£t băÌ€ng lêÌ£nh rpm “e iptables.
Giải nén kernel 2.4.16 vaÌ€o thư muÌ£c /usr/src, chúng ta đươÌ£c source của kernel trong /usr/src/linux.
Ví dụ: tar zxvf linux-2.4.16.tar.gz
Giải nén iptables-1.2.4 vaÌ€o thư muÌ£c /usr/local/src chúng ta đươÌ£c /usr/local/src/iptables-1.2.4
Trong thư muÌ£c iptables-1.2.4, chúng ta thưÌ£c hiêÌ£n các bước sau để gắn các chức năng của iptables-1.2.4 vaÌ€o kernel.
make pending-patches KERNEL_DIR=/usr/src/linux
Sau khi gắn xong vaÌ€o kernel, chúng ta tiếp tuÌ£c thêm vaÌ€o những chức năng mới nhất vưÌ€a đươÌ£c phát triển để đưa vaÌ€o kernel, sử duÌ£ng lêÌ£nh sau:

make patch-o-matic KERNEL_DIR=/usr/src/linux

Khi thưÌ£c hiêÌ£n các lêÌ£nh để gắn vaÌ€o kernel như trên, chúng ta nên chú ý đến doÌ€ng traÌ£ng thái mô tả chức năng của gói thêm vaÌ€o, nếu haÌ€ng traÌ£ng thái chỉ ra laÌ€ gói naÌ€y tốt (working) hay ổn điÌ£nh (stable) hoăÌ£c đang chuẩn biÌ£ đưa vaÌ€o hoaÌ£t đôÌ£ng (experimental) thiÌ€ có thể đưa ngay vaÌ€o trong kernel, coÌ€n các traÌ£ng thái khác thiÌ€ xem như laÌ€ vẫn coÌ€n đang thử nghiêÌ£m, baÌ£n cũng có thể duÌ€ng những tính năng naÌ€y nếu thích.
Chú ý để có thể sử duÌ£ng đươÌ£c chức năng string pattern matching baÌ£n phải nhớ thêm vaÌ€o chức năng CONFIG_IP_NF_MATCH_STRING trong khi thưÌ£c hiêÌ£n patch-o-matic. Qua kiểm nghiêÌ£m nếu các gói trong patch-o-matic hoaÌ£t đôÌ£ng tốt thiÌ€ chúng sẽ đươÌ£c đưa thẳng vaÌ€o trong kernel ở các phiên bản kế tiếp.

Tiếp tuÌ£c tiến haÌ€nh biên diÌ£ch iptables, vẫn ở trong /usr/local/src/iptables-1.2.4

make KERNEL_DIR=/usr/src/linux

make install KERNEL_DIR=/usr/src/linux

Lúc naÌ€y iptables đã đươÌ£c caÌ€i đăÌ£t trong /usr/local/sbin vaÌ€ /usr/local/lib

Tiến haÌ€nh biên diÌ£ch kernel 2.4.16:

Sau khi các gói câÌ€n thiết của Netfilter đã đươÌ£c đưa vaÌ€o kernel xong, chúng ta bắt đâÌ€u biên diÌ£ch laÌ£i kernel vaÌ€ các module của nó.

Chuyển vaÌ€o thư muÌ£c /usr/src/linux vaÌ€ đánh lêÌ£nh: make menuconfig
Trên giao diêÌ£n cấu hiÌ€nh naÌ€y, để tối ưu kernel chúng ta chỉ nên đưa vaÌ€o những thiết biÌ£ naÌ€o câÌ€n thiết cho hêÌ£ điêÌ€u haÌ€nh vaÌ€ nên choÌ£n chức năng laÌ€m router. MuÌ£c đích chính của chúng ta laÌ€ sử duÌ£ng Netfilter/Iptables nên trong phâÌ€n Network Options -> Netfilter Configuration chúng ta nên choÌ£n tất cả các chức năng trong đó. Sau khi choÌ£n xong thoát ra khỏi menu vaÌ€ duÌ€ng các lêÌ£nh sau để biên diÌ£ch:

make dep; make clean; make bzImage; make modules; make modules_install

Quá triÌ€nh biên diÌ£ch nhanh hay châÌ£m tuyÌ€ thuôÌ£c vaÌ€o cấu hiÌ€nh máy, sau khi quá triÌ€nh biên diÌ£ch kết thúc baÌ£n câÌ€n phải laÌ€m thêm môÌ£t số thủ tuÌ£c sau đây để hêÌ£ điêÌ€u haÌ€nh có thể chaÌ£y đươÌ£c kernel mới vưÌ€a biên diÌ£ch

Chuyển tâÌ£p tin /usr/src/linux/arch/i386/boot/bzImage vaÌ€o thư muÌ£c /boot.

Ví dụ: mv /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage.fw

Chuyển tâÌ£p tin /usr/src/linux/System.map vaÌ€o thư muÌ£c /boot.

Ví dụ: mv /usr/src/linux/System.map /boot/System.map.fw

TaÌ£o liên kết mới : ln “fs /boot/System.map.fw /boot/System.map

Để đêÌ€ phoÌ€ng bất trắc đối với kernel mới, baÌ£n nên taÌ£o thêm cho quá triÌ€nh khởi đôÌ£ng máy môÌ£t menu để choÌ£n naÌ£p kernel băÌ€ng cách hiêÌ£u chỉnh tâÌ£p tin /etc/lilo.conf.

Ví dụ:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=30

message=/boot/message

linear

default=origin

image=/boot/vmlinuz-2.4.2-2

label=origin

read-only

root=/dev/hda8

image=/boot/bzImage.fw

label=firewall

read-only

root=/dev/hda8

Công viêÌ£c cuối cuÌ€ng laÌ€ nhớ đánh lêÌ£nh /sbin/lilo để naÌ£p laÌ£i cấu hiÌ€nh trong tâÌ£p tin /etc/lilo.conf vaÌ€ reboot laÌ£i máy.
Sau đây laÌ€ môÌ£t số ví duÌ£ minh hoÌ£a để thiết lâÌ£p môÌ£t firewall trên Linux

Giả sử local network laÌ€ 10.0.0.0/8 vaÌ€ firewall sử duÌ£ng hai card maÌ£ng, kết nối với internet băÌ€ng card maÌ£ng eth0 vaÌ€ với local network laÌ€ eth1.

Chống Syn Flooding:

iptables -A FORWARD -p tcp ”syn -m limit ”limit 1/s -j ACCEPT

Chống Scan Port:

iptables -A FORWARD -p tcp ”tcp-flags SYN,ACK,FIN,RST RST -m limit ”limit 1/s -j ACCEPT

Chống Ping of Death:

iptables -A FORWARD -p icmp ”icmp-type echo-request -m limit ”limit 1/s -j ACCEPT

Cho các packet đã thiết lâÌ£p kết nối tiếp tuÌ£c đi qua firewall:

iptables -A FORWARD -m state ”state ESTABLISHED,RELATED -j ACCEPT

Chống giả maÌ£o điÌ£a chỉ nôÌ£i bôÌ£ tưÌ€ bên ngoaÌ€i để xâm nhâÌ£p:

iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP

Chuyển đổi điÌ£a chỉ tưÌ€ trong maÌ£ng nôÌ£i bôÌ£ ra bên ngoaÌ€i (SNAT):

iptables -t nat -A POSTROUTING -o eth0 -j SNAT ”to 203.162.0.10

Chuyển đổi điÌ£a chỉ của web server tưÌ€ bên ngoaÌ€i vaÌ€o trong maÌ£ng nôÌ£i bôÌ£ (DNAT):

iptables -t nat -A PREROUTING -d 203.162.0.9 -p tcp ”dport 80 -j DNAT ”to 10.0.0.10

Thiết lâÌ£p Transparent proxy băÌ€ng cách chuyển hướng port 80 đến server squid proxy 10.0.0.9:

iptables -t nat -A PREROUTING -p tcp ”dport 80 -j DNAT ”to 10.0.0.9:3128

Chỉ cho máy tính trong maÌ£ng nôÌ£i bôÌ£ có điÌ£a chỉ card maÌ£ng 00:C7:8F:72:14 đi ra:

iptables -A FORWARD -m state ”state NEW -m mac ”mac-source 00:C7:8F:72:14 -j ACCEPT

ThưÌ£c hiêÌ£n chia tải trên cả hai hướng inbound vaÌ€ outbound: (load balancing):

iptables -t nat -A POSTROUTING -o eth0 -m nth ”counter 7 ”every 3 ”packet 0 -j SNAT ”to-source 10.0.0.5

iptables -t nat -A POSTROUTING -o eth0 -m nth ”counter 7 ”every 3 ”packet 1 -j SNAT ”to-source 10.0.0.6

iptables -t nat -A POSTROUTING -o eth0 -m nth ”counter 7 ”every 3 ”packet 2 -j SNAT ”to-source 10.0.0.7

Chức năng ưu tiên thông lươÌ£ng đối với truy câÌ£p web:

iptables -A PREROUTING -t mangle -p tcp ”sport 80 -j TOS ”set-tos Maximize-Throughput

Ngăn chăÌ£n sâu Nimda hay CodeRed (mức ứng duÌ£ng):

iptables -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 ”string c+dir

iptables -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 ”string cmd.exe

iptables -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 ”string default.ida

Đến đây chúng ta đã hoaÌ€n thaÌ€nh viêÌ£c xây dưÌ£ng môÌ£t hêÌ£ thống firewall maÌ£nh mẽ có thể đương đâÌ€u đươÌ£c với bất kyÌ€ loaÌ£i tấn công naÌ€o vaÌ€ laÌ€ môÌ£t lá chắn tin câÌ£y cho hêÌ£ thống maÌ£ng. BaÌ£n cũng có thể kết hơÌ£p thêm chức năng cửa ngõ maÌ£ng ảo (VPN gateway) cho firewall băÌ€ng gói freeswan có thể download taÌ£i
www.freeswan.org.

Tác giả bài viết: Quang Tùng - GiangVien.Net

Nguồn tin: Senior Network Engineer Arrive Technologies Vietnam

Tổng số điểm của bài viết là: 0 trong 0 đánh giá
Click để đánh giá bài viết
Comment addGửi bình luận của bạn
Mã chống spamThay mới

Những tin mới hơn

Những tin cũ hơn

 
(Chú ý: Website đang trong giai đoạn hoạt động thử nghiệm, đang định xin giấy phép MXH của Bộ TT & TT)
Lên đầu trang
Array
(
    [type] => 8192
    [message] => preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
    [file] => /home/pwhqfmvb/GiangVien/includes/countries.php
    [line] => 435
)