Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2783249
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: LINUX

2007-06-17 19:53:41

 

2.6内核不编译内核为IPTABLES添加模块



1、系统安装CentOS4.4   Linux 2.6.9-42.EL默认内核
安装时选包:vi编辑器 DHCP DNS 开发工具(里面的图形支持库就不要选啦,其他三项都选,以免以后安装软件缺东少西的) 防火墙选择不安装。关闭SELINUX 配好网卡IP 开始安装系统

系统装完用root登陆(我习惯用ROOT,你只要记得改文件前先cp个备份就好啦 使ROOT要逼自己养成这个习惯。否则劝你还是不要总用root登陆主机啦)
删掉没用的sendmail 等RPM包
# rpm -qa | grep sendmail
# service sendmail stop
# rpm -e --nodeps sendmail
# rpm -qa | grep kernel
把 kernel-smp*.rpm 和 kernel-smp-devel*.rpm 这两个包卸掉
# rpm -e --nodeps kernel-smp
# rpm -e --nodeps kernel-smp-devel
查看grub.conf 启动项就变成一项啦 否则系统默认启动项是SMP多处理器的,我的机器只有一个CPU,所以就卸掉啦。
# cat /boot/grub.conf
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS-4 i386-up (2.6.9-42.EL)
                root (hd0,0)
                kernel /vmlinuz-2.6.9-42.EL ro root=LABEL=/ rhgb quiet
                initrd /initrd-2.6.9-42.EL.img
修改SSH远程启用root登陆
# vi /etc/ssh/sshd_config
#PermitRootLogin yes        找到这句把前面的#注释去掉 保存退出
重新启动系统 使上面的更改都全部生效 主要是使 uname –r 结果以CPU个数匹配 其他修改其实可以重新启动服务就可以完成的 service XXX restart
注意:因为iptables我们以后要配的 所以安装的时候选择不启用,也就是说你现在的机器INPUT、OUTPUT都是ACCEPT 如果你不是选择防火墙使你SSH连接不上,可以停掉,反正我们等下升级完它后还是会自己写脚本的 否则就没升级它的必要啦
关闭防火墙的命令: # service iptables stop
OK 以上步骤都是在主机上做的,以后的我们就到终端SSH上去啦。
做完上面的事你就可以离开阴森的机房啦,去本本上SSH登陆配置
远程用SSH登陆到这台主机
修改字符集
locale 查看一下当前字符集
默认字符集是LANG="zh_CN.UTF-8"
因为我选的中文安装,因为我是用Xshell这个SSH工具登陆的( 其他登陆器我没用过不清楚,其实你也可以调整登陆器的字符集显示用UTF-8也可以显示中文,但当你vi一个文件时你就发现有多痛苦啦,行对不齐等等问题满多的)
在某一目录使用 cd lskdj 就是一个不存在的目录 就看到乱码啦
解决方法:
# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bak
修改前做好备份
# vi /etc/sysconfig/i18n
        将此文件里的默认内容全部删除 然后加入下面这几行
                LANG="zh_CN.GB18030"
                        LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
                        SUPPORTED="zh_CN.GB18030:zh_CN:zh"
                        SYSFONT="lat0-sun16"
                        SYSFONTACM="8859-15"
        保存退出
然后重新用SSH登陆 再用locale 命令查看一下 cd lskdj 测试一下能否看到中文

OK 罗嗦到此为止。开工

TFTP上传所需软件包到 /usr/src/ 目录下
ipp2p-0.8.2.tar.gz
patch-o-matic-ng-20060509
iptables-1.3.5.tar.bz2
l7-protocols-2006-10-18.tar.gz
kernel-2.6.9-42.EL.src.rpm
netfilter-layer7-v2.6.tar.gz
这里说一下 因为ipp2p0.8.2不支持iptabls1.3.6 所以选用1.3.5
patch-o-matic-ng-20060509 这个补丁包里面的模块是我自己选的
在 patchlets/ 目录下 把自己需要的模块留下 其他删除既可
这个配置文件要保留patchlets/config
另外需要注意一点20060509这个包里的 time模块在2.6下编译时是出错的,但在2.4内核上编译就没问题,你可以用20050801 这个包内的time模块来安装或者你就直接用这个补丁包来安装也一样,只要你找到自己用的模块将模块放在patchlets/ 里即可
L7的就没什么说的啦 都是最新的
kernel-2.6.9-42.EL.src.rpm 这个内核源码包你可以去网上下或在光盘里找

解开所有压缩包
# tar zxvf ipp2p-0.8.2.tar.gz
# tar zxvf l7-protocols-2006-10-18.tar.gz
# tar zxvf netfilter-layer7-v2.6.tar.gz
# tar xvjf iptables-1.3.5.tar.bz2
修正rpm包安装key警告问题
# rpm --import /usr/share/doc/centos-release-4/RPM-GPG-KEY*
建立内核源码包安装所需用户
# useradd  buildsvn
安装源码包 考一份内核到 /usr/src/linux-2.6.9做编译使用,如果编译失败 可以删除后再考新的 所以不建议做软连接操作
# rpm -ivh kernel-2.6.9-42.EL.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=i686 kernel-2.6.spec
# cp -a /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src
修改拷贝的内核与当前系统内核版本一致(很重要,否则编译出来的模块不能被当前内核使用)
# cd /usrs/src/linux-2.6.9
# vi Makefile
修改 EXTRAVERSION = -prep
该成EXTRAVERSION = -42.EL
保持跟uname -r 的版本一致 检测一下
# uname -r
2.6.9-42.EL
# head -n4 Makefile
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 9
EXTRAVERSION = -42.EL


# make mrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
# make menuconfig
直接保存退出,生成 .config 文件。

为内核打补丁并添加模块
# cd  /usr/src/patch-o-matic-ng-20060509
设置内核和iptables的环境变量
# export KERNEL_DIR=/usr/src/linux-2.6.9
# export IPTABLES_DIR=/usr/src/iptables-1.3.5
添加模块

# ./runme time
# ./runme ipp2p
# ./runme iprange(已经自带)
其实你若明确了 patchlets/ 下的模块后
可以用 ./runme xxxx 随意字符 然后它会自动到patchlets/ 下检测每一个模块提示你

添加Layer-7模块
# cd /usr/src/linux-2.6.9
# patch -p1 < /usr/src/netfilter-layer7-v2.6/for_older_kernels/kernel-2.6.9-2.6.10-layer7-1.2.patch
# cd /usr/src/iptables-1.3.5
# patch -p1 < /usr/src/netfilter-layer7-v2.6/iptables-layer7-2.6.patch
# chmod +x extensions/.layer7-test
l7-filter模块加入完成



为内核选择新添加的模块
# cd /usr/src/linux-2.6.9
# make menuconfig
路径:Device Drivers  --->
             Networking support  --->
                  Networking options  --->
                     Network packet filtering (replaces ipchains)  --->
                        IP: Netfilter Configuration  --->
新加入的模块都在这里 选中新加入的模块
   Layer 7 match support (EXPERIMENTAL)
[ ]     Layer 7 debugging output (NEW)    (这个debug 就不要选啦)                          
(2048)  Buffer size for application layer data (NEW)
保存退出

编译netfilter模块
 # cd /usr/src/linux-2.6.9
 # make modules_prepare
  # make M=net/ipv4/netfilter
编译完成netfilter模块后拷贝编译完成的模块到当前系统netfilter中(注CentOS所有版的cp –f 这个选项都失效 手动Y回车吧 汗~)
# cp -f /usr/src/linux-2.6.9/net/ipv4/netfilter/*.ko /lib/modules/2.6.9-42.EL/kernel/net/ipv4/netfilter/
# chmod +x /lib/modules/2.6.9-42.EL/kernel/net/ipv4/netfilter/*.ko
# depmod -a
安装l7协议
# cd /usr/src/l7-protocols-2006-10-18
# make install
安装新的 iptables
(这个注释不明白是什么意思)
# vi /usr/src/linux-2.6.9/include/linux/config.h
用 // 把下面的中间三行注释掉

#include
//#if !defined (__KERNEL__) && !defined(__KERNGLUE__)
//#error including kernel header in userspace; use the glibc headers instead!
//#endif
#endif
保存退出

# cd /usr/src/iptables-1.3.5
# export KERNEL_DIR=/usr/src/linux-2.6.9
# export IPTABLES_DIR=/usr/src/iptables-1.3.5
保证有这两个环境变量存在(前面我们已经做过,可用 echo $ KERNEL_DIR和echo $ IPTABLES_DIR 查看目录设置是否正确)然后安装
# make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
更新ipp2p模块,使他支持更多的协议
# cd /usr/src/ipp2p-0.8.2
# make
备份原模块 # cp /lib/iptables/libipt_ipp2p.so /
# cp /usr/src/ipp2p-0.8.2/libipt_ipp2p.so /lib/iptables

安装白金写的域名模块
[root@ES-vcmres patchlets]# cd domain-0.0.2/
[root@ES-vcmres domain-0.0.2]# ls
ChangeLog  ipt_domain.c  ipt_domain.o     libipt_domain.o   Makefile
INSTALL    ipt_domain.h  libipt_domain.c  libipt_domain.so  tags

[root@ES-vcmres domain-0.0.2]# make
make -C /lib/modules/2.6.9-42.EL/build SUBDIRS=/usr/src/patch-o-matic-ng-20060509/patchlets/domain-0.0.2 modules
make[1]: Entering directory `/usr/src/kernels/2.6.9-42.EL-i686'
  CC [M]  /usr/src/patch-o-matic-ng-20060509/patchlets/domain-0.0.2/ipt_domain.o
  Building modules, stage 2.
  MODPOST
  CC      /usr/src/patch-o-matic-ng-20060509/patchlets/domain-0.0.2/ipt_domain.mod.o
  LD [M]  /usr/src/patch-o-matic-ng-20060509/patchlets/domain-0.0.2/ipt_domain.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.9-42.EL-i686'


[root@ES-vcmres domain-0.0.2]# make install
cp -rf libipt_domain.so /lib/iptables/
cp -rf ipt_domain.ko /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
depmod -a

安装白金写的多IP模块
[root@ES-vcmres patchlets]# cd multiip/
[root@ES-vcmres multiip]# ls
INSTALL        ipt_multiip.h  libipt_multiip.c  libipt_multiip.so
ipt_multiip.c  ipt_multiip.o  libipt_multiip.o  Makefile

[root@ES-vcmres multiip]# make
make -C /lib/modules/2.6.9-42.EL/build SUBDIRS=/usr/src/patch-o-matic-ng-20060509/patchlets/multiip modules
make[1]: Entering directory `/usr/src/kernels/2.6.9-42.EL-i686'
  CC [M]  /usr/src/patch-o-matic-ng-20060509/patchlets/multiip/ipt_multiip.o
  Building modules, stage 2.
  MODPOST
  CC      /usr/src/patch-o-matic-ng-20060509/patchlets/multiip/ipt_multiip.mod.o
  LD [M]  /usr/src/patch-o-matic-ng-20060509/patchlets/multiip/ipt_multiip.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.9-42.EL-i686'

[root@ES-vcmres multiip]# make install
cp -rf libipt_multiip.so /lib/iptables/
cp -rf ipt_multiip.ko /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
[root@ES-vcmres multiip]# depmod -a


安装结束
测试
1、查看 iptables版本
# iptables –V
iptables v1.3.5
查看 ipp2p 版本
# iptables -m ipp2p -h | grep IPP2P
IPP2P v0.8.2 options:
2、IPP2P range
# iptables -A FORWARD -m iprange --src-range 192.168.1.2-192.168.1.254 -m ipp2p --ipp2p -j DROP
3、layer 7 ,time ,iprange
# iptables -A FORWARD -m layer7 --l7proto qq  -m time --timestart 8:00 --timestop 17:30 --days Mon,Tue,Wed,Thu,Fri -m iprange --src-range 192.168.1.5-192.168.1.239 -j DROP

3、白金写的域名和多IP模块测试
# iptables -A FORWARD -m domain --name "sohu.com" -j DROP
# iptables -A FORWARD -m multiip --sip 192.168.1.3,192.168.1.8,192.168.1.33 -j DROP
#

2.4内核不编译内核Iptables添加模块

For CentOS AS 3.8

1. 安装系统。
因只做网关用,所以选包比较少,只选了编辑器里的VI,和网络里的DHCP,以及开发工具中的内核和原始开发工具。仅此而已。
进入系统用uname –r 命令会看到2.4.21-47.Elsmp ,默认是多处理器,而我的网关是一个CPU的,所以卸掉没用的包
# service sendmail stop
# rpm -e --nodeps kernel-smp
# rpm -e --nodeps kernel-smp-devel
# rpm -e --nodeps sendmial
修改SSH启用root登陆 vi /etc/ssh/sshd.config  启用PermitRootLogin yes
重新启动系统开始配置
# uname -r   (查看当前版本)
2.4.21-47.EL
可以cd  /usr/src 查看是否有这个目录2.4.21-47.EL 和软链 linux_2.4
b. 或者查是否安装了源码包
# rpm -qa|grep kernel
kernel-source-2.4.21-47.EL
如果没有安装,可以在光盘中拷贝过来或安装  rpm -ivh kernel-source-2.4.21-47.i386.rpm. 安装后会在/usr/src/出现linux-2.4连接和linux-2.4.21-47.EL目录.


二.安装说明
处理内核源码.
删除原有的软连接 cp副本来做 如果做错 以后可以从新cp 再重新做
# cp -a linux-2.4.21-47.EL/ ./linux-2.4
# cd /usr/src/linux-2.4
# vi Makefile
    EXTRAVERSION = -47.EL
    EXTRAVERSION = -47.ELcustom 注释这个 改成上面的
# head -n4 Makefile
仔细检查一下版本与 uname -r
# make mrproper
# make menuconfig 直接保存退出
给netfilter打补丁

# cd /usr/src/patch-o-matic-ng-20060509
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.5 ./runme time
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.5 ./runme connlimit
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.5 ./runme iprange
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.5 ./runme ipp2p


加入l7-filter 模块
# cd /usr/src/linux-2.4
# patch -p1 < /usr/src/netfilter-layer7-v2.6/kernel-2.4-layer7-2.6.patch
# cd /usr/src/iptables-1.3.5
# patch -p1 < /usr/src/netfilter-layer7-v2.6/iptables-layer7-2.6.patch
# chmod +x extensions/.layer7-test
l7-filter安装结束

# cd /usr/src/linux-2.4
# make menuconfig
确认
  • Prompt for development and/or incomplete code/drivers要选中
    然后进入Networking options
    再进入IP:Netfilter Configuration 把其想要的选中为模块"M"
    保存退出,给netfilter打补丁完成

    编译netfilter,
    # cd /usr/src/linux-2.4
    # make dep
    # make modules SUBDIRS=net/ipv4/netfilter

    应用新的模块
    # cp -f /usr/src/linux-2.4/net/ipv4/netfilter/*.o /lib/modules/2.4.21-47.EL/kernel/net/ipv4/netfilter/
    此处CentOS系统中无 -f 选项 可手动选 y 进行覆盖

    更新modules.dep
    # depmod -a
    当出现错误时可以把出错的删除.
    例如:rm -rf /lib/modules/2.4.21-47.EL/kernel/net/ipv4/netfilter/ipchains_core.o
    depmod: *** Unresolved symbols in /lib/modules/2.4.21-47.EL/kernel/net/ipv4/netfilter/ipchains_core.o
    depmod: *** Unresolved symbols in /lib/modules/2.4.21-47.EL/kernel/net/ipv4/netfilter/ipfwadm_core.o
    直到再执行 depmod -a 不在出错

    编译安装新的iptables
    # cd /usr/src/iptables-1.3.5
    # export KERNEL_DIR=/usr/src/linux-2.4
    # export IPTABLES_DIR=/usr/src/iptables-1.3.5
    # chmod +x extensions/.ipp2p-test
    # make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install

    安装l7-filter协议:
    cd /usr/src/l7-protocols-2006-10-18
    make install


    更新ipp2p模块,使他支持更多的协议         
    # cd /usr/src/ipp2p-0.8.2
    # make
    备份 # cp /lib/iptables/libipt_ipp2p.so /
    # cp /usr/src/ipp2p-0.8.2/libipt_ipp2p.so /lib/iptables/
    # make && make install
    # make && make install
    # depmod -a

    修正modprobe ip_nat_ftp 加载出错
    A:先删除 /lib/modules/2.4.21-47.EL/kernel/net/ipv4/netfilter/ip_nat_core.o
    修改/lib/modules/2.4.21-47.EL/modules.dep,找到 ip_nat_ftp行,删除含有 ip_nat_core 的行,/lib/modules/2.4.21-47.EL/kernel/net/ipv4/ip_nat_core.o
    然后再depmod -a,发现有错误,
    继续删除发生错误的文件,直到depmod -a,没有错误为止


    测试是否成功:
    1、查看 iptables版本
    # iptables -V
    iptables v1.3.5

    查看 ipp2p 版本
    # iptables -m ipp2p -h | grep IPP2P
    IPP2P v0.8.2 options:

    2、IPP2P range
    # iptables -A FORWARD -m iprange --src-range 192.168.1.2-192.168.1.254 -m ipp2p --ipp2p -j DROP

    3、layer 7 ,time ,iprange
    # iptables -A FORWARD -m layer7 --l7proto qq  -m time --timestart 8:00 --timestop 17:30 --days Mon,Tue,Wed,Thu,Fri -m iprange --src-range 192.168.1.5-192.168.1.239 -j DROP

    测试多IP
    iptables -A FORWARD -m multiip --sip 192.168.1.3,192.168.1.8,192.168.1.33 -j DROP

    4、connlimit
    # iptables -I FORWARD -s 192.168.1.15 -p tcp --syn --dport 80 -m connlimit --connlimit-above 3 --connlimit-mask 24 -j DROP

    5、测试域名
    iptables -A FORWARD -m domain --name "sohu.com" -j DROP
  • 阅读(3407) | 评论(2) | 转发(0) |
    给主人留下些什么吧!~~