绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Linux 防火墙
2022-08-23 14:54:53

基础知识

安全技术:
  • IDS:Intrusion Detection Systems,入侵检测系统

  • IPS:Intrusion Prevention System,入侵防御系统

  • FireWall:防火墙

防火墙概念

防火墙是作用与内网和外网之间,根据定义的策略来过滤流量的软件或者硬件。

防火墙分类

可以根据作用范围和实现逻辑分类

根据作用范围分类
  • 主机防火墙:针对于单个主机进行防护。

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

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

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

linux的防火墙:netfilter

netfilter组件是集成在内核中的,采用模块化设计的,工作在内核空间。

netfilter的钩子函数

钩子函数:hook(勾子) function。是系统预留的一些函数,可以允许外部用户调用钩子函数。可以通过一些工具来向这五个钩子函数中写入规则
netfilter在五个位置放了五个不同的钩子函数,

  • INPUT

  • OUTPUT

  • FORWARD

  • PREROUTING

  • POSTROUTING

image

netfilter的报文流向
  • 到本机的某进程:PREROUTING –> INPUT

  • 由本机转发的:PREROUTING –> FORWARD –> POSTROUTING

  • 由本机某进程发出的:OUTPUT –> POSTROUTING
    image

PREROUTTING:报文的总进口

POSTROUTING:报文的总出口

linux防火墙的管理工具

  • iptables:用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

  • firewalld:CentOS7提供的,就是基于iptables的二次开发

  • nettable:CentOS8提供的

iptables的相关概念

  • iptables由五表、五链和一些规则组成。

  • iptables中的五链对应netfilter的五个钩子函数。

优先级从高到低:
security -->raw-->mangle-->nat-->filter
规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理

链:多条规则就形成了一条链

表:把具有相同功能的规则的集合叫做”表”
五表:
  • filter:负责过滤功能,防火墙;内核模块:iptables_filter

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

  • mangle:拆解报文,做出修改,并重新封装 的功能;iptable_mangle

  • raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度

  • security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

表和链的关系

表是具有相同功能的链的集合。

# 查看对应链上的规则都在哪些表中:iptables -vnL -t table_name

PREROUTING 的规则可以存在于:raw表,mangle表,nat表。

INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。

FORWARD 的规则可以存在于:mangle表,filter表。

OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。

POSTROUTING 的规则可以存在于:mangle表,nat表。

iptables中的规则

规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理。

在实际的使用过程中,往往是通过”表”作为操作入口,对规则进行定义的
查看iptables的规则:
#查看iptables表的规则:
iptables -t 表名 -L

#查看指定表的指定链中的规则:
iptables -t 表名 -v -L
#例如:查看filter表的所有规则
[root@CentOS8 ~]# iptables -t filter -L

-t:指定表的类型:
-L:list,列出所有规则
-v:显示详细信息
-n:number,不对规则中的IP或者端口进行名称反解,-n选项表示不解析IP地址。
不指定表名,默认使用的是filter这张表。
#使用 -v 选项显示的详细信息
# pkts:对应规则匹配到的报文的个数。
# bytes:对应匹配到的报文包的大小总和。
# target:规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施。
# prot:表示规则对应的协议,是否只针对某些协议应用此规则。
# opt:表示规则对应的选项。
#in:表示数据包由哪个接口(网卡)流入,即从哪个网卡来。
# out:表示数据包将由哪个接口(网卡)流出,即到哪个网卡去。
# source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
# destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段
#范例:查看filter表中的INPUT链的所有规则
root@CentOS8 ~]# iptables -t filter --line-numbers -vnL INPUT
   Chain INPUT (policy ACCEPT  packets,  bytes)
   num   pkts bytes target     prot opt in     out    source    destination

# -–line-numbers:显示规则的编号
# policy表示当前链的默认策略
# packets表示当前链(上例为INPUT链)默认策略匹配到的包的数量,0 packets表示默认策略匹配到0个包。
# bytes表示当前链默认策略匹配到的所有包的大小总和。

管理iptables的规则

增加规则:
#范例:拒绝10.0.0.11主机的报文
[root@CentOS8 ~]# iptables  -t filter  -I INPUT -s 10.0.0.11 -j DROP

[root@CentOS8 ~]# iptables -t filter  -L
   Chain INPUT (policy ACCEPT)
   target     prot opt source               destination
   DROP       all  --  10.0..11            anywhere

# -I:insert, 插入,要指明插入至的规则编号,默认为条
# -j:targetname [per-target-options] 指定规则的处理动作
# -s:为source之意,表示源地址。
# -A: 表示在链的尾部追加规则,-I表示在链的首部插入规则

注意:
# 1.如果报文已经被前面的规则匹配到,iptables则会对报文执行对应的动作,即使后面的规则也能匹配到当前报文,很有可能也没有机会再对报文执行相应的动作了。


# 2.可以在添加规则时,指定新增规则的编号,将规则添加到指定的位置
[root@CentOS8 ~]# iptables  -t filter  -I INPUT 2 -s 10.0.0.11 -j DROP

# -I INPUT 2:表示在2这个位置插入这条规则
删除规则:
  • 方法一:根据规则的编号去删除规则

  • 方法二:根据具体的匹配条件与动作删除规则

# 范例:删除filter表中的INPUT链上面的条规则
[root@CentOS8 ~]# iptables -t filter -D INPUT  1

# -D选项表示删除指定链中的某条规则,-D INPUT 1表示删除INPUT链中的第1条规则
# 范例:删除filter表中,INPUT链上,源地址是10.0.0.11,处理动作是DROP的这条规则

[root@CentOS8 ~]# iptables -t filter  -D  INPUT -s 10.0.0.11 -j DROP
清除所有规则
  • 清除指定链中的所有规则:iptables -t 表名 -F 链名

  • 清除指定表中的所有规则: iptables -F

#范例:清除filter表中,INPUT链上的所有规则

[root@CentOS8 ~]# iptables -t filter -F INPUT
修改链的默认策略
# 例如:修改filter表中的INPT链的默认策略为DROP
[root@CentOS8 ~]# iptables -t filter -P INPUT   DROP

# 当链中没有任何规则时,防火墙会按照默认动作处理报文
白名单和黑名单
  • 白名单:只有指定的特定主机可以访问,其它全拒绝

  • 黑名单:只有指定的特定主机拒绝访问,其它全允许,默认方式

保存规则:

默认所做的操作是临时生效的,重启失效

#CentOS6把保存iptables规则:
service iptables saeve #将规则覆盖保存至/etc/sysconfig/iptables文件中

CentOS 7,8
方法一:
iptables-save > /PATH/TO/SOME_RULES_FILE
iptables-restore < /PATH/FROM/SOME_RULES_FILE(在rc.local中加入这条命令) #iptables-restore:加载规则
#将规则存在一个文件,通过开机自动加载这个文件来实现。

方法二:
安装iptables.service
因为安装这个软件以后,它的/etc/sysconfig/iptables这个文件带有他自己默认的规则,通过:
iptables-save > /etc/sysconfig/iptables来覆盖它默认的规则。从而实现规则的的保存。

iptables的匹配条件

  • 基本匹配条件:直接能用的条件

  • 扩展匹配条件:需要调用对应的扩展模块

iptables的基本匹配条件
  • 源地址
  • 目标地址
  • 网卡名称
  • 协议类型
源地址和目标地址

使用-s选项来指定源地址,可以是网段或者是一台具体的主机。多个地址或者网段用逗号隔开。
使用-d选项来指定目标地址,可以是网段或者是一台具体的主机

不指定任何目标地址,则目标地址默认为.../,同理,如果我们不指定源地址,源地址默认为.../.../表示所有IP

只能表示离散的地址(单个地址逗号隔开),不能表示一个连续的地址(例如10...11-10...19
#范例:来自10.0.0.11这个设备的数据表都丢弃
[root@CentOS8 ~]# iptables -t filter -I INPUT -s 10.0.0.11 -d 10.0.0.10 -j DROP
网卡名称

有多块网卡时,指定从那块网卡流入或者流出。

-i: 本机有多个网卡时,我们可以使用 -i 选项去匹配报文是通过哪块网卡流入本机

-o: 当主机有多块网卡时,可以使用-o选项,匹配报文将由哪块网卡流出

#-i选项只能用于PREROUTING链、INPUT链、FORWARD链,那么-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链。
协议类型

匹配不同协议类型的数据包

使用-p参数来匹配指定的协议类型。
#例如: 匹配到来自10.0.0.11这个设备的tcp数据包就拒绝
[root@CentOS8 ~]# iptables -t filter  -I INPUT  -s 10.0.0.11 -d 10.0.0.10 -p tcp -j REJECT
#centos6中,-p选项支持如下协议类型:
tcp, udp, udplite, icmp, esp, ah, sctp

#centos7中,-p选项支持如下协议类型:
tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh

#当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同。
扩展匹配条件

需要调用指定的扩展模块才能使用的匹配条件。

扩展匹配条件分为:

  • 隐式扩展:和协议名称一样的模块,使用-p执行协议类型的时候,会自动分配一个同名的模块。

  • 显示扩展:需要使用 -m 参数手动指定模板才能使用

隐式扩展

和协议同名的扩展模块:只需要使用-p选项指定协议,会自动调用同名的扩展模块。

  • tcp

  • udp

  • icmp

tcp 协议的扩展选项:

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围 #[!] 表示可以取反

[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
#范例:拒绝外来报文的目标端口为本机的22号端口
[root@CentOS8 html]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 -j  DROP

#注意
1.-m tcp表示使用tcp扩展模块,–dport表示tcp扩展模块中的一个扩展匹配条件

2.使用 -p 指定报文协议,但是没有使用 -m 指定扩展模块时,会默认使用和协议名称相同的模块

3.连续的端口表示方法: num1:num2

udp 协议的扩展选项:

[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围

[!] --destination-port,--dport port[:port]:匹配报文的目标端口或端口范围

icmp 协议的扩展选项:

ICMP协议:Internet Control Message Protocol,翻译为互联网控制报文协议,它主要用于探测网络上的主机是否可用,目标是否可达,网络是否通畅,路由是否可用等
[!] --icmp-type {type[/code]|typename}
 type/code
 /   echo-reply icmp应答
 8/   echo-request icmp请求

使用 –icmp-type 表示根据具体的type与code去匹配对应的icmp报文

ping回应报文,它的type,code也为

ping请求报文对应的type8,code为
#范例:禁止所有icmp类型的报文进入本机
[root@CentOS8 ~]# iptables -t filter  -I INPUT  -p icmp -j REJECT
#范例:实现能ping通别人,但是不想让别人ping通我们
[root@CentOS8 ~]# iptables -t filter  -I INPUT -p icmp -m icmp --icmp-type 8/ -j REJECT

–icmp-type 8/ 表示icmp报文的type为8code才会被匹配到,也就是只有ping请求类型的报文才能被匹配到

我们之所以能够ping通别人,是因为别人回应我们的报文的icmp type为code也为,所以无法被上述规则匹配到,所以我们可以看到别人回应我们的信息
显式扩展模块
  • multiport:可以指定离散的端口号,使用逗号隔开

  • iprange:指定一个连续的ip地址范围

  • mac

  • string:匹配含有指定字符串的报文

  • time:匹配指定时间段的报文

  • connlimit

  • limit

  • state

iprange扩展模块:

两个扩展匹配条件:

–src-range:

–dst-range

#例如:
[root@CentOS8 html]# iptables -t filter  -I INPUT -m iprange --src-range 10.0.0.10-10.0.0.13 -j DROP

string模块:

常用扩展匹配条件:

–algo:指定对应的匹配算法,可用算法为bm、kmp,此选项为必需选项。

–string:指定需要匹配的字符串
#例如: #含有hello1这个字符串的报文就丢弃掉
[root@CentOS8 html]# iptables -t filter  -I INPUT -m  string --algo bm --string "hello1" -j DROP

#范例:禁止访问谷歌
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm  --string "google" -j REJECT

time模块:根据将报文到达的时间与指定的时间范围进行匹配
(注意:CentOS 8 此模块有问题)

#常用扩展匹配条件如下:
–timestart:用于指定时间范围的开始时间,不可取反

–timestop:用于指定时间范围的结束时间,不可取反

–weekdays:用于指定”星期几”,可取反

–monthdays:用于指定”几号”,可取反

–datestart:用于指定日期范围的开始日期,不可取反

–datestop:用于指定日期范围的结束时间,不可取反
#范例:每天早上9点到下午6点不能看网页
[root@CentOS8 html]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT

connlimit扩展模块:限制每个IP地址同时链接到server端的链接数量

–connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。

–connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制
#范例:限制每个ip地址(客户端)只能开启两个ssh连接到service
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

state扩展模块:用来识别报文是主动发出去的还是被动接收的。

state连接的概念:两台机器能进行正常的通信就算建立了连接。

state连接的状态:

NEW:连接中的个包,状态就是NEWESTABLISHED:我们可以把NEW状态包后面的包的状态理解为ESTABLISHED,表示连接已建立。

RELATED:有关系的报文

INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是INVALID

UNTRACKED:报文的状态为untracked时,表示报文未被追踪,当报文的状态为Untracked时通常表示无法找到相关的连接
#范例:实现只有回应我们的报文能够通过防火墙,如果是别人主动发送过来的新的报文,则无法通过防火墙

[root@centos8 ~]#iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 

[root@centos8 ~]#iptables -A INPUT -m state --state NEW -j REJECT

iptables自定义链

target相关概念

target:iptables中的动作,报文被规则匹配到以后,target能是一个”动作”,target也能是一个”自定义链”,当target为一个动作时,表示报文按照指定的动作处理,当target为自定义链时,表示报文由自定义链中的规则处理

自定义链:用来解决多条规则的情况下,方便我们对不用服务的规则进行管理。

自定义链并不能直接使用,而是需要被默认链引用才能够使用
创建自定义链

使用 -N 选项可以创建自定义链。

自定义链并不能直接使用,而是需要被默认链引用才能够使用

#范例:创建一个叫做IN_WEB的自定义链
[root@CentOS8 ~]# iptables -t filter  -N IN_WEB

[root@CentOS8 ~]# iptables -vL -t filter 
Chain INPUT (policy ACCEPT  packets,  bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT  packets,  bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT  packets,  bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain IN_WEB ( references)
 pkts bytes target     prot opt in     out     source               destination
 
#自定义链的引用计数为0 (0 references),也就是说,这条自定义链还没有被任何默认链所引用,所以,即使IN_WEB中配置了规则,也不会生效

在自定义链中配置规则

#范例:实现别的主机不能ping通本机
[root@CentOS8 ~]# iptables -t filter  -I IN_WEB -p icmp --icmp-type 8/ -j REJECT


#因为没有在默认链里面引用自定义规则,所以配置的规则不生效。
引用自定义的规则
[root@CentOS8 ~]# iptables -t filter  -I INPUT -j IN_WEB

#自定义链在哪里创建,应该被哪条默认链引用,取决于实际的工作场景,因为此处示例的规则是匹配入站报文,所以在INPUT链中引用自定义链

#IN_WEB链的引用计数已经变为1,表示这条自定义链已经被引用了1次,自定义链还可以引用其他的自定义链
修改自定义的链名

-E”选项可以修改自定义链名

删除自定的链

”-X”选项可以删除自定义链,但是删除自定义链时,需要满足两个条件:

1、自定义链没有被任何默认链引用,即自定义链的引用计数为0。

2、自定义链中没有任何规则,即自定义链为空。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Linux技术精选专区
创建时间:2020-07-08 10:30:23
Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年次释出,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • dapan
    专家
戳我,来吐槽~