Linux学习(五)

使用iptables与firewalld防火墙

iptables

策略与规则链

防火墙会按照从上到下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作区执行匹配项中定义的行为(即放行或阻止).如果在读完所有策略规则之后没有匹配项,就去执行默认的策略.当防火墙默认策略为拒绝时,就要设置允许规则,否则谁都进不来,如果防火墙默认策略为允许,就要设置拒绝规则,否则谁都能进来

iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个队则链,而规则量则一句数据包处理位置的不同进行分类

  • 在进行路由选择前处理数据包(PREROUTING)
  • 处理流入的数据包(INPUT)
  • 处理流出 的数据包(OUTPUT)
  • 处理转发的数据包(FORWARD)
  • 在进行路由选择后处理数据包(POSTROUTING)

一般来说从内网向外网发送的流量一般都是可控且良性的,因此使用INPUT规则量

iptables术语ACCEPT(允许流量通过) REJECT(拒绝流量通过) LOG(记录日志信息) DROP(拒绝流量通过) DROP直接将流量丢弃而且不响应,REJECT则会在拒绝流量后再回复一条”信息已经收到,但是被扔掉了”信息,从而让流量发送方清晰的看到数据被拒绝的响应信息

当把Linux系统中的防火墙策略设置为REJECT动作后,流量发送方会看到端口不可达的响应

image-20220324102348128

而把Linux系统中的防火墙策略修改成DROP动作后,流量发送方会看到响应超时的提醒。但是流量发送方无法判断流量是被拒绝,还是接收方主机当前不在线```

image-20220324102408390

基本命令参数

iptables中常用的参数以及作用

参数 作用
-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如TCP、UDP、ICMP
–dport num 匹配目标端口号
–sport num 匹配来源端口号

-L参数

查看已有的防火墙规则链

image-20220324102534537

-F参数

清空已有的防火墙规则链

image-20220324102721031

-P参数

把INPUT规则量的默认策略设置为拒绝

image-20220324103526032

当把INPUT链设置为默认拒绝以后,就要往里面写入策略,否则所有流入的数据包都会被默认拒绝掉.规则量的默认策略拒绝动作只能是DROP,而不能是REJECT

-p

向INPUT链中添加允许ICMP流量进入的策略规则

通常会使用ping命令来检查对方主机是否在线,而向防火墙的INPUT规则链中添加一条允许ICMP流量进入的策略规则就默认允许了这种ping命令的检测行为

image-20220324104008230

-D

使用-F参数会清空所有的防火墙策略;使用-D参数可以删除某一条指定的策略

image-20220324104133091

-s

要对某台主机进行匹配,可直接写出它的ip地址,如需对网段进行匹配,则需要写为子网掩码的形式(比如192.168.5.0/24)

image-20220324104800607

防火墙的策略规则是从上到下的顺序进行匹配的,因此一定要把允许动作放到拒绝动作之前,否则所有流量都会被拒绝

–dport

向INPUT规则链中添加拒绝所有人访问本机的12345端口的策略规则

image-20220324105200527

向INPUT规则链中添加拒绝192.168.5.10主机访问本机80端口(web服务)的策略规则

image-20220324105438284

-A

向INPUT规则链中添加拒接所有主机访问本机1000~1024端口的策略规则

在前面添加防火墙策略时,使用的是-I参数,它会默认把规则添加到最上面的位置,因此优先级是最高的,如果需要添加一条最后的”兜底”的规则,那就用-A参数

image-20220324105944120

iptables-save

要注意,使用iptables命令配置的防火墙规则会默认在系统下一次重启时失效,如果想要让配置的防火墙策略永久生效

image-20220324110210686

如果公司服务器是5/6/7版本的话,对应的保存命令应该是

image-20220324110227550

Firewalld

firewalld它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式

firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

firewalld中常用的区域名称及策略规则

区域 默认规则策略
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal 等同于home区域
work 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关

终端管理工具

firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本,他的参数都是以长格式来提供的,但是可以使用tab键进行补齐(我的没有)

firewall-cmd命令中使用的参数以及作用

参数 作用
–get-default-zone 查询默认的区域名称
–set-default-zone=<区域名称> 设置默认的区域,使其永久生效
–get-zones 显示可用的区域
–get-services 显示预先定义的服务
–get-active-zones 显示当前正在使用的区域与网卡名称
–add-source= 将源自此IP或子网的流量导向指定的区域
–remove-source= 不再将源自此IP或子网的流量导向某个指定区域
–add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
–change-interface=<网卡名称> 将某个网卡与区域进行关联
–list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
–list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
–add-service=<服务名> 设置默认区域允许该服务的流量
–add-port=<端口号/协议> 设置默认区域允许该端口的流量
–remove-service=<服务名> 设置默认区域不再允许该服务的流量
–remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
–reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
–panic-on 开启应急状况模式
–panic-off 关闭应急状况模式

使用firewalld配置的防火墙策略默认为运行时(RUNTIME)模式,有称为当前生效模式,而且会随着系统的重启而失效.如果想要配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙测量时添加–permanent参数,这样配置的防火墙策略就可以永久生效了.但是,永久上校模式有一个特点,就是他设置的策略只有在系统重启之后才会自动生效,如果想笑配置立即生效,就需要手动执行firewall-cmd –reload命令

–get-default-zone

在配置防火墙策略前,必须查看当前生效的是那个区域,否则配置的防火墙策略将不会立即生效

image-20220324111411565

–get–zone-of-interface=ens33

查询指定网卡在firewalld服务中绑定的区域

一般来说,充当网管的服务器有两块玩咖,一块对公网,另一块对内网,那么这两块网卡在审查流量时所用的策略肯定也是不一致的.因此可以根据网卡针对的流量来源,为网卡绑定不同的区域,实现第防火墙策略的灵活管控

image-20220324111846157

把网卡默认区域修改为external,并在系统重启后生效

image-20220324114736179

–set-default-zone=public

把firewalld服务的默认区域设置为public

默认区域也叫全局配置,指的是对所有的网卡都生效的配置,优先级较低.

image-20220324121341390

–panic-on

启动和关闭firewalld防火墙服务的应急状态模式

panic紧急模式,使用–panic-on参数会立即切断一切网络连接,而使用–panic-off则会恢复网络连接.紧急模式会切断一切网络连接,因此在远程管理服务器时,要注意.

image-20220324121638928

–query-service=ssh

查看SSH和HTTPS协议的流量是否允许放行

可以不使用–zone参数指定区域名称,firewall-cmd命令会自动依据默认的区域进行查询,从而减少用户输入量,但是如果默认区域与网卡绑定不一致时,就会发生冲突,因此zone的参数还是加上为好.

image-20220324122000740

–add-service=https

把HTTPS协议的流量设置为永久允许放行,并立即生效

默认情况下进行的修改都属于Runtime模式,即前生效而重启后失效.而在使用–permanent参数时,则是当前不会理解看到效果,而在重启或者重新加载之后方可生效.在添加了允许放行HTTPS流量的策略之后,查询当前模式策略,发现依然是不允许放行HTTPS协议的流量

image-20220324122431007

–reload

如果不想重启服务器,就使用–reload参数

image-20220324122549916

–remove-service=http

把HTTP协议的流量设置为永久拒绝,并立即生效

由于在默认情况下HTTP协议的流量就没有被允许,所以会有提示信息

image-20220324123014339

–add-port=8080-8081/tcp

把访问8080和8081端口的流量策略设置为允许,仅当前生效

image-20220324123224151

–list-ports

列出当前端口策略

把原本访问本机888端口的流量转发到22端口,并且要求当前和长期有效

SSH远程控制协议是基于TCP/22端口传输控制指令的,如果想让用户通过其他端口号也能访问ssh服务,也就可以试试端口转发技术了.新的端口号在收到用户请求后会自动转发到原本服务的端口上,使得用户能够通过新的端口访问到原本的服务

firewall-cmd --permanent --zone=[区域] --add-forward-port=port=[源端口号]:proto=[协议];toport=[目标端口号]:toaddr=[目标ip地址]

image-20220324123955621

富设置的规则

富规则也叫复规则,表示更加细致 更详细的防火墙策略配置,他可以针对系统服务 端口号 原地址和目标地址等诸多信息进行更有针对性的配置策略.他的优先级在所有的防火墙策略中也是最高的.比如,我们可以在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口)

image-20220324124715896