LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6615|回复: 6

RHEL4 U4 安装 netfilter patch

[复制链接]
发表于 2007-6-27 21:24:00 | 显示全部楼层 |阅读模式
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文件。

  1. # rpm -ivh ./kernel-2.6.9-42.EL.src.rpm
  2. # cd /usr/src/redhat/SPECS/ # rpmbuild --target i686 -bp kernel-2.6.spec
  3. # sed -i 's#-prep#-42.EL#' /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile
  4. # ln -s /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src/
复制代码


2. 解开iptables src 并且让其打上RedHat的补丁

  1. # rpm -ivh iptables-1.2.11-3.1.RHEL4.src.rpm
  2. # cd /usr/src/redhat/SPECS/
  3. # rpmbuild -bp iptables.spec
  4. # ln -s /usr/src/redhat/BUILD/iptables-1.2.11 /usr/src/
复制代码


3.解开 Netfilter tar 并且选择相应选项

  1. #tar -jxvf patch-o-matic-ng-20040621.tar.bz2 -C /usr/src
复制代码


三. 设置环境变量,打Netfilter 内核补丁
1. 设置Netfilter补丁程序需要的环境变量

  1. #export KERNEL_DIR=/usr/src/linux-2.6.9
  2. #export IPTABLES_DIR=/usr/src/iptables-1.2.11
复制代码


2. 选择补丁打入

  1. # cd /usr/src/patch-o-matic-ng-20040621
  2. # ./runme random (随机丢包 , 2.6 kernel 无法使用)
  3. # ./runme comment (备注匹配)
  4. # ./runme string (字符串匹配,可以用做内容过滤,2.6.9 kernel 无法使用)
  5. # ./runme iprang (ip范围匹配)
  6. # ./runme time (时间匹配)
  7. # ./runme connlimit (同时连接个数匹配,这个模块在rhel4u4中编译出错)
  8. # ./runme nth (第n个包匹配)
  9. # ./runme quota (配额匹配)
复制代码


四.编译kernel和iptables
1. 编译kernel中的ipv4的模块

  1. # cd /usr/src/linux-2.6.9
  2. # make menuconfig ( 选择相应的项)
  3. # make modules SUBDIRS=net/ipv4/netfilter
  4. # \cp -f /usr/src/linux-2.6.9/net/ipv4/netfilter/*.ko /lib/modules/2.6.9-42.EL/kernel/net/ipv4/netfilter/
  5. #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 中的条件判断语句就可以了。

  1.   
  2. /*
  3. #if !defined (__KERNEL__) && !defined(__KERNGLUE__)
  4. #error including kernel header in userspace; use the glibc headers instead!
  5. #endif
  6. */
复制代码


  1. # export KERNEL_DIR=/usr/src/linux-2.6.9
  2. # export IPTABLES_DIR=/usr/src/iptables-1.2.11
  3. # cd $ IPTABLES_DIR
  4. # make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
复制代码



五.安装完成,测试及应用
1.内容过滤

  1. # iptables -I FORWARD -d 192.168.0.0/24 -m string --string "微软" -j DROP
  2. # iptables -I FORWARD -s 192.168.0.0/24 -m string --string "Sex" -j DROP
  3. # iptables -I FORWARD -p tcp --sport 80 -m string --string "QQ" -j DROP
复制代码

2.备注应用

  1. # iptables -I FORWARD -s 192.168.0.10 -p tcp --dport 80 -j DROP -m comment --comment "the bad boy"
  2. # iptables -I FORWARD -s 192.168.0.1 -m string --string "qq.com" -j DROP -m comment --comment "foo denny go to qq.com"
  3. [code]
  4. 3.并发连接应用
  5. 模块 connlimit 作用:连接限制
  6. --connlimit-above n 限制为多少个
  7. --connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.
  8. 这个主要可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数...比较实用
  9. 例如:只允许每个ip同时8个80端口转发,超过的丢弃:
  10. [code]
  11. # iptables -I FORWARD -p tcp  --dport 80 -m connlimit --connlimit-above 5 -j DROP
复制代码

例如:为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃.

  1. # iptables -A INPUT -s 0.0.0.0/0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
  2. # iptables -A INPUT -s 0.0.0.0/0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
复制代码

4.ip范围应用

  1. # iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.20 -j ACCEPT
复制代码

5.每隔N个匹配

  1. # iptables -A INPUT -p icmp -m nth --every 10 -j  ACCEPT
  2. [code]
  3. 6.封杀BT类P2P软件
  4. [code]
  5. # iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
  6. # iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
  7. # iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
复制代码

7.配额匹配

  1. # iptables -A FORWARD -s 192.168.0.1 -p tcp --dport 80 -m quota --quota 500000000 -j ACCEPT
  2. # iptalbes -A FORWARD -s 192.168.0.1 -p tcp --dport 80 -j REJECT
复制代码
发表于 2007-7-3 13:42:51 | 显示全部楼层
很不错的资料。 顶顶。
回复 支持 反对

使用道具 举报

发表于 2008-4-1 13:22:15 | 显示全部楼层
很好很有帮助!正是我需要的!
回复 支持 反对

使用道具 举报

发表于 2008-4-7 11:28:01 | 显示全部楼层
问一下:
# \cp -f /usr/src/linux-2.6.9/net/ipv4/netfilter/*.ko /lib/modules/2.6.9-42.EL/kernel
cp前“\”是什么意思?
我按步骤作到此处时,发现/usr/src/linux-2.6.9/net/ipv4/netfilter/  没有.ko 的文件,只有. o的文件啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-7 15:22:12 | 显示全部楼层
Post by lxc2002;1835724
问一下:
# \cp -f /usr/src/linux-2.6.9/net/ipv4/netfilter/*.ko /lib/modules/2.6.9-42.EL/kernel
cp前“\”是什么意思?
我按步骤作到此处时,发现/usr/src/linux-2.6.9/net/ipv4/netfilter/  没有.ko 的文件,只有. o的文件啊?


cp 可能是alias 出来的,会有提示是否覆盖或其它的提示,我不喜欢这种与个人习惯有关的问题,所有用\忽略了cp 的alias !

如果你编译后没有.ko ,只能说明你编译出错了!
回复 支持 反对

使用道具 举报

发表于 2008-8-6 15:59:22 | 显示全部楼层

这不矛盾嘛!

明明说sting匹配在2.6.9中不可用,怎么你后面的例子又有了?
是你自己的经验,还是摘自其它国外网站?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-6 21:10:48 | 显示全部楼层
Post by ThuChilde;1883215
明明说sting匹配在2.6.9中不可用,怎么你后面的例子又有了?
是你自己的经验,还是摘自其它国外网站?


前面的说明是为了某些SB在加载模块的时候碰巧加上了,却在make menuconfig的时候找不到相应项的时候叽叽歪歪。
后面写出例子是给某些SB认为自己编译成功了测试着玩的!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表