Linux防火墙知识简介+命令规则

                           Linux防火墙知识简介+设置

一、什么是防火墙?

防火墙,也称防护墙(Firewall)由Check Point创立者Gil Shwed于1993年发明并引入国际互联网(US5606668(A)。

所谓防火墙是有软件和硬件设备组合而成、在内部网和外部网之间、专用网和公共网之间边界上构造的保护屏障,是一种获取安全性方法的形象说法。他是一种计算机硬件和软件的结合,使internet和intranet之间建立一个安全网关(Security Gateway),从而保护内网免受非法用户侵入。防火墙主要有、服务访问规则、验证工具、包过滤和应用网关4个部分组成。计算机流入流出的所有网络通信和数据包均要经过此防火墙。

二、防火墙的种类有哪些?

逻辑上讲。防火墙大体可以分为主机防火墙和网络防火墙。

主机防火墙:针对单个主机进行防护。

网络防火墙:往往对于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。

从物理上将,防火墙可以分为硬件防火墙和软件防火墙。

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

(1)包过滤防火墙

数据包过滤(package Filtering)技术是在网络层数据包进行选择,选择的依据是系统内过滤的设计逻辑,成文访问控制表(access control lable ,ACL)。通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过。

包过滤防火墙的优点:他对用户来说是透明的,处理速度快切易维护。缺点是,非法用户一旦攻破防火墙,即可对主机的软件和配置漏洞进行攻击。数据包的源地址、目的地址和IP端口号都在数据包的头部,可以轻易的伪造。“IP地址欺骗”是黑客针对该类型防火墙比较常用的攻击手段。

(2)代理服务型防火墙

代理服务(proxy service)也称链路级网关或TCP通道。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,其特点是将所有跨越防火墙的网络通信链路分为两段 。当代理服务器接收到用户对某个站点的访问请求后就会检查请求是否符合控制规则。如果规则允许用户访问该站点,代理服务器就会替用户去对应站点取回所需信息,再转发给用户。,内外网用户的访问都是通过代理服务器上的“链接”来实现的,从而起到隔离防火墙内外计算机系统的作用。此外,代理服务器对过往的数据包进行分析和注册登记,并形成报告,同当当发现有被攻击迹象时,会向网络管理员发出警告并保留攻击记录。

三、使用iptables实现包过滤防火墙

Linux防火墙知识简介+命令规则_第1张图片

3.1 iptables概述及原理

从内核2.4 之后使用全新的内核包过滤管理工具--iptables,这个工具使用户更易于理解其工作原理,更容易被使用,也具有更强大的功能。

iptables只是一个管理内核包过滤的工具,可以加入、修改和删除核心包过滤表格中的规则。实际上真正执行这些过滤规则的是netfileter(Linux核心中的一个通用架构)及其相关模块(如iptables模块和nat模块)

netfilter 是 liunx核心中的一个通用架构,他提供一系列的表(tables),每个表由若干的链组成。每个链由一条或数条规则组成。简单介绍理解,就相当于netFilter是表的容器,表示链的容器,链是规则的容器。

3.3 iptables 的基础知识

Linux防火墙知识简介+命令规则_第2张图片

3.3.1 规则

iptables是按照规则来办事的,所以我们可以聊一下规则,规则其实就是“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中。这些规则分别指定了源地址、目的地址、传输协议(TCP/UDP)和服务类型(如HTTP/FTP/SMTP)等。当数据包和规则匹配时,iptables就根据规则定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改、删除这些规则。

如上图所示:

当客户端访问服务器的Web服务时,客户端发送报文到网卡,而TCP/IP协议栈是属于内核的一部分。所以客户端的信息会通过内核的TCP协议传输到用户空间的web服务中,而此时,客户端报文的目标重点是web服务器所监听的套接字(IP:Port)上。当web服务需要相应客户端请求时,web服务发出的响应报文为客户端,这时,web服务所监听的IP和端口反而成了原点。其实,netfilter才是真正的防火墙,它是内核的一部分。所以我们的防火墙需要达到防火的目的,则需要内核中设置“关卡”。所有进出的报文都需要经过“关卡”,符合放行,不符合阻止。于是就出现了input和output关卡,而这些关卡在iptables中不被成为关卡,而是被成为“链”。

Linux防火墙知识简介+命令规则_第3张图片

如上图,更加仔细的说:

系统缺省的表示“fileter”,该表中包含了INPUT、FORWORD、OUTPUT 3个链每一条链中可以有一条或数条规则,每一条规则都是这样定义的:如果数据包头符合这样的条件,就这样处理这个数据包。当一个数据包达到一个链时,系统就会从第一条规则开始检查。看是否符合该规则所定义的条件,如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条 规则;最后,如果数据包不符合该链中任何一条规则,系统就会根据该链预先定义的策略(policy)来处理该数据包。

当数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链:

(1)数据包的目的地址是本机,则系统将数据包发送往Input链,如果通过规则检查,则该包发给相应的本地进程管理;如果没有通过规则检查,系统将丢弃该包。

(2)数据包的上的地址不是本机,也就是说这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。

(3)数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。

3.3.2 链

为什么“关卡”会被成为链呢?我们知道规则可能不止一条,所以我们可能会看到下面的图就明白了~~该链上的所有规则都要匹配一遍。

Linux防火墙知识简介+命令规则_第4张图片

3.3.3 表的概念

我们把具有相同功能的集合叫做表。所以不同的功能的规则,我们可以放置在不同的表中进行管理。iptables已经给我们定义了4个表,我们定义的功能也逃脱不了这四种定义的范围。

filter:负责过滤功能,防火墙;内核模块:iptables_filter。

nat:network address translation,网络地址转换功能;内核模块:iptable_nat。

mangle:解析报文,做出修改并重新封装;内核模块:iptable_mangle。

raw:关闭nat表上启用的链接追踪机制;iptable_raw。

四、数据经过防火墙的流程

Linux防火墙知识简介+命令规则_第5张图片

 

上面这幅图可以说详细的介绍了整个流程以及路由次序。

我们经常用到的对应关系如下:

PREROUTING:规则存在于 raw表,manager表,nat表。

INPUT:规则存在于 manager表,filter(centos中有nat表,centos6中没有)

FORWORD:规则存在于 manager表,filter。

OUTPUT:规则存在于 raw表,manager表,nat表,filter。

POSTROUTING:规则存在于 manager表,nat表。

表对应规则如图所示:

Linux防火墙知识简介+命令规则_第6张图片

 

五、iptables命令格式


iptables的命令格式较为复杂,一般格式如下:
#iptables [-t 表] -命令 匹配 操作
注:iptables对所有选项和参数都区分大小写!
5.1 表选项
表选项用于指定命令应用于哪个iptables内置表。iptables内置表包括filter表、nat表和mangle表。
5.2 命令选项
命令选项用于指定iptables的执行方式,包括插入规则、删除规则和添加规则等:
-P 或--policy 定义默认策略
-L 或--list 查看iptables规则列表
-A 或--append 在规则列表的最后增加一条规则
-I 或--insert 在指定的位置插入一条规则
-D 或--delete 在规则列表中删除一条规则
-R 或--replace 替换规则列表中的某条规则
-F 或--flush 删除表中的所有规则
-Z 或--zero 将表中所有链的计数和流量计数器都清零
5.3 匹配选项
匹配选项指定数据包与规则匹配所应具有的特征,包括源地址、目的地址、传输协议(如TCP、UDP、ICMP)和端口号(如80、21、110)等:
-i 或--in-interface 指定数据包是从哪个网络接口进入
-o 或--out-interface 指定数据包是从哪个网络接口输出
-p 或--porto 指定数据包匹配的协议,如TCP、UDP
-s 或--source 指定数据包匹配的源地址
--sport 指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口 
-d 或--destination 指定数据包匹配的目标地址
--dport 指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
5.4 动作选项
动作选项指定当数据包与规则匹配时,应该做什么操作,如接受或丢弃等。
ACCEPT 接受数据包
DROP 丢弃数据包
REDIRECT 将数据包重新转向本机或另一台主机的某个端口,通常用此功能实现透明代理或对外开放内网的某些服务
SNAT 源地址转换,即改变数据包的源地址
DNAT 目标地址转换,即改变数据包的目的地址
MASQUERADE IP伪装,即常说的NAT技术。MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP地址是由ISP动态分配的;如果主机的IP地址是静态固定的,就要使用SNAT
LOG 日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员进行分析和排错


六、iptables命令的使用


6.1 查看iptables规则
初始的iptables没有规则,但是如果在安装时选择自动安装防火墙,系统中会有默认的规则存在,可以先查看默认的防火墙规则:
#iptables [-t 表名]  
[-t 表名]:定义查看哪个表的规则列表,表名可以使用filter、nat和mangle,如果没有定论表名,默认使用fliter表
:列出指定表和指定链的规则
:定义查看指定表中哪个链的规则,如果不指明哪个链,将查看某个表中所有链的规则
#iptables -L -n (查看filter表所有链的规则)
注:在最后添加-n参数,可以不进行IP与HOSTNAME的转换,显示的速度会快很多。
#iptables -t nat -L OUTPUT (查看nat表OUTPUT链的规则)
6.2 定义默认策略
当数据包不符合链中任何一条规则时,iptables将根据该链默认策略来处理数据包,默认策略的定义方法如下
#iptables [-t 表名]   
[-t 表名]:定义查看哪个表的规则,表名可以使用filter、nat和mangle,如果没有宝,默认使用filter表
:定义默认策略
:定义查看指定表中哪个链的规则,如果不指明,将查看某个表中所有链的规则
:处理数据包的动作,可以使用ACCEPT(接受)和DROP(丢弃)
#iptables -P INPUT ACCEPT (将filter表INPUT链的默认策略定义为接受)
#iptables -t nat -P OUTPUT DROP (将nat表OUTPUT链的默认策略定义为丢弃)
创建一个最简单的规则范例。对于没有经验和时间的用户而言,设置一个简单而又实用的规则是必要的,最基本的原则是“先拒绝所有数据包,然后再允许需要的数 据包”,也就是说通常为filter表的链定义。一般都将INPUT定义为DROP,这样就可以阻止任何数据包进入,其他项目定义为ACCEPT,这样对 外发送的数据就可以出去。
#iptables -P INPUT DROP
#iptables -P FORWARD ACCEPT
#iptables -P OUTPUT ACCEPT
6.3 增加、插入、删除和替换规则
#iptables [-t 表名] 链名 [规则编号] [-i | o 网卡] [-p 协议类型] [-s 源IP | 源子网] [--sport 源端口号] [-d 目标IP | 目标子网] [--dport 目标端口号] 
[-t 表名]:定义查看哪个表的规则,表名可以使用filter、nat和mangle,如果没有定义,默认使用filter表
-A:新增一条规则,该规则将增加到规则列表的最后一行,该参数不能使用规则编号
-I:插入一条规则,原来该位置上的规则就会身后顺序移动,如果没有指定规则编号,则在第一条规则前插入
-D:删除一条规则,可以输入完整规则,或直接指定规则编号
-R:替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号
:指定查看指定表中某条链的规则,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT、POSTROUTIN
[规则编号]:规则编号是在插入、删除和替换规则时用,编号是按照规则列表的顺序排列,第一条规则编号为1
[-i | o 网卡名称]:i是指数据包从哪块网卡输入,o是批数据包从哪块网卡输出
[-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP、ICMP等
[-s 源IP | 源子网]:数据包的源IP或子网
[--sport 源端口号]:数据包的源端口号
[-d 目标IP | 目标子网]:数据包的目标IP或子网
[--dport 目标端口号]:数据包的目标端口号
:处理数据包的动作
#iptables -A INPUT -i lo -j ACCEPT (追加一条规则,接受所有来自lo接口的数据包)
#iptables -A INPUT -s 192.168.0.44 -j ACCEPT (追加一条规则,接受所有来自192.168.0.44的数据包)
#iptables -A INPUT -s 192.168.0.44 -j DROP (追加一条规则,丢弃所有来自192.168.0.44的数据包)
注:iptables的按照顺序读取规则的,如果两条规则冲突,以排在前面的规则为准。
#iptables -I INPUT 3 -s 192.168.1.0/24 -j DROP (在INPUT链中的第3条规则前插入一条规则,丢弃所有来自192.168.1.0/24的数据包)
注:-I参数如果没有指定插入的位置,将插入到所有规则的最前面
#iptables -D INPUT 2 (删除filter表中INPUT链中的第2条规则)
#iptables -R INPUT 2 -s 192.168.10.0/24 -p tcp --dport 80 -j DROP (替换filter表INPUT链中第2条规则为,禁止192.168.10.0/24访问TCP的80端口)
6.4 清除规则和计数器
在新建规则时,往往需要清除原有的或旧的规则,以免影响新规则。如果规则较多,逐条删除比较麻烦,可以使用清除规则参数快速删除所有规则。
#iptables [-t 表名] 
[-t 表名]:指定策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定,默认为filter表
-F:删除指定表中所有规则
-Z:将指定表中数据包计数器和流量计数器归零
#iptables -Z (将filter表中数据包计数器和流量计数器请零)
#iptables -F (删除filter表中的所有规则)
6.5 记录与恢复防火墙规则
可以使用记录与恢复防火墙规则命令,将现有防火墙机制复制下来,在需要恢复时直接恢复即可。
#iptables-save > 文件名 (记录当前防火墙规则)
#iptables-restore > 文件名 (将防火墙规则恢复到当前主机环境)

参考博文:

https://www.cnblogs.com/longhao/p/3993011.html

http://www.zsythink.net/archives/1199

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料 

      

文章超级链接:

 1,分布式系统详解--基础知识(概论)

 2,分布式系统详解--基础知识(线程)

 3,IDEA和Eclipse的比较

 4,IntelliJ IDEA(最新)安装-破解详解--亲测可用

 5,ipconfig中都是什么意思,如何配置虚拟机,网络知识你懂多少?

 6,【由浅入深】爬虫技术,值得收藏,来了解一下~

 7,Akka 简介及简单原理

 8,Spark-集群安装、部署、启动、测试(1.6.3)稳定版

 9,Linux centos 6.5 - Mysql 安装 、卸载、修改密码、忘记密码 并异常处理

10,分布式系统详解(Apache Hive 入门-简介)

你可能感兴趣的:(防火墙)