Linux防火墙iptables/netfilter(二)

上一篇文章我们说了一些iptables/netfilter的基础知识,本文我们来介绍一下iptables的规则编写。Iptables的规则可以概括的分为两个方面:1、报文的匹配条件;2、匹配到后的处理动作。其中匹配条件分为基本匹配条件和扩展匹配条件,处理动作分为内建处理机制和自定义处理机制。这里需要注意的一点是,自定义处理机制(自定义链)不在内核中所以报文是不会经过自定义链的,它只能被内建机制引用即当做处理的子目标。

Iptables说白了就是一个规则管理工具,用于生成、检查和自动实现规则。规则和链都有自己的计数器,用于统计被匹配到的报文数。一般链上都有默认策略,默认的默认策略是允许所有,如果我们要阻挡某报文就定义阻止策略就可以,类似黑名单;也可以更改默认默认策略,改为拒绝所有,然后开放我们想要开放的内容,类似白名单。因为5个链工作在内核之上所以策略一旦启用将立即生效,但不会永久有效,想要永久有效需要写到配置文件之中。接下来我们看看iptables的命令结构:

iptables的基本语法格式:

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

说明:表名、链名用于指定 iptables命令所操作的表和链(我们上篇博客中提到的四表五链),命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

iptables命令的管理控制选项:
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

防火墙处理数据包的四种方式:

ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

上文也提到iptables写的规则无法永久生效,以下两种方法可以解决这个问题:

iptables-save > /etc/sysconfig/iptables
service iptables save

它能把规则自动保存在/etc/sysconfig/iptables中。

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。

接下来我们看通过一些具体案例深入了解一下iptables的使用:

-L:list,列出指定链上的所有规则;
-n: numeric,以数字格式显示地址和端口号,即不反解;
-v: verbose,详细格式,显示规则的详细信息,包括规则计数器等;
-vv:
-vvv:
--line-numbers: 显示规则编号;
-x: exactly,显示计数器的精确值
pkts bytes target     prot opt in     out     source               destination
pkts: 被本规则所匹配到的包个数;
bytes:被本规则所匹配到的所包的大小之和;
target: 处理目标 (目标可以为用户自定义的链)
prot: 协议 {tcp, udp, icmp}
opt: 可选项
in: 数据包流入接口
out: 数据包流出接口
source: 源地址
destination: 目标地址;

在规则匹配中分为:

通用匹配

[!] -s, --src, --source  IP|Network:检查报文中的源IP地址;叹号表示取反,以下几个都可以使用
-d, --dst, --destination:检查报文中的目标IP地址;
-p, --protocol:检查报文中的协议,即ip首部中的protocols所标识的协议;tcp、udp或icmp三者之一;
-i, --in-interface:数据报文的流入接口;通常只用于PREROUTING, INPUT, FORWARD链上的规则;
-o, --out-interface:检查报文的流出接口;通常只用于FORWARD, OUTPUT, POSTROUTING链上的规则;

扩展匹配:使用iptables模块实现的进一步检查

隐式扩展:就是在通用匹配的基础上使用-p指定了协议类型,则-m选项指明模块就可以省略

tcp:
--dport PORT[-PORT] #可以指定连续端口,但不能指定离散端口,UDP也一样
--sport
--tcp-flags LIST1 LIST2
LIST1: 要检查的标志位;
LIST2:在LIST1中出现过的,且必须为1标记位;而余下的则必须为0;
例如:--tcp-flags syn,ack,fin,rst syn
--syn:用于匹配tcp会话三次握手的第一次;
udp:
--sport
--dport
icmp:
--icmp-types
8: echo request
0:echo reply
[[email protected] ~]# iptables -I INPUT 1 -s 192.168.1.103 -d 192.168.1.109 -p tcp -m tcp --dport 80 -j DROP #这里的-m tcp可以省略所以就叫做隐式扩展
[[email protected] ~]# iptables -I INPUT 1 -s 192.168.1.103 -d 192.168.1.109 -p tcp --dport 22 -j ACCEPT

显式扩展:必须使用-m指明了扩展模块,使用rpm -ql iptables查看到的诸如/lib64/xtables/libxt_iprange.so的模块完成的功能

multiport: 多个离散端口的同时匹配;--dports, --sports, --ports,最多同时指定15个端口
iprange:地址范围的匹配(不适于写为网络地址);--src-range, --dst-range
string: 字符串匹配;--string, --algo {kmp|bm}, --hex-string "HEX_STRING":HEX_STRING为编码成16进制格式的字串;#algorithms是算法的意思,kmp|bm是两种编码算法
time: 基于时间进行匹配;--datestart, --datestop, --timestart, --timestop, --weekdays
connlimit: 做连接数限制,对每IP能够发起并发连接数作匹配;--limit-above
limit: 做速率匹配,令牌桶算法;--limit, --limit-burst#空闲突发访问量的限制

这是我对以上几种扩展的演示结果,大家看看能否从中看出对应的iptables命令是什么呢。

附ICMP类型表:

在讲接下来的扩展匹配条件之前我们有必要说一下TCP的有限状态机,有限状态机是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

以上这三幅图已经详细的描述了TCP三次握手和四次挥手以及有限状态机,我就不再进行解释了。我们知道IP协议是无状态的,当有很多个IP与我们的主机连接时我们如何判断某个连接来自哪个IP呢?这就需要netfilter在内存中保存一张表记录跟踪了每个连接的信息,不过这个空间如果被打满那么之后的请求就会被拒绝,所以高并发的时候慎用。

connection template:连接追踪模板,用于记录各连接及相关状态;基于IP实现,与是否为TCP协议无关;通过倒计时的方式删除条目;

记录连接的状态:

NEW: 新建立的连接,连接追踪模板中无相应的条目时,客户端第一次发出的请求;
ESTABLISHED:NEW状态之后,边距追踪模板中的条目删除之前所进行的通信过程,都称为ESTABLISHED;
RELATED:相关联的连接,如ftp协议的命令连接与数据连接即为相关联的连接;
INVALIED: 无法识别的状态;

我们说了这么多的原理,是为了说明iptables中state扩展的,这个扩展有一个大大用处就是阻止反弹式木马,反弹式木马是什么大家可以自行去了解,我们简单的说一下就是它可以从主机防火墙某个以开放的监听端口当做Client端口去连接远程主机以实现控制被攻陷的肉鸡。比如80端口的出去的连接必须是对Client请求的响应而不能是NEW连接。

这个是我使用state模块完成的功能:能够使用ssh登录和yum功能的网络epel源,开放http、https、ftp服务(被动连接,需要安装一个ftp模块)。就这几个启用连接追踪功能,带状态检测的包过滤防火墙就完成了一大堆功能。

好了我们的filter表就说到这里了,接下来我们说一下nat表。NAT叫做网络地址转换,说白了就是把IP首部中的原地址或者目标地址更改一下以达到通往目的地的效果。早期发明NAT是为了在网络中隐藏自己真实的IP,以实现一定的安全保护功能,后来当IPv4地址耗尽时,无心插柳,解决了IPv4地址紧缺的问题。NAT大致分为四种情况:源地址转换、目标地址转换、端口转换,全地址转换。

源地址转换:将内网地址通过NAT Server转换为公网地址访问互联网
目标地址转换:将互联网访问NAT Server的公网地址转换内部Server的私有地址
端口转换:在目标地址转换的基础上将互联网访问NAT Server的端口转换成内部Server真正监听的端口
全地址转换:就是同时做源地址和目标地址转换,类似于代理服务器,但与之又不相同。

上面的拓扑图中192.168.1.0/24网段是外网地址,192.168.80.0/24网段是内网地址。

源地址转换测试:

目标地址转换测试:

OK,我们的iptables/netfilter的基础应用就说到这里了,iptables主要是工作在网络层,那么在linux中还有有个叫tcp_wrapper的控制工具组件,它他利用一些tcp_wrapper的库完成在传输层对数据的过滤,有兴趣的朋友可以去了解一些,我就不再过多的介绍了。如有错误敬请指正。

时间: 2024-10-11 00:05:40

Linux防火墙iptables/netfilter(二)的相关文章

linux防火墙--iptables(二)

五.filter过滤和转发 a.打开内核的IP转发 # sysctl -w net.ipv4.ip_forward=1 或 # echo 1 > /proc/sys/net/ipv4/ip_forward b.基本匹配条件 ·通用匹配 → 可直接使用,不依赖于其他条件或扩展 → 包括网络协议.IP地址.网络接口等条件 ·隐含匹配 → 要求以特定的协议匹配作为前提 → 包括端口.TCP标记.ICMP类型等条件 类别 选项 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址      

Linux防火墙iptables/netfilter(一)

防火墙大家都不陌生,或者说都听说过,现实中的防火墙是将一个区域内的火隔离开来使之不蔓延到另一个区域,计算机领域的防火墙与之功能类似,也是为了隔离危险.在如今广阔的互联网领域内,我们一般会相信一个叫做"黑暗森林"的法则.对于这个法则大家可以去搜索一下,它是在<三体>系列小说中写出来的,大致意思是在黑暗丛林中我们无法判断对方对自己是否有恶意, 对方也无法判断我们是否有恶意,所以一见面就把对方灭掉.互联网中的恶意攻击者太多了,我们无法确定它们都是水更无法把它们灭掉,但是我们可以把

Linux防火墙iptables/netfilter(三)

我们前面两篇已经把iptables介绍的比较充分了,今天来说一个iptables对layer 7的实践.我们说过iptables/netfilter工作在内核空间是不支持应用层协议的,但是诸如QQ.MSN.迅雷等应用我们是无法在传输层或者网络层完全封闭它们的,因为它们非常狡猾发现自己的端口被封掉之后会用其它打开的端口进行传输数据,所以只有在7层中封闭它们才行.所以有人就针对这种情况对iptables/netfilter进行了二次开发,写了一些补丁,我们打上这些补丁可以使iptables支持7层协

linux防火墙--iptables(三)

七.SNAT源地址转换 ·Source Network Address Translation ·修改数据包的源地址 ·仅用于nat表的POSTROUTING链 Example:局域网共享公网IP上网 ·配置的关键策略 → 做完路由选择后,针对来自局域网.即将从外网接口发出去的数据包,将其源IP地址修改为 网关的公网IP地址  # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 69.166

关于Linux防火墙iptables的面试问答

关于Linux防火墙'iptables'的面试问答 Nishita Agarwal是Tecmint的用户,她将分享关于她刚刚经历的一家公司(印度的一家私人公司Pune)的面试经验.在面试中她被问及许多不同的问题,但她是iptables方面的专家,因此她想分享这些关于iptables的问题和相应的答案给那些以后可能会进行相关面试的人.       所有的问题和相应的答案都基于Nishita Agarwal的记忆并经过了重写.   "嗨,朋友!我叫  Nishita Agarwal.我已经取得了理学

Linux防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

linux 防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

Linux防火墙(Iptables)的开启与关闭

Linux防火墙(iptables)的开启与关闭 Linux中的防火墙主要是对iptables的设置和管理. 1. Linux防火墙(Iptables)重启系统生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2.Linux防火墙(Iptables) 即时生效,重启后失效 开启: service iptables start 关闭: service iptables stop 需要说明的是对于Linux下的其它服务都可以用以上命令执行

Linux服务器集群架构部署搭建(二)linux防火墙iptables使用及NAT共享

第一章 外网防火墙部署企业应用 1.1 生产中iptables的实际应用 ①iptables是基于内核的防火墙,功能非常强大,基于数据包的过滤!特别是可以在一台非常低的硬件配置下跑的非常好.iptables主要工作在OSI七层的2.3.4层.七层的控制可以使用squid代理+iptables. ②iptabes:生产中根据具体情况,一般,内网关闭,外网打开.大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,所以大并发的情况下,我们使用硬件防火墙的各方面做的很仔细.s