Build từ source kernel CentOS 5.2 và iptables để sử dụng những tính năng của iptables Netfilter/ipbtales là software NAT/firewall được cài đặt sẵn và phổ biến trên các hệ thống Linux. Cent0S là một distro Linux được viết ra dựa trên Redhat chủ yếu dành cho máy chủ, mặc định distro này không được xây dựng kèm theo module connlimit vốn rất cần thiết cho các quản trị viên dùng để cản lọc các gói tin không hợp lệ, nhất là trong trường hợp bị tấn công từ chối dịch vụ. Bài viết này đưa ra cách tích hợp module này vào CentOS bằng cách build từ source của Kernel và Netfilter/iptables. Để hiểu được kiến thức đưa ra trong bài này, bạn cần có thời gian tìm hiểu và nắm rõ được phần nào cơ bản về biên dịch kernel, cài đặt các phần mềm từ mã nguồn, cũng như môi trường cần thiết để một user bình thường có thể "build" một phần mềm từ mã nguồn có sẵn, hệ thống file, các câu lệnh nâng cao Chúng ta không đi sâu vào khái niệm Netfilter/iptables là gì? Động cơ dẫn đến bài viết là trong một trường hợp nào đó cần tới những modules không được tích hợp sẵn vào nhân hệ điều hành CentOS mà bạn đang sử dụng, bạn tìm cách để tích hợp những modules đó vào, một cách nhanh nhất có thể, mà không làm hư tổn, hoặc gây ra lỗi trầm trọng đối với hệ thống đang hoạt động ổn định. 1.Phần đầu tiên: kiểm tra và tạo môi trường "build" cho user: Để thực hiện được bài viết này, hệ thống của bạn phải được cài đặt sẵn gói rpm-build, Để kiểm tra xem rpm-build đã được cài đặt chưa bạn dùng câu lệnh sau: Nếu kết quả là: [whatvn@localhost ~]$ rpm -q rpm-build rpm-build-4.4.2.3-2.fc9.i386 thì hệ thống đã cài sẵn rpm-build, ta tiếp tục bước tiếp theo còn nếu kết quả như bên dưới: [whatvn@localhost ~]$ rpm -q rpm-buid package rpm-buid is not installed thì bạn cài đặt rpm-build bằng cách: [whatvn@localhost ~]$ sudo yum install rpm-build Vì môi trường cũng như target của các bản cài đặt ta đều chỉ định ở Home directory của user, nên để dễ dàng, bạn nên đứng ở thư mục ~ của user, làm tất cả các tác vụ về sau. Ta download các gói cần thiết về (cần chú ý bài viết này đang đề cập đến centOS 5.2, nếu bạn sử dụng các phiên bản centOS cũ hơn thì không download các packet dưới đây) Kernel Source [whatvn@localhost ~]$ wget http://mirror.centos.org/centos/5/os/SRPMS/kernel-2.6.18-92.el5.src.rpm iptables source [whatvn@localhost ~]$ wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.0.tar.bz2 patch-o-matic-ng [whatvn@localhost ~]$ wget http://ftp.netfilter.org/pub/patch-o-matic- ng/snapshot/patch-o-matic-ng-20081130.tar.bz2 Tạo môi trường "buid" cho user: [whatvn@localhost ~]$ mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} Lệnh trên thực hiện tạo thư mục rpmbuild trong thư mục home của user, và các thư mục con tương ứng BUILD,RPMS,SOURCES,SPECS,SRPMS. [whatvn@localhost ~]$ echo '%_topdir %(echo $HOME)/rpmbuild'> .rpmmacros Lệnh thực hiện tạo ra script .rpmmacros với nội dung như trong cặp dấu ngoặc đơn ' ', bạn chú ý là dùng dấu ngoặc đơn, không phải ngoặc kép. Một vài hươngs dẫn dùng câu lệnh với dấu ngoặc " ", sẽ báo lỗi tương tự: [whatvn@localhost ~]$ echo “%_topdir %(echo $HOME)/rpmbuild” bash: syntax error near unexpected token `(' 2. Thực hiện: Cài đặt kernel source: [whatvn@localhost ~]$ rpm -i kernel-2.6.18-92.el5.src.rpm Sau đó: [whatvn@localhost ~]$ rpmbuild -bp target=`uname -m` kernel-2.6.spec Bước này nếu hệ thống báo lỗi thiếu gói unifdef thì cài đặt bằng yum [whatvn@localhost ~]$ yum install unifdef rồi chạy lại lệnh phía trên Qúa trình cài đặt có thể hơi lâu một chút, sau khi hoàn tất trở về thư mục Home và giải nén source iptables và gói patch-o-matic-ng đã down về trước đó. [whatvn@localhost ~]$ tar xvjf iptables-1.4.0.tar.bz2 [whatvn@localhost ~]$ tar xvfj patch-o-matic-ng-20081130.tar.bz2 Chuyển vào thư mục patch-o-matic-ng-20081130 vừa giải nén [whatvn@localhost ~]$ cd patch-o-matic-ng-20081130 chạy lệnh sau [whatvn@localhost ~/patch-o-matic-ng-20081130]$ ./runme download Chú ý sau runme là 2 dấu gạch giữa, không phải 1 gạch ngang, lệnh trên sẽ tìm kiếm và download những modules cần thiết về, trong quá trình chạy hệ thống sẽ hỏi bạn kernel source dir và iptables source dir. Kernel source dir là thư mục ~/rpmbuild/BUILD/kernel-2.6.18 (chú ý thay ~ là tên home của bạn, ví dụ của tôi là whatvn). iptables source dir là thư mục iptables mà bạn vừa giải nén. Chạy tiếp: [whatvn@localhost ~/patch-o-matic-ng-20081130]$ ./runme connlimit Trong bài viết này tôi sử ví dụ module connlimit, nếu các bạn muốn thêm module nào thì có thể tự thêm vào ở lệnh trên. Lệnh này cũng hỏi kernel source dir và iptables source dir, ban copy và dán vào như trên kia là được. Chuyển đến thư mục ~/rpmbuild/BUILD/kernel-2.6.18 và chạy lần lượt các lệnh bên dưới: [whatvn@localhost ~/rpmbuild/BUILD/kernel-2.6.18]$ make oldconfig [whatvn@localhost ~/rpmbuild/BUILD/kernel-2.6.18]$ make prepare [whatvn@localhost ~/rpmbuild/BUILD/kernel-2.6.18]$ make modules_prepare Lệnh đầu tiên biên dịch kernel mới (không cài đặt) với cấu hình hiện tại của kernel hệ thống. Lệnh thứ 2 tạo ra các file cần thiết để biên dịch các module với cấu hình trên Lệnh thứ 3 xây dựng các modules tương ứng. Tiếp tục vào chuyển directory: [whatvn@localhost ~/rpmbuild/BUILD/kernel-2.6.18]$ cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/net/ipv4/netfilter Chạy lệnh [whatvn@localhost ~/rpmbuild/BUILD/kernel-2.6.18/linux- 2.6.18.x86_64/net/ipv4/netfilter]$ make -C ~/rpmbuild/BUILD/kernel- 2.6.18/linux-2.6.18.x86_64 M=$PWD modules Chép modulle mới xây dựng vào thư mục updates của kernel hiện tại và active để sử dụng [whatvn@localhost ~/rpmbuild/BUILD/kernel-2.6.18/linux- 2.6.18.x86_64/net/ipv4/netfilter]$ cp ipt_connlimit.ko /lib/modules/2.6.18- 92.el5/updates $ depmod 2.6.18-92.el5 $ modprobe ipt_connlimit 3. Thử nghiệm: copy và chạy lệnh này trên console, nếu không báo lỗi thì bạn đã thành công iptables -A INPUT -p tcp -d $IP dport 80 -m state state ESTABLISHED -m connlimit connlimit-above 4 -j DROP $IP là ip của bạn Vài điểm lưu ý: kernel của bạn hoàn toàn có thể khác của tôi, bạn dùng uname -a để xem kernel hiện tại của mình là gì. . Build từ source kernel CentOS 5. 2 và iptables để sử dụng những tính năng của iptables Netfilter/ipbtales là software NAT/firewall được cài đặt sẵn và phổ biến trên các. updates của kernel hiện tại và active để sử dụng [whatvn@localhost ~/rpmbuild /BUILD/ kernel- 2. 6.18/linux- 2. 6.18.x86_64/net/ipv4/netfilter]$ cp ipt_connlimit.ko /lib/modules /2. 6.18- 92. el5/updates. và iptables source dir, ban copy và dán vào như trên kia là được. Chuyển đến thư mục ~/rpmbuild /BUILD/ kernel- 2. 6.18 và chạy lần lượt các lệnh bên dưới: [whatvn@localhost ~/rpmbuild /BUILD/ kernel- 2. 6.18]$