Dự án chung cư quận hoàng mai, chung cư tam trinh nổi bật.

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


Trang web GiangVien.Net cung cấp các tài liệu cho sinh viên
Đếm Web miễn phí
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