一、重新配置内核选项,编译内核支持netfilter
将netfilter选项选中。
Networking support --->
Networking options --->
Network packet filtering framework (Netfilter) -->
Core Netfilter configuration --->
全选为built-in [*]
IP: Netfilter configuration --->
全选为built-in [*]
注意:这里的所有选项一定选为built-in [*],而不能选为Module [M],如果选为Module,重新烧制的系统内核里用modprobe ip_tables 命令将不能找到iptables模块。(本人是菜鸟,只能按菜鸟的方法来)。上一步还有一点要注意的是IP: Netfilter
configuration中的FULL NAT选项 一定要选中,否则将不能使用 iptables -t nat命令。
5.配置完成后,将配置文件保存。
6.开始编译内核。make dep; make clean; make bzImage.
7.编译完成后,生成的新内核"zImage"保存在/usr/src/linux/arch/arm/boot文件夹下。
二、交叉编译iptables
1.安装交叉编译工具链 cross-3.4.1.tar.bz2。将其安装在/usr/local/arm/3.4.1/文件夹下。
2.配置环境变量,打开/etc/profile 文件,在“export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE”的下一行加入“export PATH=/usr/local/arm/3.4.1/bin:$PATH”
3.在终端测试命令“arm-linux-gcc”是否成功。
4.下载到netfilter官方网站下载iptables-1.4.3.1.tar.bz2,解压。
5.在终端下切换到iptables-1.4.3.1文件夹。运行./configure --prefix=/usr/local/arm/iptables --host=arm-linux --with-curnel=/usr/src/linux。选项--host=arm- linux是指定iptables的运行环境,也就是通知configure在生快成Makefile的时候,编译器选用arm-linux-gcc,调用交叉编译工具链进行交叉编译 ,--prefix=/usr/local/arm/iptables 是指定安装路径
6. 终端执行make;make install命令,交叉编译安装iptables。
7.编译生成的可执行文件 iptables iptables-save iptables-store 等都在iptables-1.4.3.1文件夹内的.libs隐藏文件夹内。而iptables 所调用的动态库都保存在iptables-1.4.3.1/extensions文件夹内。
三、下载新系统内核和交叉编译好的iptables到板子
1.打开飞凌开发板光盘自带的DNW软件,烧制内核。关闭DNW软件。
2.打开超级终端,连接开发板所在的COM口,重启新系统。
3.使用超级终端将编译好的把编译生成的
(1) libiptc.so.0和libxtables.so.2拷贝到开发板的/lib目录中去
(2) 将iptables-1.4.3.1/extensions中的libipt_SNAT.so,libipt_DNAT.so,libipt_tcp.so下载到开发板 的/usr/local/libexec/xtables中去,开发板本身没有这个目录,可以用命令mkdir -p/usr/local/libexec/xtables
建立。注:这些动态库是在用 iptables的一些选项时调用的。如,libipt_SNAT.so,libipt_DNAT.so 支持 “--to”、“-j SNAT”和 “-j DNAT”选项,libipt_tcp.so支持“-- dport”选项。如果用到其他命令选项,自行查找是哪个动态库支持,将其下载到开发板的/usr/local/libexec/xtables目录。
(3) 将iptables等可执行文件发送到新系统的/sbin目录下,为新拷贝的可执行文件添加执行权限。运行iptables命令 发现错误iptables: error while loading shared libraries: libiptc.so.0: cannot open shared object
file: No such file or directory 和iptables: error while loading shared libraries: libxtables.so.2: cannot open shared object file: No such file or directory 原因是缺少libiptc.so.0和libxtables.so.2 两个动态库,从/usr/local/arm/iptables/lib中找到两个动态库,并下载到板子的/lib文件夹。
(4) 执行iptables -L 命令,执行 成功。但是当添加规则“iptables -A INPUT -t tcp --dport 80 -j ACCEPT”时提示找不到libipt_standard.so文件。而这个文件在编译生成的动 态库中是没有的,只有一个“libxt_standard.so”。其实这两个库是一样的。重命名“libxt_standard.so”为“libipt_standard.so”,将其下载
到/usr/local/libexec/xtables。
(5) 运行“iptables -t nat -A PREROUTING -d 192.168.1.15 -p tcp -j DNAT --dport 9000 -- to 192.168.1.16:9000”,加入成功,运行“iptables -t nat -L”可以看到规则已经加入到iptables中。
查询资料 原帖:
我是新手,用开发板的都是用来做网络应用的,一直为没有防火墙而烦恼着。本来想偷懒,想直接用别人现成的,可一直没人给帮助,只好自己硬着头皮自己编译了。以下是我的编译过程,假定看客已经按手册学会了编译内核和使用交叉编译工具:
首先把内核文件解压,运行make menuconfig
Networking support --->
Networking options --->
Network packet filtering framework (Netfilter) -->
Core Netfilter configuration --->
里面的选项很多,我也不搞清是什么了,全选为了built-in的了
然后退出保存,运行make zImage编译新的内核,并更新板上的内核。
下载 iptables-1.4.3.2.tar.bz2
解压 tar -jxcf iptables-1.4.3.2.tar.bz2
进入iptables-1.4.3.2目录运行./configure配置,生成Makefile文件,然后修改Makefile文件里的gcc为arm-linux-gcc
然后运行make KERNEL_DIR=/opt/FriendlyARM/mini2440/linux-2.6.29/kernel
再 make NO.SHARED_LIBS = 1 静态链接编译生成可执行文件
iptables 1.4.3.2版生成的可执行文件在 .libs目录下,把想要的可执行文件 iptables,iptables-save,iptables-restore拷贝到开发板上(我把它们放在/home/plg目录里了)
把libiptc.so.0和libxtables.so.2拷贝到开发板的/lib目录中去
把iptables 1.4.3.2的extensions目录下所有的so文件copy到/usr/local/libexec/xtables中去,开发板本身没有这个目录,可以用命令mkdir -p/usr/local/libexec/xtables 建立
运行iptables -L成功!
以为这就成功了,可是当加规则iptables -A INPUT -t tcp --dport 80 -j ACCEPT 时出错提示找不到libipt_standard.so文件,这下惨了,上网找了很久,没有办法解决~~~
终于看到一篇文章说iptables 1.4.3.2 用的是 libxt_standard.so这个文件,就试着把那个文件拷贝为libxt_standard.so文件 cp /usr/local/libexec/xtables/libxt_standard.so /usr/local/libexec/xtables/libipt_standard.so
再加规则iptables -A INPUT -t tcp --dport 80 -j ACCEPT,终于没出错提示了!
再测试对telnet端口23的开放,也成功了,至止,算是小成了吧,也不知道最后那一步硬改了名字会不会有什么问题,先不管它了,反正已经可以用iptables,连在公司的内网也不至上总是断网了(怀疑公司内有电脑中毒到处攻击)。