Linux防火墙之iptables(上)

内容预知

1. iptables防火墙的相关知识 

 1.1 防火墙的概念

1.2 iptables的简介 

1.3 netfilter/iptables 的关系 

 2. iptables中的四表五链

2.1  四表五链的关系

2.2 iptables中的四表 

2.3  iptables中的五链

2.4 数据包到达防火墙的匹配流程

2.4.1 规则链之间的匹配顺序

2.4.2 规则链内的匹配顺序

2.4.3 内核中数据包的传输过程

 3. iptables的配置

 3.1 centos6的图形化界面设置

3.2   iptables命令行的使用(centos7和真实环境)

3.2.1 iptables的安装

3.2.2  使用iptables命令行配置规则 

 4. iptables命令的规则配置运用

4.1 查看iptables的规则 

 4.1.1 粗略查看默认规则

4.1.2 指定表查看(指定表中链的查看) 

4.2 添加规则 

4.2.1 末尾追加规则 (在指定的表和链中)

4.2.2 在指定链的序号上追加规则 

4.3 删除规则 

 4.3.1 序号删除

4.3.2 内容匹配删除(有两个相同的则作用为去重) 

4.4 修改规则 (不推荐使用)

4.5   修改默认策略

 总结


1. iptables防火墙的相关知识 

 1.1 防火墙的概念

 

防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 

 

  • 硬件防⽕墙:通过硬件和软件的组合,基于硬件的防⽕墙保护整个内部网络安全。
  • 软件防⽕墙:通过纯软件,单独使⽤软件系统来完成防⽕墙功能,保护安装它的系统。

 

另外:因为iptables是开源的,就安全系数来讲软件防火墙只能用于辅助硬件防火墙,无法做到真正的安全效果。此外软件防火墙也是需要占用硬件资源运行 

 

防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。

 

Linux系统自带的软件防火墙:

  • iptables:Centos 5/6 系统默认防火墙
  • firewalld:Centos 7/8 系统默认防火墙

 

 

1.2 iptables的简介 

 

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

防火墙在做数据包过滤时决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

 

 

1.3 netfilter/iptables 的关系 

 

netfilter

  • 属于的“内核态”(Kernel Space, 又称为内核空间)的防火墙功能体系。
  • 是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

iptables

  • 属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。
  • 是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。

 

 两者之间的关系:


IPtable和netfilter共同组成了一个防火墙系统,iptables只是Linux防火墙的管理工具——命令行工具,或者也可以说是一个客户端的代理,netfilter是安全框架,并且真正实现防火墙功能的是 netfilter,它是Linux内核中的一部分。这两部分共同组成了包过滤防火墙,并且是免费使用,可以实现完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
 

 Linux防火墙之iptables(上)_第1张图片

 

 

 2. iptables中的四表五链

netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。

表中所有规则配置后,立即生效,不需要重启服务。

 

2.1  四表五链的关系

 

 规则表的作用:容纳各种规则链

规则链的作用:容纳各种防火墙的规则

简单记忆就是:表中有链,链中有规则

Linux防火墙之iptables(上)_第2张图片

 

2.2 iptables中的四表 

 

表名 作用
raw 确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING
mangle 修改数据包内容,用来做流量整形,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
nat 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口(通信五元素)。包含三个规则链,OUTPUT、 PREROUTING、 POSTROUTING
filter 负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、 FORWARD、 OUTPUT

 在iptables中 raw和mangle 表的运用相对较少

 

 

2.3  iptables中的五链

 

链名 作用
INPUT 处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT 处理出站数据包,一般不在此链上做配置。
FORWARD 处理转发数据包,匹配流经本机的数据包。
PREROUTING 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
POSTROUTING 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

 

2.4 数据包到达防火墙的匹配流程

 

规则表中的优先顺序:raw >mangle>nat>filter

Linux防火墙之iptables(上)_第3张图片

2.4.1 规则链之间的匹配顺序

 

类型1:主机型防火墙

入站数据(来自外界的数据包,且目标地址是防火墙本机): PREROUTING --> INPUT -->本机的应用程序

出站数据(从防火墙本机向外部地址发送的数据包):本机的应用程序---->OUTPUT ----->POSTROUTING

类型2:网络型防火墙 

转发数据(需要经过防火墙转发的数据包):PREROUTING -->FORWARD -->POSTROUTING

 

2.4.2 规则链内的匹配顺序

 

自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)

若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

 

 

2.4.3 内核中数据包的传输过程

 

  1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包是进入本机的,数据包就会到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后返回给发送方。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会经过FORWARD链,然后到达POSTROUTING链输出。

 3. iptables的配置

 3.1 centos6的图形化界面设置

 图形化界面的设置(centos6)

使用图形化管理工具system- config- firewall

Linux防火墙之iptables(上)_第4张图片

3.2   iptables命令行的使用(centos7和真实环境)

 

3.2.1 iptables的安装

 

第一步:关闭 firewalld,且设置开机不自启 

 

 Centos 7默认使用firewalld防火墙,没有安装iptables, 若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables 。

[root@localhost ~]#systemctl disable --now firewalld

Linux防火墙之iptables(上)_第5张图片

第二步:安装 iptables ,启动服务

[root@localhost ~]#yum install -y iptables-services  iptables

 Linux防火墙之iptables(上)_第6张图片

 

 

[root@localhost ~]#systemctl start iptables

 Linux防火墙之iptables(上)_第7张图片

 

3.2.2  使用iptables命令行配置规则 

 

 命令格式:
 iptables  [-t 表名]    管理选项    [链名]     [匹配条件]     [-j 控制类型]

 

注意事项:

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 控制类型使用大写字母,其余均为小写

 

Linux防火墙之iptables(上)_第8张图片 

 

常用的控制类型:

 

控制类型 作用
ACCEPT 允许数据包通过(默认)
DROP 直接丢弃数据包,不给出任何回应信息
REJECT 拒绝数据包通过,会给数据发送端一个响应信息
SNAT 修改数据包的源地址
DNAT 修改数据包的目的地址
MASQUERADE 伪装成一个非固定公网IP地址
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包

 

DROP 和REJECT的区别前者是直接丢弃传输过来的数据包,并且不给予回应,使访问主机卡在访问页面没有任何提示。后者是拒绝该数据包的通过,并且给予访问主机提示,该访问被拒绝。 

 

常用的管理选项:

 

常用的管理选项 作用
-A 在指定链的末尾追加(--append)一条新的规则
-I(大写i) 在指定链的开头插入(--insert)一条新的规则,未指定序号时默认作为第一条规则
-R 修改、替换(--replace) 指定链中的某一条规则,可指定规则序号或具体内容
-P 设置指定链的默认策略(--policy)
-D 删除(--delete) 指定链中的某一条规则,可指定规则序号或具体内容
-F 清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链
-L 列出(--list) 指定链中所有的规则,若未指定链名,则列出表中的所有链
-n 使用数字形式(--numeric) 显示输出结果,如显示IP地址而不是主机名
-v 显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers 查看规则时,显示规则的序号

匹配的条件:

 

匹配的条件 作用
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址
-d 指定要匹配的数据包的目的IP地址
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
–sport 指定源端口号
–dport 指定目的端口号

 

 4. iptables命令的规则配置运用

4.1 查看iptables的规则 

 

 4.1.1 粗略查看默认规则

[root@localhost ~]#iptables   -L

Linux防火墙之iptables(上)_第9张图片 

[root@localhost ~]#iptables   -nL

 注意:当-nL同时使用时,n一定要在L 的前面,否则会报错,使用-vnL时也是如此,L要在最后面

Linux防火墙之iptables(上)_第10张图片

 

4.1.2 指定表查看(指定表中链的查看) 

[root@localhost ~]#iptables -t nat  -vnL

 

Linux防火墙之iptables(上)_第11张图片 

 

[root@localhost ~]#iptables -t nat  -vnL  INPUT

Linux防火墙之iptables(上)_第12张图片 

 

4.2 添加规则 

 

 添加规则的两个常用选项:

 

-A,在末尾追加规则。

-I,在指定位置前插入规则。如果不指定,则在首行插入。

 

 

4.2.1 末尾追加规则 (在指定的表和链中)

 

注意:iptables  -F的清空虽然方便但是一定要在 规则表的默认策略为允许的时候使用,如果

默认为drop会导致远程连接中止,只有重启原服务器才能解决

 

如果仅仅只需要清空一条链的规则,还要保存其他链的规则,就要指定链来清除(-t) 

 

[root@localhost ~]#iptables -F
[root@localhost ~]#iptables  -nL
[root@localhost ~]#iptables  -t filter  -A INPUT   -p icmp  -j REJECT 
[root@localhost ~]#iptables  -nL

Linux防火墙之iptables(上)_第13张图片 

 测试结果:

Linux防火墙之iptables(上)_第14张图片

 

同样的,当我将拒绝icmp的规则设置在OUTPUT链时,同样无法ping通,而且没有提示的回复信息,因为数据包在回返的路上 被拒绝通过.

 Linux防火墙之iptables(上)_第15张图片

 

4.2.2 在指定链的序号上追加规则 

 

[root@localhost ~]#iptables  -t filter  -A INPUT   -p icmp  -j REJECT 
[root@localhost ~]#iptables  -t filter  -I  INPUT   -p icmp  -j ACCEPT 
[root@localhost ~]#iptables  -nL  --line-numbers 
[root@localhost ~]#iptables  -t filter  -I  INPUT 2   -p icmp  -j DROP
[root@localhost ~]#iptables  -nL  --line-numbers 

 

Linux防火墙之iptables(上)_第16张图片 

测试:使用icmp协议ping防火墙主机 

Linux防火墙之iptables(上)_第17张图片

调换规则顺序再次测试 :

 Linux防火墙之iptables(上)_第18张图片

测试结果:

 Linux防火墙之iptables(上)_第19张图片

 

 

4.3 删除规则 

 

 -D删除  :

1.根据序号删除内容

2.精准匹配设置的规则进行删除,按照内容删除,如果有两个重复的规则,则删除序号较小的

 

 4.3.1 序号删除

注意:按照序号删除时一定要保证删除的序号为已有序号,否则报错 

[root@localhost ~]#iptables -D INPUT 2

Linux防火墙之iptables(上)_第20张图片

 

4.3.2 内容匹配删除(有两个相同的则作用为去重) 

 

第一次匹配删除: 

[root@localhost ~]#iptables  -nL  --line-numbers 
 
[root@localhost ~]#iptables -D INPUT -p icmp  -j DROP
[root@localhost ~]#iptables  -nL  --line-numbers 

 

Linux防火墙之iptables(上)_第21张图片 

第二次匹配删除:

[root@localhost ~]#iptables -D INPUT -p icmp  -j DROP

Linux防火墙之iptables(上)_第22张图片

 

总结注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则,直到删除最后一条时,才能将该规则全部清除 。且一定要报错该匹配的内容存在,不然报错

 

4.4 修改规则 (不推荐使用)

 

 -R 直接修改。

为了保险起见,我们可以尝试着先添加一条新的规则,确保新规则不会带来任何不利的影响再删除旧的规则(也能达到替换的效果)

[root@localhost ~]#iptables -R INPUT 1 -p icmp -j ACCEPT

 

Linux防火墙之iptables(上)_第23张图片 

 

4.5   修改默认策略

 

 如图,默认策略是指四表五链中链的默认策略,本图中表示INPUT  ,FORWARD,OUTPUT, filter三条链的默认值为ACCEPT

就像是设定黑名单一样,默认其他的协议操作都是允许的,只有指定加入的且声明权限的为(DROP 或 REJECT)是拒绝禁止的对象。 

Linux防火墙之iptables(上)_第24张图片

而当我们将其修改为REJECT或则DROP,就类似于白名单(只要加入且声明权限为ACCEPT)是允许操作的协议对象,其他均为禁止对象 

 

[root@localhost ~]#iptables -P INPUT DROP  

 

Linux防火墙之iptables(上)_第25张图片 

Linux防火墙之iptables(上)_第26张图片 

 

此时的解决方案有三种:

第一种: 我的防火墙设置只是临时设置,并为保存,重启服务器即可

第二种:操作服务器,重启iptables服务 

第三种:  进入机房操作该服务器(将设置恢复,重新修改规则)

 Linux防火墙之iptables(上)_第27张图片

 

xshell可重新连接:

Linux防火墙之iptables(上)_第28张图片 

 总结

 1. 熟知iptables防火墙数据包进入的流程,且清楚掌握四表五链的关系

2. 灵活运用iptables增删改查命令制定相应安全策略规则

3.使用清空规则(和修改默认策略),一定要慎用。要反复确认服务器的业务和远程连接等服务器需要进行的操作不受干扰和的情况使用

 

 

 

 

 

你可能感兴趣的:(Linux安全运维,linux中软件安装,linux,服务器,运维,网络,云计算)