IPtables新功能模块的添加与应用
- 格式:pdf
- 大小:65.48 KB
- 文档页数:2
iptables命令参数iptables命令是Linux系统中用于设置防火墙规则的工具,它允许用户通过在内核中的网络数据包传输路径上添加或删除规则来过滤、修改和重定向网络数据包。
iptables命令有许多参数可以用来指定具体的操作和规则。
下面是一些常用的iptables命令参数:1. -A或--append:添加规则到规则链的末尾。
例如,`iptables -A INPUT -s 192.168.0.1 -j DROP`将会添加一个规则,禁止来自IP地址为192.168.0.1的主机的所有入站连接。
2. -I或--insert:在规则链内指定的位置插入规则。
例如,`iptables -I INPUT3 -s 192.168.0.1 -j DROP`将会在INPUT链的第3个位置插入一个规则,禁止来自IP地址为192.168.0.1的主机的所有入站连接。
3. -D或--delete:从规则链中删除规则。
例如,`iptables -D INPUT -s 192.168.0.1 -j DROP`将会删除INPUT链中所有来自IP地址为192.168.0.1的主机的入站连接的规则。
4. -P或--policy:设置默认策略。
例如,`iptables -P INPUT ACCEPT`将会将INPUT链的默认策略设置为接受所有入站连接。
5. -s或--source:指定源IP地址或地址段。
例如,`iptables -A INPUT -s 192.168.0.0/24 -j DROP`将会添加一个规则,禁止来自192.168.0.0/24网段的主机的所有入站连接。
6. -d或--destination:指定目标IP地址或地址段。
例如,`iptables -AOUTPUT -d 192.168.0.1 -j DROP`将会添加一个规则,禁止所有出站连接到IP地址为192.168.0.1的主机。
7. -p或--protocol:指定要过滤的传输层协议,如TCP、UDP或ICMP。
1iptables与firewalld的关系RHEL7.0以后,使用firewalld服务取代了iptables服务,但是依然可以使用iptables服务,只是默认不开启了,iptables和firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具,是操作系统上的一种服务,将定义好的规则交给内核中的netfilter(网络过滤器)来读取,从而实现防火墙的功能,firewalld和iptables除了可以可以在inbond和outbond方向做策略限制以外,还能实现snat和dnat功能。
注意:firewalld和iptables同时只能运行一种服务,否则会出现不可预知的情况2iptables安装RHEL7.0以后,iptables默认不开启,需要安装iptables服务安装完成后3实验场景3.1源地址转换需求:源地址1(172.16.202.15)需要访问公网目的地址(192.168.111.245),源地址2(172.16.202.16)不需要访问公网。
内网两台服务器,分别为源地址1(172.16.202.15)和源地址2(172.16.202.16),公网出口处有一台centos 7.1的双网卡服务器,一个接口接内网(172.16.202.14),一个接口接外网(192.168.111.63)。
源地址1上首先需要保证和iptables服务器能够互通,并且有去往192.168.111.245的路由,路由下一跳需要指向iptables内网接口(172.16.202.14),由iptables服务器做源nat,把源地址(172.16.202.15)nat成公网接口地址(192.168.111.63),从而可以访问目的地址(192.168.111.245)。
一、首先在源地址1服务器上配置去往192.168.111.245的路由ip route add 192.168.111.245 via 172.16.202.14 //临时添加路由,重启网卡或者系统后,路由会丢失,建议做路由固化路由固化:在/etc/sysconfig/network-scripts目录下,新建一个route配置文件,vi route-eth0,新增一条路由,192.168.111.245/32 via 172.16.202.14,重启网卡即可生效二、iptables服务器上,配置snat策略iptables -t nat -A POSTROUTING -s 172.16.202.15/32 -d 192.168.111.245/32 -j SNAT --to 192.168.111.63注释:-t table table to manipulate (default: `filter') //这个选项指定命令要操作的匹配包的表。
Iptables之nf_conntrack模块nf_conntrack(在⽼版本的 Linux 内核中叫 ip_conntrack)是⼀个内核模块,⽤于跟踪⼀个连接的状态的。
连接状态跟踪可以供其他模块使⽤,最常见的两个使⽤场景是 iptables 的 nat的 state 模块。
iptables 的 nat 通过规则来修改⽬的/源地址,但光修改地址不⾏,我们还需要能让回来的包能路由到最初的来源主机。
这就需要借助 nf_conntrack 来找到原来那个连接的记录才⾏。
⽽ state 模块则是直接使⽤ nf_conntrack ⾥记录的连接的状态来匹配⽤户定义的相关规则。
例如下⾯这条 INPUT 规则⽤于放⾏ 80 端⼝上的状态为 NEW 的连接上的包。
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT。
iptables中的状态检测功能是由state选项来实现iptable的。
对这个选项,在iptables的⼿册页中有以下描述:state这个模块能够跟踪分组的连接状态(即状态检测)。
格式:--state XXXXX这⾥,state是⼀个⽤逗号分割的列表,表⽰要匹配的连接状态。
在iptables中有四种状态:NEW,ESTABLISHED,RELATED,INVALID。
NEW,表⽰这个分组需要发起⼀个连接,或者说,分组对应的连接在两个⽅向上都没有进⾏过分组传输。
NEW说明这个包是我们看到的第⼀个包。
意思就是,这是conntrack模块看到的某个连接第⼀个包,它即将被匹配了。
⽐如,我们看到⼀个SYN包,是我们所留意的连接的第⼀个包,就要匹配它。
第⼀个包也可能不是SYN包,但它仍会被认为是NEW状态。
⽐如⼀个特意发出的探测包,可能只有RST位,但仍然是 NEW。
ESTABLISHED,表⽰分组对应的连接已经进⾏了双向的分组传输,也就是说连接已经建⽴,⽽且会继续匹配这个连接的包。
iptables ipset模块描述Ipset 用于设置、维护和检测,所以在内核中称之为IPsets .依赖于类型,存储的ip地址的设置,端口号和其他基于ip地址的添加信息。
IP在这里是一个通用的术语,请参阅类型定义。
集合中的任意一个元素都可以关联到其他结构类似的集合. 为了定义一个约束并不需要规则已经添加到集合中。
每个集合都有一个默认的约束。
创建IP set集合的绑定点绑定集合的时候可以参照iptables规则和目标管理规则。
这可以在内核中保护集合. 当集合只有一个访问点时是不可以被删除的选项这些选择在ipset的使用中可以在不同的组中自由组合。
命令这些选项明确地指定了执行的活动。
只有一个命令可以在命令行中规定除非其他的命令在下面。
对于所有的长版本命令和选项名称,必须使用足够大的空间以确保ipset可以把他们和其他的选项区分开。
-N, --创建 集合名称 类型 类型具体选项创建一个用集合名称命名并且指定类型的集合。
类型具体选项必须是系统规定的。
-X, --删除 [集合名称]删除指定的集合,如果没有指定或者指定all就删除全部集合。
在删除集合之前,所有基于集合的绑定和默认绑定都会被移除。
如果集合已经被使用,则什么都不做。
-F, --清空 [集合名称]删除指定集合中的所有规则, 如果没有指定或者指定了all就清空所有的集合。
绑定不会受到清空操作的影响。
-E, --重命名 旧集合名 新集合名重命名集合,新集合名的标识必须是目前不存在。
-W, --交换 源集合名 目的集合名交换两个集合的内容,或者说交换两个集合的名称。
这两个集合必须是存在的而且是具有相同的类型才能交换。
-L, --列出 [集合名名称]列出指定集合的规则和绑定,如果没有指定或者指定为all就列出所有的集合。
-n选项,数字选项可以用来限定名称查找和生产数字输出,当-s ,分类选项已经使用,规则将分类排列(如果给出的集合类型支持这个选项)。
netd应用iptables规则
要在netd应用iptables规则,需要进行以下步骤:
1. 在设备上启用iptables功能。
通常情况下,iptables已经预装在Android设备上,并且在内核中启用了相应的模块。
要确保iptables功能是启用的,可以通过在设备上执行以下命令来检查:
su
iptables version
如果iptables未安装或未启用,请按照设备的要求进行安装或启用。
2. 创建iptables规则。
使用iptables命令可以创建各种规则,例如添加防火墙规则、网络地址转换规则等。
如果要创建新规则,可以执行以下命令:
su
iptables -A [chain] [options]
其中,`[chain]`是要将规则添加到的链的名称,`[options]`是规则的参数和条件。
3. 应用iptables规则。
在netd应用iptables规则之前,需要确保设备已经root,并且已经获得超级用户权限。
然后,可以执行以下命令来应用规则:
su
iptables-restore < [rules_file]
其中,`[rules_file]`是包含规则的文本文件的路径。
请注意,修改iptables规则可能会影响设备的网络连接和通信。
因此,在进行任何更改之前,请确保理解和测试规则的影响,并确保备份现有的规则和配置文件。
使用iptables时,请小心和谨慎操作。
iptables -m的用法
iptables 是一个用于配置 Linux 内核防火墙的命令行工具,而 `-m` 选项用于指定要使用的匹配扩展模块。
匹配扩展模块允许用户在规则中使用额外的条件来过滤数据包。
下面我会从多个角度来解释 `-m` 选项的用法。
首先,`-m` 选项后面可以跟随各种不同的扩展模块,比如 `--state`、`--protocol`、`--mac`、`--dport` 等等。
这些扩展模块可以用于指定数据包的状态、协议类型、MAC 地址、目标端口等条件。
其次,`-m` 选项可以用于指定多个扩展模块,这样可以在一条规则中同时使用多个条件进行匹配。
例如,可以使用 `-m state --state RELATED,ESTABLISHED -m tcp -p tcp --dport 80` 来指定只允许相关或建立的连接并且目标端口为 80 的数据包通过。
此外,`-m` 选项的使用还可以结合其他选项,比如 `-s` 和`-d` 来指定源地址和目标地址,以及 `-i` 和 `-o` 来指定输入接口和输出接口等。
总的来说,`-m` 选项的用法非常灵活,可以根据具体的需求来
指定不同的扩展模块和条件,从而实现对数据包的精确过滤和控制。
在实际使用中,需要根据具体的网络环境和安全策略来合理地选择
和配置 `-m` 选项以及相应的扩展模块,以达到最佳的防火墙效果。
Linux下防⽕墙iptables⽤法规则详及其防⽕墙配置转:iptables规则规则--顾名思义就是规矩和原则,和现实⽣活中的事情是⼀样的,国有国法,家有家规,所以要遵纪守法的嘛。
当然在防⽕墙上的规则,在内核看来,规则就是决定如何处理⼀个包的语句。
如果⼀个包符合所有的条件,我们就⽤相应的处理动作来处理。
书写规则的语法格式为:iptables [-t table] command chains [creteria] -j action-t table就是表名,filter/nat/mangle三个表中的⼀个,默认是filter表command告诉程序如何做,⽐如:插⼊⼀个规则,还是删除等chains 链,有五个,PREROUTING POSTROUTING INPUT OUTPUT FORWARDaction 处理动作,有ACCEPT DENY DROP REJECT SNAT DNAT理⼀下思路下⾯⼀点点的说⼀、Tables选项-t⽤来指定⽤哪个表,它可以是下⾯的任何⼀个,默认的是filter表⼆、COMMANDScommand指定iptables对我们提交的规则要做什么样的操作。
这些操作可能是在某个表⾥增加或删除⼀些东西,或其他的动作。
⼀下是iptables可⽤的command(如不做说明,默认表是filter)和命令结合常⽤的选项三、chains简单说⼀下五个链的作⽤:PREROUTING 是在包进⼊防⽕墙之后、路由决策之前做处理POSTROUTING 是在路由决策之后,做处理INPUT 在包被路由到本地之后,但在出去⽤户控件之前做处理OUTPUT在去顶包的⽬的之前做处理FORWARD在最初的路由决策之后,做转发处理四、匹配条件4.1 基本匹配4.2 隐含扩展匹配这种匹配操作是⾃动的或隐含的装⼊内核的。
例如使⽤-p tcp时,不需要再装⼊任何东西就可以匹配只有IP包才有的特点。
隐含匹配针对三种不同的协议,即TCP UDP ICMP。
文章标题:深度探析iptable tproxy使用方法一、iptable tproxy的概念在网络安全领域中,iptable tproxy是一种非常重要的技术。
它可以帮助用户在保持源位置区域不变的情况下转发数据包,同时对转发的数据包进行透明代理。
这意味着用户可以在不修改数据包源位置区域的情况下,将数据包转发到指定的目的地,并且可以对转发的数据包进行一些操作。
1. 了解iptable tproxy的基本原理iptable tproxy的基本原理是通过在源位置区域不变的情况下进行转发和透明代理。
它利用Linux内核的netfilter框架来实现这一功能。
通过在iptables规则中使用TPROXY目标来指定需要进行tproxy转发的数据包,从而实现透明代理的效果。
2. 理解iptable tproxy的作用iptable tproxy可以帮助用户在网络中设置透明代理,实现对数据包的转发和操作。
它可以用于网络访问控制、内容过滤、流量监控等方面,为用户提供了更灵活和强大的网络管理能力。
二、iptable tproxy的使用方法为了更好地理解和应用iptable tproxy,需要了解其具体的使用方法。
1. 配置环境和安装必要的软件在开始使用iptable tproxy之前,需要在Linux系统中安装iptables 和相关的tproxy模块。
还需要配置系统环境,确保系统正常运行,并进行必要的网络设置。
2. 编写iptables规则在具体使用iptable tproxy时,需要编写相应的iptables规则。
通过在规则中指定TPROXY目标,并设置相应的IP位置区域和端口号,来实现对数据包的tproxy转发和操作。
3. 转发数据包并进行透明代理一旦配置完成iptables规则,就可以开始进行数据包的转发和透明代理了。
在实际应用中,可以通过iptables规则将数据包转发到指定的代理服务器,并可以在代理服务器中对数据包进行进一步操作,实现不修改源位置区域的情况下的透明代理。
Linux下iptables超详细教程和使⽤⽰例iptables的结构:iptables由上⽽下,由Tables,Chains,Rules组成。
⼀、iptables的表tables与链chainsiptables有Filter, NAT, Mangle, Raw四种内建表:1. Filter表Filter是iptables的默认表,它有以下三种内建链(chains):INPUT链 – 处理来⾃外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他⽹卡设备上。
2. NAT表NAT表有三种内建链:PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。
它会转换数据包中的⽬标IP地址(destination ip address),通常⽤于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。
它会转换数据包中的源IP地址(source ip address),通常⽤于SNAT(source NAT)。
OUTPUT链 – 处理本机产⽣的数据包。
3. Mangle表Mangle表⽤于指定如何处理数据包。
它能改变TCP头中的QoS位。
Mangle表具有5个内建链(chains):PREROUTINGOUTPUTFORWARDINPUTPOSTROUTING4. Raw表Raw表⽤于处理异常,它具有2个内建链:PREROUTING chainOUTPUT chain5.⼩结⼆、IPTABLES 规则(Rules)规则的关键知识点:Rules包括⼀个条件和⼀个⽬标(target)如果满⾜条件,就执⾏⽬标(target)中的规则或者特定值。
如果不满⾜条件,就判断下⼀条Rules。
⽬标值(Target Values)在target⾥指定的特殊值:ACCEPT – 允许防⽕墙接收数据包DROP – 防⽕墙丢弃包QUEUE – 防⽕墙将数据包移交到⽤户空间RETURN – 防⽕墙停⽌执⾏当前链中的后续Rules,并返回到调⽤链(the calling chain)中。
网络通讯与安全本栏目责任编辑:冯蕾Linux由于其开放源代码的特性,近年来得到迅猛发展,Lin-ux2.4后内核中包含的Netfilter/IPtables集网络互联与防火墙功能于一身,利用其强大灵活的NAT、防火墙功能构建起的透明网关,因为性价比高,所以被大量的中小企业用来代替路由器做内网与互联网的连接设备。
但建立在标准发行版Linux内核基础上的透明网关,支持的功能有限,如现在流行的BT,其建立连接没有固定端口,所以使用标准发行版Linux内核的透明网关通过端口过滤对BT控制是很难的。
透明网关必须随着新协议新应用的发展,不断完善并增强功能,这样才能持续有效的发挥其强大的功能。
好在Linux是一个开放的系统,其Netfilter/IPtables是内核中的一项重要功能,它的发展也是非常快的,几乎每天都有新功能模块在网上公布,这些功能模块放在补丁文件中,只要将这些补丁文件下载,然后用它们给内核及Netfilter/IPtables打上补丁就会将新功能增加进来,如此一来,Netfilter/IPtables可以无限扩展,功能会越来越强大灵活。
以下笔者具体介绍如何通过给系统内核与IPt-ables打补丁来扩充新功能及新加功能的简单应用。
1添加新功能模块前的准备工作因为Netfilter是LINUX内核的一部分,因此通过给Netfilter、内核、IPtables打补丁才可以添加和使用新功能模块,打补丁前需要得到以下几个软件包:(1)内核源码软件包,可以从系统安装光盘中得到,笔者使用的是RedhatEL3和Centos3.4,内核源码包为Kernel-source-2.4.21-27.0.1.EL.i386.rpm。
(2)Netfilter补丁包,除了七层协议过滤模块外,大部分新功能模块都在此补丁包中,有专门组织在维护和发布新补丁包,几乎每天都有新的Netfilter补丁包发布,在ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/可以下载此补丁包,笔者下载的补丁包为Patch-o-Matic-ng-20050307.tar.bz2,从文件名可以看到此补丁包是2005年3月7日发布的。
(3)Netfilter七层协议过滤补丁包,此包包含使用七层协议过滤要对Netfilter和IPtables打的补丁,笔者下载的补丁包为Netfil-ter-layer7-v1.1.tar.gz,在http://www.cnfreeos.org/software/linfw_src/有此补丁包下载。
(4)七层协议过滤的协议描述文件包,进行七层协议过滤还必须用到七层协议的描述文件,笔者下载的文件包为l7-protocols-2005-03-14.tar.gz,在http://www.cnfreeos.org/software/linfw_src/有此文件包下载。
(5)iptables源码软件包,笔者下载的软件包为iptables-1.3.1.tar.bz2,在ftp://ftp.netfilter.org/pub/iptables/snapshot/有此源码包的下载。
将以上5个软件包放到/usr/src目录中,通过以下5条命令将其一一解压:命令1:rpm-ivhkernel-source-2.4.21-27.0.1.EL.i386.rpm命令2:tar-jxvfiptables-1.3.1.tar.bz2命令3:tar-jxvfpatch-o-matic-ng-20050307.tar.bz2命令4:tar-zxvfnetfilter-layer7-v1.1.tar.gz命令5:tar-zxvfl7-protocols-2005-03-14.tar.gz经过解压后,在/usr/src下生成5个目录,linux-2.4目录存放的是内核源码,patch-o-matic-ng-20050307目录存放的是Netfil-ter补丁文件,netfilter-layer7-v1.1目录存放的是七层协议过滤对Netfilter和IPtables的补丁文件,iptables-1.3.1目录存放的是ipta-bles的源码文件,l7-protocols-2005-03-14目录存放的是七层协议过滤的协议描述文件。
2IPtables新功能模块的添加可以通过两种方式进行新功能模块的添加,即重新编译内核方式和不重新编译内核方式。
以下将列出添加模块的具体过程与命令,命令后括号中内容为该命令的说明。
2.1重新编译内核方式步骤一、给Netfilter打补丁命令1:cd/usr/src/linux-2.4命令2:makemrproper命令3:makemenuconfig(什么都不做,保存退出,生成.config文件)命令4:cd/usr/src/patch-o-matic-ng-20050307命令5:KERNEL_DIR=/usr/src/linux-2.4IPTABLES_DIR=/usr/src/iptables-1.3.1./runmeiprangetimestringipp2pmport(注意:此命令很长,它实际上是由三部分构成,每个部分之间用空格格开,KERNEL_DIR=/usr/src/linux-2.4用于设定内核源码所在目录,IPT-ABLES_DIR=/usr/src/iptables-1.3.1用于设定IPTABLES源码所在目录,./runme是打补丁的主程序,后面跟的iprange是具体要打的补丁模块名,如string是内容过滤、ipp2p是P2P协议过滤等。
实际收稿日期:2007-03-23IPtables新功能模块的添加与应用刘朝新(安徽财经大学现代教育技术中心,安徽蚌埠233041)摘要:Netfilter是Linux内核实现数据包过滤、处理、NAT等功能的结构框架,Linux2.4、2.6内核中提供了一个简洁、强大的工具IPta-bles来实现Netfilter的各项功能,但各Linux发行版的IPtables只包含一些基本功能,文中讨论了通过添加新功能模块扩展IPtables功能及对新加功能的具体应用。
关键词:Netfilter;IPtables;内容过滤;P2P过滤;七层协议过滤中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)08-20377-02TheAdditionandApplicationofNewIPtables'sFunctionalModuleLIUChao-xin(ModernEducationTechnologyCenterofAnhuiUniversityofFinanceandEconomics,Bengbu233041,China)Abstract:Netfilterisastructuralframework,bringinglinuxinner-core’sfunctionsoffiltering,processingandNATect.intotruth,whicharedirectedatdatapackages.Inner-coresoflinux2.4and2.6providesaneatandpowerfultool—IPtables,whichistofulfilvariousfunctionsofNetfilter.However,alltheIPtablesintheissuedversionsoflinuxonlycontainsomeoftheelementaryfunctions.Therefore,thispassageisdedi-catedtodiscussingtheextendedfunctionsofIPtablesbyaddingnewfunctionalmodulesandthespecificapplicationofthenewly-addedfunc-tions.Keywords:Netfilter;IPtables;ContentFiltering;P2PFiltering;Filteringof7-levelProtocol377网络通讯与安全本栏目责任编辑:冯蕾电脑知识与技术上补丁包中还有很多补丁模块,使用./runmebase和./runmeextra命令可以按照提示一个一个的选择要打的补丁,按Y表示选中当前的补丁,如果发现和内核源码有冲突或者其他原因打不上,可以按n跳过此模块继续向下选择,直到结束。
笔者只选择了iprange、time、string、ipp2p、mport这几个最有用的模块举例说明,其它模块在此就不一一举例说明了。
)步骤二、给内核和iptables打七层协议过滤补丁命令1:cd/usr/src/linux-2.4命令2:patch-p1</usr/src/netfilter-layer7-v1.1/for_older_ker-nels/kernel-2.4-layer7-0.9.1.patch(因为笔者选用的RedhatEL3用的是2.4的内核,所以此处要用2.4的补丁,如果用的是2.6的内核,就必须选用2.6的补丁,在netfilter-layer7-v1.1目录下有相应的2.6补丁)命令3:cd/usr/src/iptables-1.3.1命令4:patch-p1</usr/src/netfilter-layer7-v1.1/iptables-lay-er7-1.1.patch(为iptables打上七层协议过滤补丁)命令5:cd/usr/src/iptables-1.3.1/extensions/命令6:chmod+x.layer7-test(此处一定要将.layer7-test设成可执行属性,不然后面运行编译安装iptables时会因为报错,而不能进行下去)步骤三、选取新加功能模块到Netfilter中,并重新编译内核命令1:cd/usr/src/linux-2.4命令2:makemenuconfig(运行此命令后,在菜单中选取相应的模块功能,确认[*]Promptfordevelopmentand/orincompletecode/drivers要选中,然后进入Networkingoptions,回车进入IP:NetfilterConfiguration,会看到有新增加的iprange、time、string、ipp2p、mport、layer7功能模块,选中它们为<M>,保存、退出,这样就生成了新的内核配置文件,下面编译内核就是以此配置文件为基础的。
命令3:makedep(建立依赖关系)命令4:makeclean(将一些原来编译的中间文件清除)命令5:makebzImage(生成新的内核文件)命令6:makemodules(重新编译内核中的各功能模块,刚选中的那些Netfilter新功能模块就是在这步进行编译的)命令7:makemodules_install(将重新编译的功能模块安装系统相应的目录)命令8:makeinstall(将新编译的内核安装到/boot目录中,并将新内核加到启动选项中)然后重新启动系统,在启动选项中,选新内核项启动系统,系统启动后用depmod-a重新建立模块依赖,一定不要在重启系统前用此命令,因为旧内核运行状态下,很多老模块还在,用此命令会报很多错,新内核启动后,再用此命令就是按新内核建模块依赖了。