嵌入式 iptables1.4.3.1移植ARM9

2019-07-12 21:51发布

一、重新配置内核选项,编译内核支持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,连在公司的内网也不至上总是断网了(怀疑公司内有电脑中毒到处攻击)。