企业级iptalbes防火墙
一、iptables介绍
Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。
netfilter:内核态,即不以文件和形式存在(kernal space)的防火墙。--是实现防火墙的功能
iptables:用户态,在/sbin/iptables存在(User space)的防火墙。操作上二者没有区分。
用户和内核交互的一个工具就是iptables。
iptables主要工作在OSI七层的3.4层。七层的控制可以使用squid代理+iptables。
1.1、iptables工作原理分类
主机防火墙:主要是用来防范单台主机的进出报文;
网络防火墙:工作与一个网络的边缘,能够实现对进出本网络的所有主机报文加以防护;
iptables缺点:
(1)防火墙虽然可以过滤互联网的数据包,但却无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙没有作用。
(2)电脑本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙过滤,从而入侵电脑。
(3)防火墙无法有效阻挡病毒攻击,尤其是隐藏在数据中的病毒。
(4)正常状况下,所有互联网的数据包软件都应经过防火墙的过滤,这将造成网络交通的瓶颈。例如在攻击性数据包出现时,攻击者会不时寄出数据包,让防火墙疲于过滤数据包,而使一些合法数据包软件亦无法正常进出防火墙。
PS:没有绝对安全的操作系统,虽然防火墙有这些缺点,但还是能阻挡大多数来自于外网的攻击!
1.2、 iptables工作流程
1、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
二、iptables概念
2.1、 什么是 Netfilter/iptables ?
举个例子,如果把Netfilter看成是某个小区的一栋楼。那么表(tables)就是楼里的其中的一套房子。这套房子"表(tables)"属于这栋“Netfilter/iptables”。
2.2、 什么是表(tables)?
表(tables)是链的容器,即所有的链(chains)都属于其对应的表(tables).如上,如果把Netfilter看成是某个小区的一栋楼.那么表(tables)就是楼里的其中的一套房子。
2.3、 什么是链(chains)?
链(chains)是规则(Policys)的容器。接上,如果把表(tables)当作有一套房子,那么链(chains)就可以说是房子里的家具(柜子等)。
2.4、 什么是规则(Policy)?
规则(Policy)就比较容易理解了,就是iptables系列过滤信息的规范和具体方法条款了.可以理解为柜子如何增加并摆放柜子东西等。
基本术语如下表格所示:
Netfilter/iptables | 表(tables**)** | 链(chains**)** | 规则(Policy**)** |
---|---|---|---|
一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里衣服,摆放规则 |
三、iptables 表和链
默认情况下,iptables根据功能和表的定义划分包含三个表,filter,nat,mangle,其每个表又包含不同的操作链(chains )。 实际iptables包含4张表和五个链,主要记住filter即可。
3.1、四个表
必须是小写
raw ------------追踪数据包, ----此表用处较少,可以忽略不计
mangle -------- 给数据打标记,做标记
nat --------网络地址转换即来源与目的的IP地址和port的转换。应用:和主机本身无关
filter --------做过滤的,防火墙里面用的最多的表。
表的应用顺序:raw-》mangle-》nat-》filter
3.2、五个链
五链:(必须是大写)链里面写的是规则。
PREROUTING ---------------------进路由之前数据包
INPUT -----------------就是过滤进来的数据包(输入)
FORWARD -----------------转发
OUTPUT ---------------发出去的数据包
POSTROUTING --------------路由之后修改数据包
所有的访问都是按顺序:
入站:比如访问自身的web服务流量。先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发:经过linux网关的流量.先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。)
出站:源自linux自身的流量.先OUTPUT,然后路由。再给POSTROUTING(是否改IP)。
规则顺序:ACL逐条匹配,匹配即停止。
3.3、四表五链
raw表里面:
PREROUTING
OUTPUT
总结:数据包跟踪 内核模块iptables_raw
mangel表里面有5个链:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
路由标记用的表。内核模块iptables_mangle
nat表里面的链:
PREROUTING
INPUT
OUTPUT
POSTROUTING
转换地址的表(改IP,改端口。当网关使用的linux。保护内外网流量。内核模块叫iptable_nat)
filter表有三个链:重点
INPUT #负责过滤所有目标是本机地址的数据包通俗来说:就是过滤进入主机的数据包
FORWARD #负责转发流经主机的数据包。起到转发的作用
OUTPUT #处理所有源地址是本机地址的数据包通俗的讲:就是处理从主机发出的数据包
总结:根据规则来处理数据包,如转或者丢。就是实现主机型防火墙的主要表。
内核模块 iptable_filter
四、iptables操作
4.1、安装
centos7
启动防火墙
# yum install -y iptables iptables-services
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl start iptables
查看版本:
[root@iptables-server ~]# iptables -V
iptables v1.4.21
配置文件:
/etc/sysconfig/iptables-config
/etc/sysconfig/iptables #记录规则文件
4.2、选项解释
-L:列出一个链或所有链中的规则信息
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-n:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1
-F:清空所有的规则(-X是清理自定义的链,用的少;-Z清零规则序号)
-D:删除链内指定序号(或内容)的一条规则
-P:为指定的链设置默认规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
-t: 指定表名
.... 更多参数可通过--help查看
4.3、参数使用
1.如果不写-t 默认使用filter表
指定表名查看规则
[root@iptables-server ~]# iptables -t nat -L
默认查看规则:
# iptables -L
以数字的形式显示ip和端口与协议
# iptables -nL
显示规则行号
# iptables -nL --line
清空规则:
#iptables -F #(改不了默认)
清空单独的某一个链里面的规则
#iptables -F 链名
保存规则:
# service iptables save
# iptables-svae > /etc/sysconfig/iptables
4.4、iptables语法
iptables -t 表名 动作 [链名] [匹配条件] [-j 控制类型]
-j:控制类型, 通过前面匹配到之后是丢弃还是保留数据包的处理方式: ACCEPT允许,REJECT拒绝,DROP丢弃。
动作:添规则还是删除规则
-p:匹配条件:数据包特征ip,端口等
如果不写-t 默认使用filter表
============================
动作
修改默认规则: -P (大p)
删除规则:-D
修改规则:-R
追加规则: -A 默认追加到链的末尾
自定义链:-N
插入规则:-I (大i),在链的开头(或指定序号)插入一条规则
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
4.5、查看添加删除规则
观察iptable规则添加的方法,删除和查询的方法。本案例并不是为了体验策略效果。
iptables -t filter -A INPUT -p tcp -j ACCEPT #最后一行
iptables -I INPUT -p udp -j ACCEPT #第一行
iptables -I INPUT 4 -p icmp -j ACCEPT #(插入到第4行)#第4行
iptables -L #看一看
iptables -D INPUT 3 # 删除第三行
iptables -F