赞
踩
Netfilter是内核态提供的包过滤框架,其中包含了各种各样的过滤表,默认的内核配置一般不包含这个框架,所以我们要先配置内核选项让其支持netfilte才行。
$cd ~work/my6410Kernel/linux-2.6.38
拷贝mini6410配置文件:
cp config_mini6410_a70 .config
完成以上操作后,执行make menuconfig命令,进入基于文本模式的菜单型的Linux内核配置:
- .config - Linux/arm 2.6.38 Kernel Configuration
- ──────────────────────────────────────────────────────────────────────────────
- ┌───────────────── Linux/arm 2.6.38 Kernel Configuration ─────────────────┐
- │ Arrow keys navigate the menu. <Enter> selects submenus --->. │
- │ Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, │
- │ <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> │
- │ for Search. Legend: [*] built-in [ ] excluded <M> module < > │
- │ ┌────^(-)─────────────────────────────────────────────────────────────┐ │
- │ │ Power management options ---> │ │
- │ │ [*] Networking support ---> │ │
- │ │ Device Drivers ---> │ │
- │ │ File systems ---> │ │
- │ │ Kernel hacking ---> │ │
- │ │ Security options ---> │ │
- │ │ -*- Cryptographic API ---> │ │
- │ │ Library routines ---> │ │
- │ │ --- │ │
- │ │ Load an Alternate Configuration File │ │
- │ └────v(+)─────────────────────────────────────────────────────────────┘ │
- ├─────────────────────────────────────────────────────────────────────────┤
- │ <Select> < Exit > < Help > │
- └─────────────────────────────────────────────────────────────────────────┘
进入networking support --->
进入networking options -->
将 “Network packet filtering framework (Netfilter)”选中;
- .config - Linux/arm 2.6.38 Kernel Configuration
- ──────────────────────────────────────────────────────────────────────────────
- ┌────────────────────────── Networking options ───────────────────────────┐
- │ Arrow keys navigate the menu. <Enter> selects submenus --->. │
- │ Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, │
- │ <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> │
- │ for Search. Legend: [*] built-in [ ] excluded <M> module < > │
- │ ┌────^(-)─────────────────────────────────────────────────────────────┐ │
- │ │ [ ] Security Marking │ │
- │ │ [ ] Timestamping in PHY devices │ │
- │ │ [*] Network packet filtering framework (Netfilter) ---> │ │
- │ │ < > The DCCP Protocol (EXPERIMENTAL) ---> │ │
- │ │ < > The SCTP Protocol (EXPERIMENTAL) ---> │ │
- │ │ < > The RDS Protocol (EXPERIMENTAL) │ │
- │ │ < > The TIPC Protocol (EXPERIMENTAL) ---> │ │
- │ │ < > Asynchronous Transfer Mode (ATM) │ │
- │ │ < > Layer Two Tunneling Protocol (L2TP) ---> │ │
- │ │ < > 802.1d Ethernet Bridging │ │
- │ └────v(+)─────────────────────────────────────────────────────────────┘ │
- ├─────────────────────────────────────────────────────────────────────────┤
- │ <Select> < Exit > < Help > │
- └─────────────────────────────────────────────────────────────────────────┘
-
- --- Network packet filtering framework (Netfilter) │ │
- │ │ [ ] Network packet filtering debugging │ │
- │ │ [*] Advanced netfilter configuration │ │
- │ │ Core Netfilter Configuration ---> │ │
- │ │ < > IP virtual server support ---> │ │
- │ │ IP: Netfilter Configuration ---> │ │
- │ │
- <*> Netfilter NFQUEUE over NFNETLINK interface │ │
- │ │ <*> Netfilter LOG over NFNETLINK interface │ │
- │ │ <*> Netfilter connection tracking support │ │
- │ │ [*] Connection mark tracking support │ │
- │ │ [*] Connection tracking events │ │
- │ │ < > DCCP protocol connection tracking support (EXPERIMENTAL) │ │
- │ │ < > SCTP protocol connection tracking support (EXPERIMENTAL) │ │
- │ │ <*> UDP-Lite protocol connection tracking support │ │
- │ │ < > Amanda backup protocol support │ │
- │ │ <*> FTP protocol support
- -*- Netfilter Xtables support (required for ip_tables) │ │
- │ │ *** Xtables combined modules *** │ │
- │ │ -*- nfmark target and match support
然后重新编译内核,带有Netfiler/iptables功能的内核zImage就出现在了arch/arm/boot/中了。
$ make && make zImage
Iptables是用户态提供的更改过滤规则的便捷工具,通过使用这个工具,可以方便的改变内核下netfilter的默认规则,也可以根据自己的需求添加自定的规则。
1. 到netfilter官方网站(http://www.netfilter.org/)下载iptables(http://www.netfilter.org/projects/iptables/downloads.html)最新源码并解压,编译方法具体可以参考iptables目录下的INSTALL文件;
2. 首先一定要确保当前终端下能识别出arm-linux-gcc命令,接着在/opt目录下创建iptables目录,在终端下切换到iptables代码树。运行./configure --prefix=/opt/iptables --host=arm-linux配置以生成Makefile文件。
- cd /opt/iptables-1.4.18/
-
- ./configure --prefix=/opt/iptables --host=arm-linux
- make KERNEL_DIR=/home/zhangmin/work/my6410Kernel/linux-2.6.38
- make NO.SHARED_LIBS=1
- make
- make install
其中:
make KERNEL_DIR=/usr/src/linux(指定内核目录)
make NO.SHARED_LIBS=1(静态链接编译生成可执行文件)
进入/opt/iptables/查看生成的文件:
$tree /opt/iptables /opt/iptables |-- bin | `-- iptables-xml -> /opt/iptables/sbin/xtables-multi |-- include | |-- libiptc | | |-- ipt_kernel_headers.h | | |-- libip6tc.h | | |-- libiptc.h | | |-- libxtc.h | | `-- xtcshared.h | |-- xtables.h | `-- xtables-version.h |-- lib | |-- libip4tc.la | |-- libip4tc.so -> libip4tc.so.0.1.0 | |-- libip4tc.so.0 -> libip4tc.so.0.1.0 | |-- libip4tc.so.0.1.0 | |-- libip6tc.la | |-- libip6tc.so -> libip6tc.so.0.1.0 | |-- libip6tc.so.0 -> libip6tc.so.0.1.0 | |-- libip6tc.so.0.1.0 | |-- libiptc.la | |-- libiptc.so -> libiptc.so.0.0.0 | |-- libiptc.so.0 -> libiptc.so.0.0.0 | |-- libiptc.so.0.0.0 | |-- libxtables.la | |-- libxtables.so -> libxtables.so.10.0.0 | |-- libxtables.so.10 -> libxtables.so.10.0.0 | |-- libxtables.so.10.0.0 | |-- pkgconfig | | |-- libip4tc.pc | | |-- libip6tc.pc | | |-- libiptc.pc | | `-- xtables.pc | `-- xtables | |-- libip6t_ah.so | |-- libip6t_DNAT.so | |-- libip6t_DNPT.so | |-- libip6t_dst.so | |-- libip6t_eui64.so | |-- libip6t_frag.so | |-- libip6t_hbh.so | |-- libip6t_hl.so | |-- libip6t_HL.so | |-- libip6t_icmp6.so | |-- libip6t_ipv6header.so | |-- libip6t_LOG.so | |-- libip6t_MASQUERADE.so | |-- libip6t_mh.so | |-- libip6t_NETMAP.so | |-- libip6t_REDIRECT.so | |-- libip6t_REJECT.so | |-- libip6t_rt.so | |-- libip6t_SNAT.so | |-- libip6t_SNPT.so | |-- libipt_ah.so | |-- libipt_CLUSTERIP.so | |-- libipt_DNAT.so | |-- libipt_ECN.so | |-- libipt_icmp.so | |-- libipt_LOG.so | |-- libipt_MASQUERADE.so | |-- libipt_MIRROR.so | |-- libipt_NETMAP.so | |-- libipt_realm.so | |-- libipt_REDIRECT.so | |-- libipt_REJECT.so | |-- libipt_SAME.so | |-- libipt_SNAT.so | |-- libipt_ttl.so | |-- libipt_TTL.so | |-- libipt_ULOG.so | |-- libipt_unclean.so | |-- libxt_addrtype.so | |-- libxt_AUDIT.so | |-- libxt_CHECKSUM.so | |-- libxt_CLASSIFY.so | |-- libxt_cluster.so | |-- libxt_comment.so | |-- libxt_connbytes.so | |-- libxt_connlimit.so | |-- libxt_connmark.so | |-- libxt_CONNMARK.so | |-- libxt_CONNSECMARK.so | |-- libxt_conntrack.so | |-- libxt_cpu.so | |-- libxt_CT.so | |-- libxt_dccp.so | |-- libxt_devgroup.so | |-- libxt_dscp.so | |-- libxt_DSCP.so | |-- libxt_ecn.so | |-- libxt_esp.so | |-- libxt_hashlimit.so | |-- libxt_helper.so | |-- libxt_HMARK.so | |-- libxt_IDLETIMER.so | |-- libxt_iprange.so | |-- libxt_ipvs.so | |-- libxt_LED.so | |-- libxt_length.so | |-- libxt_limit.so | |-- libxt_mac.so | |-- libxt_mark.so | |-- libxt_MARK.so | |-- libxt_multiport.so | |-- libxt_nfacct.so | |-- libxt_NFLOG.so | |-- libxt_NFQUEUE.so | |-- libxt_NOTRACK.so | |-- libxt_osf.so | |-- libxt_owner.so | |-- libxt_physdev.so | |-- libxt_pkttype.so | |-- libxt_policy.so | |-- libxt_quota.so | |-- libxt_rateest.so | |-- libxt_RATEEST.so | |-- libxt_recent.so | |-- libxt_rpfilter.so | |-- libxt_sctp.so | |-- libxt_SECMARK.so | |-- libxt_set.so | |-- libxt_SET.so | |-- libxt_socket.so | |-- libxt_standard.so | |-- libxt_state.so | |-- libxt_statistic.so | |-- libxt_string.so | |-- libxt_tcpmss.so | |-- libxt_TCPMSS.so | |-- libxt_TCPOPTSTRIP.so | |-- libxt_tcp.so | |-- libxt_TEE.so | |-- libxt_time.so | |-- libxt_tos.so | |-- libxt_TOS.so | |-- libxt_TPROXY.so | |-- libxt_TRACE.so | |-- libxt_u32.so | `-- libxt_udp.so |-- sbin | |-- ip6tables -> xtables-multi | |-- ip6tables-restore -> xtables-multi | |-- ip6tables-save -> xtables-multi | |-- iptables -> xtables-multi | |-- iptables-restore -> xtables-multi | |-- iptables-save -> xtables-multi | `-- xtables-multi `-- share `-- man |-- man1 | `-- iptables-xml.1 `-- man8 |-- ip6tables.8 |-- ip6tables-restore.8 |-- ip6tables-save.8 |-- iptables.8 |-- iptables-extensions.8 |-- iptables-restore.8 `-- iptables-save.8
本人的mini6410环境已搭建起来,即使将带有Netfilter/iptables功能的内核烧写后文件系统中也没有找到iptables命令,必须得移植。
将交叉编译好的/opt/iptables整个目录拷贝到文件系统中(或者通过NFS导入到文件系统中)
cp -R /nfsfile/iptables /opt/
再来使用iptables看能否使用:
- $/opt/iptables/sbin/iptables -t filter -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
可以看到iptables命令已经可以使用,至此 Netfilter/iptables 移植完成!
参考资料:
http://blog.csdn.net/shuxiao9058/article/details/6923517
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。