iptables是一个配置 Linux内核 防火墙的命令行工具,是 netfilter 项目的一部分。
术语 iptables 也经常代指该内核级防火墙。
iptables可以直接配置,也可以通过 CentOS7中的新特性–firewalld 和图形界面配置。
iptables 适用于ipv4, ip6tables 适用于ipv6。
在介绍如何在 Linux中使用与配置iptables
之前,让我们先对防火墙有一个简单的理解:
|
|
iptables发展历史简介
ipfirewall
ipfirewall,简称ipfw
,在FreeBSD上开发的IP封包过滤程式,具备防火墙功能,由FreeBSD开发团队负责维护。它曾被移植到多个平台上,Mac OS X曾经采用它作为预设防火墙,直到Mac OS X 10.7 Lion 采用另一个FreeBSD程式PF。在1994年,艾伦·考克斯曾经将它移植到Linux 1.1上,作为Linux的预设防火墙,直到Linux2.4 采用iptable来取代
ipchains
Linux IP Firewalling Chains,一般称为ipchains,一种自由软件,在Linux内核2.2系列中运作,可用来作为封包过滤与防火墙功能之用。它被设计来取代旧有的ipfwadm,在Linux内核2.4系列中被iptables取代。
iptables
iptables,一个运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的流动与转送。在大部分的Linux系统上面,iptables是使用/usr/sbin/iptables来操作,文件则放置在手册页(Man page)底下,可以通过 man iptables 指令获取。通常iptables都需要内核层级的模块来配合运作,Xtables是主要在内核层级里面iptables API运作功能的模块。因相关动作上的需要,iptables的操作需要用到超级用户的权限。
目前iptables系在2.4、2.6及3.0的内核底下运作,旧版的Linux内核(2.2)使用ipchains及ipwadm(Linux 2.0)来达成类似的功能,2014年1月19日起发行的新版Linux内核(3.13后)则使用nftables取而代之。
iptables其实应该叫netfilter/iptables
它实际上由两个组件netfilter
和 iptables
组成。
netfilter
组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables
组件是一种规则编写工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables是定义规则的工具
iptables本身并不算是防火墙。它定义的规则,可以让内核空间当中的 netfilter 来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是 tcp/ip
的协议栈经过的地方。
而这个tcp/ip
协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter
(网络过滤器)
Hook functions
在Linux的内核空间中有五个位置可以对数据包进行过滤:
由上图可以看出:
一个数据包经过时,必须经过这五个关卡中的其一个或多个,而每个关卡都可以做相关的规则
来进行限制,而这个关卡就叫做Chain(链)
,每个关卡都会通过数据包的特征来进行判断(IP、port等)
iptables的表有四种,顾名思义,每个表的名字都已经高度概括了其功能,即filter表
、nat表
、mangle
表和raw表
,分别用于实现包过滤(防火墙),网络地址转换、包重构(修改)和数据跟踪处理,而每个表又定义了不同的链组合:
|
|
其中表与表之间的优先级也就是:raw
> mangle
> nat
> filter
由图可以分析得出,其中的报文流向也就是:
|
|
根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作做出处理。
匹配条件
基本匹配条件:源地址,目标地址,传输层协议
扩展匹配条件:由扩展模块定义
隐式扩展:无需知名扩展模块的扩展机制
显式扩展:必须指明要调用的扩展模块的扩展机制
处理动作(跳转目标)
基本处理动作:ACCEPT、DROP
扩展处理动作:REJECT、RETURN、LOG、REDIRECT
iptables的链:内置链和自定义链
内置链:对应于hook functions
自定义链接:用于内置链的扩展和补充,可实现更灵活的规则管理机制;自定义链可以设置完之后,添加到内置链中,方便管理
添加规则时需要考量的因素
(1) 实现的功能:用于判定将规则添加至哪个表;
(2) 报文的流经位置:用于判断将规则添加至哪个链;
(3) 报文的流向:判定规则中何为”源“,何为”目标“;
(4) 匹配条件:用于编写正确的匹配规则;
|
|
链: 链上的规则次序,即为检查的次序;因此,隐含一定的应用法则:
|
|
安装
netfilter
:位于内核中的tcp/ip协议栈报文处理框架iptables
:
CentOS5/6:iptables命令生成规则,可保存于文件中以反复装载生效
|
|
CentOS 7:firewalld, firewall-cmd, firewall-config
|
|
iptables命令
iptables是高度模块化的,由诸多扩展模块实现其检查条件或处理动作的
模块文件:
|
|
命令格式
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
-t table
raw表
:
Chain:
|
|
mangle表:
Chain:
|
|
nat表:
Chain
|
|
filter表:
Chain:
|
|
COMMAND
链管理:
|
|
规则管理
|
|
规则显示
|
|
PARAMETER AND MATCH EXTENSIONS
通用匹配
|
|
扩展匹配
可以出现多次,使用多个扩展模块
|
|
隐式扩展
-p tcp
:可直接使用tcp扩展模块的专用选项
|
|
-p udp
:可直接使用udp协议扩展模块的专用选项
|
|
-p icmp
:可直接使用icmp协议扩展模块的专用选项
|
|
显式扩展
必须使用-m
选项指明要调用的扩展模块的扩展机制
man iptables-extensions
查看扩展帮助
以离散或连续的 方式定义多端口匹配条件,最多15个;
支持tcp、udp、udplite、dccp、sctp
|
|
以连续地址块的方式来指明多IP地址匹配条件;
|
|
3、time
This matches if the packet arrival time/date is within a given range.
|
|
4、string(可以检查7层协议) ‘只能对明文编码的协议有效’
This modules matches a given string by using some pattern matching strategy.
Allows you to restrict the number of parallel connections to a server per client IP address (or client address block).
This module matches at a limited rate using a token bucket filter.
|
|
7、state:连接追踪(开启后,大大增强服务器安全性)
The “state” extension is a subset of the “conntrack” module. “state” allows access to the connection tracking state for this packet.
连接追踪机制:
|
|
|
|
Target
-j targetname [per-target-options]
简单target:
ACCEPT, DROP
扩展target:
REJECT
|
|
LOG:记录日志
默认日志信息保存于:/var/log/message
注意:日志规则要放在REJECT和ACCEPT之前
|
|
保存和载入规则
保存:iptables-save > /PATH/TO/SOME_RULE_FILE
重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE
-n, –noflush:不清除原有规则
-t, –test:仅分析生成规则集,但不提交(测试规则是否正常,正常后再重载)
CentOS6使用方法:
|
|
CentOS7使用方法:
|
|
规则优化的思路
使用自定义链管理特定应用的相关规则,模块化管理规则;
|
|
Netfilter-packet-flow详解图(网络配图)
到此为止,iptables的简介和用法已经介绍完毕,下一章,我们会介绍 iptables的进阶用法–NAT地址转换
本文出自Maxie’s Notes博客,转载请务必保留此出处。