|
RHEL4 U4 安装 netfilter patch
因为需要额外的Netfilter模块,又想使用RedHat的kernel, 我们选择适用RedHat的kernel和iptables的src.rpm来作为基础打Netfilter的补丁。
一. 下载相应的src.rpm和tar.gz 包
1. 从ftp.redhat.com下载 kernel-2.6.9-42.EL.src.rpm和iptables-1.2.11-3.1.RHEL4.src.rpm
2. 从ftp.netfilter.org 下载 patch-o-matic-ng-20040621.tar.bz2
二. 解包并创建需要的环境
1. 解开kernel src 并且让其打上RedHat的补丁,不要忘记cp /boot下相应的config文件。
- # rpm -ivh ./kernel-2.6.9-42.EL.src.rpm
- # cd /usr/src/redhat/SPECS/ # rpmbuild --target i686 -bp kernel-2.6.spec
- # sed -i 's#-prep#-42.EL#' /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile
- # ln -s /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src/
复制代码
2. 解开iptables src 并且让其打上RedHat的补丁
- # rpm -ivh iptables-1.2.11-3.1.RHEL4.src.rpm
- # cd /usr/src/redhat/SPECS/
- # rpmbuild -bp iptables.spec
- # ln -s /usr/src/redhat/BUILD/iptables-1.2.11 /usr/src/
复制代码
3.解开 Netfilter tar 并且选择相应选项
- #tar -jxvf patch-o-matic-ng-20040621.tar.bz2 -C /usr/src
复制代码
三. 设置环境变量,打Netfilter 内核补丁
1. 设置Netfilter补丁程序需要的环境变量
- #export KERNEL_DIR=/usr/src/linux-2.6.9
- #export IPTABLES_DIR=/usr/src/iptables-1.2.11
复制代码
2. 选择补丁打入
- # cd /usr/src/patch-o-matic-ng-20040621
- # ./runme random (随机丢包 , 2.6 kernel 无法使用)
- # ./runme comment (备注匹配)
- # ./runme string (字符串匹配,可以用做内容过滤,2.6.9 kernel 无法使用)
- # ./runme iprang (ip范围匹配)
- # ./runme time (时间匹配)
- # ./runme connlimit (同时连接个数匹配,这个模块在rhel4u4中编译出错)
- # ./runme nth (第n个包匹配)
- # ./runme quota (配额匹配)
复制代码
四.编译kernel和iptables
1. 编译kernel中的ipv4的模块
- # cd /usr/src/linux-2.6.9
- # make menuconfig ( 选择相应的项)
- # make modules SUBDIRS=net/ipv4/netfilter
- # \cp -f /usr/src/linux-2.6.9/net/ipv4/netfilter/*.ko /lib/modules/2.6.9-42.EL/kernel/net/ipv4/netfilter/
- #depmod -a
复制代码
2.编译iptalbes
因为RedHat对kernel做了一些修改,所以如果你直接编译iptables会报如下错误
“/usr/src/linux-2.6.9/include/linux/config.h:6:2: #error including kernel header in userspace; use the glibc headers instead!”
我们只要注释/usr/src/linux-2.6.9/include/linux/config.h 中的条件判断语句就可以了。
-
- /*
- #if !defined (__KERNEL__) && !defined(__KERNGLUE__)
- #error including kernel header in userspace; use the glibc headers instead!
- #endif
- */
复制代码
- # export KERNEL_DIR=/usr/src/linux-2.6.9
- # export IPTABLES_DIR=/usr/src/iptables-1.2.11
- # cd $ IPTABLES_DIR
- # make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
复制代码
五.安装完成,测试及应用
1.内容过滤
- # iptables -I FORWARD -d 192.168.0.0/24 -m string --string "微软" -j DROP
- # iptables -I FORWARD -s 192.168.0.0/24 -m string --string "Sex" -j DROP
- # iptables -I FORWARD -p tcp --sport 80 -m string --string "QQ" -j DROP
复制代码
2.备注应用
- # iptables -I FORWARD -s 192.168.0.10 -p tcp --dport 80 -j DROP -m comment --comment "the bad boy"
- # iptables -I FORWARD -s 192.168.0.1 -m string --string "qq.com" -j DROP -m comment --comment "foo denny go to qq.com"
- [code]
- 3.并发连接应用
- 模块 connlimit 作用:连接限制
- --connlimit-above n 限制为多少个
- --connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.
- 这个主要可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数...比较实用
- 例如:只允许每个ip同时8个80端口转发,超过的丢弃:
- [code]
- # iptables -I FORWARD -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP
复制代码
例如:为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃.
- # iptables -A INPUT -s 0.0.0.0/0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
- # iptables -A INPUT -s 0.0.0.0/0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
复制代码
4.ip范围应用
- # iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.20 -j ACCEPT
复制代码
5.每隔N个匹配
- # iptables -A INPUT -p icmp -m nth --every 10 -j ACCEPT
- [code]
- 6.封杀BT类P2P软件
- [code]
- # iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
- # iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
- # iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
复制代码
7.配额匹配
- # iptables -A FORWARD -s 192.168.0.1 -p tcp --dport 80 -m quota --quota 500000000 -j ACCEPT
- # iptalbes -A FORWARD -s 192.168.0.1 -p tcp --dport 80 -j REJECT
复制代码 |
|