iptables 在Atheros ap121上的移植及应用

  
  1. iptables的移植

iptableslinux内核中的netfilter集成使用,组成linux的防火墙系统,iptablse可以看作是此防火墙系统的应用CLI。因此,iptables的移植除了要修改自身的配置,也需要重新配置内核已支持netfilter.

    1.  iptables移植

从网上下载iptables源码,如http://www.netfilter.org/projects/iptables/downloads.html

AP121使用的内核版本为2.6.31,我下载的源码也是专为2.6.31升级的版本iptables-1.4.5

解压,放置到ap121开发环境目录下apps/iptables/iptables-1.4.5.

如果直接使用命令来配置:

 ./configure --host=mips-linux --disable-ipv6 –disable-shared

则后续需要修改其生成的所有makefile中的与交叉编译工具连相关的内容,如CCLDARSTRIP等等,比较麻烦。

这里利用开发环境中的移植设置好的默认变量,在主makefile Makefile.ap121-2.6.31中编写configure操作,先定义iptables makefile中特有的变量,然后定义configure操作:

#

#For iptables configure

#

export kbuilddir = $(KERNELPATH)

export kinclude_CFLAGS = -I$(KERNELPATH)/include

export ksourcedir = $(KERNELPATH)

 

iptables_config:

     @echo Start to configure iptables ...

     cd $(TOPDIR)/apps/iptables/iptables-1.4.5 && \

     ./configure --host=mips-linux --disable-ipv6 --disable-shared --prefix=$(INSTALL_ROOT)

 

此处指定了cpu类型为mips,禁用ipv6,禁用共享库,安装路径指定为交叉编译环境中统一定义的FS路径。

此时,如果交叉编译环境编译果,交叉编译工具链已经制作好,则执行如下命令可配置iptable并生成makefile

#make iptables_config BOARD_TYPE=ap121-2.6.31

此时可以查看确认生成的makefile中使用的是否是交叉编译工具链。

 

仍然在在主makefile Makefile.ap121-2.6.31中编写iptables build操作:

iptables_build:

     @echo making iptables

     cd $(TOPDIR)/apps/iptables/iptables-1.4.5 && \

     $(MAKE) clean KERNEL_DIR=$(KERNELPATH) && \

     $(MAKE) KERNEL_DIR=$(KERNELPATH) NO_SHARED_LIBS=1 DO_IPV6=0 && \

     $(MAKE) install

编译时指定不使用共享库,不使用ipv6.

 

编译时可能会出现如下错误:

libxtables.so: undefined reference to `in6addr_any’’

此时需要打补丁文件,从官网bugzilla 上下载,bug608

http://bugzilla.netfilter.org/show_bug.cgi?id=608

 

然后把iptables_build加到主makefile的主build定义中,每次系统编译时自动编译iptables,如下:

ap121-2.6.31_build: common_mainline iptables_build dns_build wlan_driver_build $(BUILD_TYPE)_build

 

可以把iptables_configure加在iptables_build中,即每次make都重新config

iptables_build:    iptables_config

     @echo making iptables

     cd $(TOPDIR)/apps/iptables/iptables-1.4.5 && \

     $(MAKE) clean KERNEL_DIR=$(KERNELPATH) && \

     $(MAKE) KERNEL_DIR=$(KERNELPATH) NO_SHARED_LIBS=1 DO_IPV6=0 && \

     $(MAKE) install

 

此时make iptables后就会在目标板文件系统目录下生成iptables等执行文件

 

    1.  内核配置

iptables编译安装后不能正常工作,需要内核支持netfilter,打开内核配置界面:

     #cd linux/kernels/mips-linux-2.6.31

     #make menuconfig

load ap121内核配置文件,如下图:

按如下路径选择支持netfilter

[*] Networking support --->

      Networking options --->

          [*] Network packet filtering framework (Netfilter) --->

进入netfilter配置菜单,如下:

其中两项必须配置,可以根据需要选择要加载的模块。因我们需要使用NAT功能,nat相关的全部选上。为了方便,选中的模块全部以build-in的方式加载

Core Netfilter Configuration --->

IP: Netfilter Configuration --->

我选择的项如下,其它未作选择:

Core Netfilter Configuration --->

<*> Netfilter NFQUEUE over NFNETLINK interface

<*> Netfilter LOG over NFNETLINK interface

<*> Netfilter connection tracking support

<*> Connection tracking netlink interface

-*- Netfilter Xtables support (required for ip_tables)

<*> "NFQUEUE" target Support

<*> "iprange" address range match support

<*> "mac" address match support

<*> "physdev" match support

 

IP: Netfilter Configuration --->

<*> IPv4 connection tracking support (required for NAT)

[*] proc/sysctl compatibility with old connection tracking

<*> IP Userspace queueing via NETLINK (OBSOLETE)

<*> IP tables support (required for filtering/masq/NAT)

<*> Packet filtering

<*> REJECT target support

<*> Full NAT

<*> MASQUERADE target support

<*> REDIRECT target support

<*> Packet mangling

<*> raw table support (required for NOTRACK/TRACE)

<*> ARP tables support

配置完成后保存,退出,重新编译系统。

运行iptables时,可能会出现如下信息:

modprobe: could not parse modules.dep

 

这不会影响iptables的功能。详细的信息请查阅代码或请见官网bugzilla

http://bugzilla.netfilter.org/show_bug.cgi?id=619

 

  1.  iptables的应用

    1.  iptables基础

Iptables的基础知识请查询相关文档。

 

Iptables通常包括三个表格(FliterNATMangle

   filter是预设的table 。通常下面有三个链(chain) 
       INPUT∶ 
进入本机的数据包
       OUTPUT∶
本机所要送出的数据;
       FORWARD∶
本机端口间转发的数据包
   NAT
主要用来做源与目的IP或者端口的转换。
       PREROUTING∶
在进行路由判断之前所要进行的规则(DNAT/REDIRECT)

       POSTROUTING∶在进行路由判断之后所要进行的规(SNAT/MASQUERADE)

       OUTPUT∶发送出去的封包规则
   mangle
这个表格主要是与特殊的封包的路由旗标有关,较少使用mangle 这个表格。

 

iptables常见命令及参数如下:

 

iptables [-t tables] [-L] [-nv]
-t ∶
后面接table ,例如nat filter ,若省略此项目,则使用预设的filter
-L ∶
列出目前的table 的规则
-n ∶
不进行IP HOSTNAME 的反查,显示讯息的速度会快很多!
-v ∶
列出更多的资讯,包括通过该规则的封包总位元数、相关的网路介面等


iptables [-t tables] [-FXZ]
参数
-F ∶
清除所有的已订定的规则;
-X ∶
杀掉所有使用者"自订chain (应该说的是tables 
-Z ∶
将所有的chain 的计数与流量统计都归零


iptables -P [INPUT,OUTPUT,FORWARD][ACCEPT,DROP]
(默认操作filter表格)
iptables -t -nat -P[PREROUTING,POSTROUTING,OUTPUT][ACCEPT,DROP]
参数
-P ∶
定义默认策略( Policy )。注意,这个为大写啊!
ACCEPT ∶
该封包可接受
DROP ∶
该封包直接丢弃,不会让client 端知道为何被丢弃。


iptables [-AI 
] [-io 网路介面] [-p 协议] [-s 来源IP/掩码] [-d 目标IP/掩码] -j [ACCEPT|DROP]
-AI 
针对某的链进行规则的"插入"增加"
-A ∶
新增加一条规则,该规则增加在原本规则的最后面
-I ∶
插入一条规则。如果没有指定此规则的顺序,预设是插入变成第一条规则。
-io 
:网路介面设定数据包进出的介面规范
-i ∶
数据包所进入的那网路介面,例如eth0, lo 等介面。需与INPUT 配合;
-o ∶
数据包所传出的那个网路介面,需与OUTPUT 链配合;
-p 
:协议设定此规则适用于哪种数据包格式主要的数据包格式有∶ tcp, udp, icmp all 
-s 
:来源IP/掩码设定此规则之数据包的来源项目,可指定单纯的IP 或包括掩码。若规范为『不许』时,则加上即可,例如-s ! 192.168.100.0/24 表示不许192.168.100.0/24 之数据包来源;
-d 
:目标IP/掩码-s ,只不过这里指的是目标的IP 或网域。
-j ∶
后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP) 及记录(LOG)

iptables [-AI 
] [-io 网路介面] [-p tcp,udp] [-s 来源IP/网域] [--sport 端口范围
> [-d 
目标IP/网域] [--dport 端口范围] -j [ACCEPT|DROP]参数
--sport 
端口范围限制来源的端口号码,端口号码可以是连续的,例如1024:65535
--dport 
端口范围限制目标的端口号码。


iptables -A INPUT -m state --state 
状态参数
-m ∶
一些iptables 的模组,主要常见的有
state ∶
状态模组
mac ∶
网路卡硬体位址(hardware address)
--state ∶
一些数据包的状态,主要有
INVALID ∶
无效的数据包,例如资料破损的数据包状态
ESTABLISHED∶
已经连线成功的连线状态;
NEW ∶
想要新建立连线的数据包状态;
RELATED ∶
这个最常用!表示这个数据包是与我们主机发送出去的数据包有关。

 

    1.  iptablesap121上的应用

AP121平台在我们项目的应用中,分为两种模式:标准模式和repeater模式。

标准模式即无线路由器模式,其接口如下:

eth0wan口一个,有线以太网

eth1lan口一个,有线局域网

ath0:无线AP

br0:内建的bridge接口,上面绑定了eth1ath0

在这种模式下,eth1ath0在一个局域网内,本机不同网段的数据转发发生在br0eth0之间。操作如下:

#echo 1 > /proc/sys/net/ipv4/ip_forward                                   //使能内核ip转发

#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE //eth0出去的数据包伪装本机IP.

Iptables filter链表中默认输入输出都是accept的,使用默认值即可;如果默认是drop的,需要打开br0接收:

#iptables -A FORWARD -i br0 -j ACCEPT

使用如下命令可以查看设定的规则:

#iptables -nvL              //查看filter链表已建立的规则

#iptables -t nat -nvL     //查看nat链表已经建立的规则

另外,测试时,lanwan要设定为不同网段,lan口和wan口上连接的测试机网要设定为相应端口的地址。

如果powershare工作在repeater模式:

在以上基础上增加一个station端口:ath1

其它端口状态和上面的相同。

增加如下操作:

#iptables -t nat -A POSTROUTING -o ath1 -j MASQUERADE

ath1端口也作为一个外网端口。

  1.  应用注意事项

  • 如果有几个interface绑定在brigde上,iptables指定的接口要是brigde

  • 系统必须打开ip forward,否则系统内部不同网段包不被转发

查看系统forward参数是否为1

#cat /proc/sys/net/ipv4/ip_forward

如果不是,需要设定为1

#echo 1 > /proc/sys/net/ipv4/ip_forward

  • 网关必须设定,局域网lan上连接的测试网关一定要设置为br0地址,wan口上连接的测试机网关一定要设置为eth0地址,否则ping不通

  • 外网端口和局域网端口IP不能设定在相同网段内。

 

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ath1 -j MASQUERADE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值