Linux操作系统:Firewalld

Linux防火墙是通过netfilter来处理的,它是内核级别的框架。iptables被作为netfilter的用户态抽象层,iptables将包通过一系列的规则进行检查,如果包与特定的IP/端口/协议的组合匹配,规则就会被应用到这个包上,以决定包是被通过、拒绝或丢弃。firewalld是最新的netfilter用户态抽象层。firewalld可以通过定义的源IP和/或网络接口将入站流量分类到不同区域zone。每个区域基于指定的准则按自己配置去通过或拒绝包。另外的改进是基于iptables进行语法简化。firewalld通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用,例如,是使用samba而不是使用UDP端口137和138和TCP端口139和445。它进一步简化语法,消除了iptables中对语句顺序的依赖。

目录

  • 一、firewalld的基本使用
    • 1、iptables的功能总结:
    • 2、firewalld的基本命令
  • 二、区域
    • 1、各区域信息
    • 2、配置firewalld-cmd
  • 三、常用使用场景
  • 四、富规则
  • 五、端口转发

一、firewalld的基本使用

1、iptables的功能总结:

1、常用的两张表:filter、nat,filter用于过滤数据包,nat用于路由转发功能
2、常用的两条链:INPUT、OUTPUT
3、常见的三个行为:ACCEPT、DROP、REJECT
4、限制流量的三个特征:端口、协议、IP,对应的五元组: -d -s --dport --sport -p
5、端口转发:本机端口、远程端口

2、firewalld的基本命令

启动: systemctl start firewa11d
查看状态:systemctl status firewal1d
停止:systemct1 disable firewa11d
禁用:systemct1 stop firewa1ld
重启:systemct1 restart firewalld

二、区域

1、各区域信息

drop:丢弃
任何传入的网络数据包都被丢弃,没有回复。只能进行传出网络连接。

b1ock:阻止
任何传入的网络连接被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接。

public:公共(默认)
用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。

external :外部网络
用于特别为路由器启用伪装的外部网络。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。

dmz:管制区
适用于非军事区中的计算机,这些计算机可公开访问,并且对内部网络的访问权限有限。仅接受选定的传入连接。

work:工作
用于工作区域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。

home:家庭
适用于家庭领域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。

internal:内部
用于内部网络。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。

trusted:受信任
接受所有网络连接。
可以将这些区域中的一个指定为默认区域。将接口连接添加到NetworkManager时,会将它们分配给默i认区域。安装时,firewa1ld中的认区域将设置为公共区域。

2、配置firewalld-cmd

运行firewall-cmd --list-all查看基础配置信息:
Linux操作系统:Firewalld_第1张图片
public (default,active):表示 public 区域是默认区域(当接口启动时会自动默认),并且它是活动的。
interfaces: ens 33 列出了这个区域上关联的接口。
sources :列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们应该是这样的格式XXX.XXX.XXX.XXX/XX
services: dhcpv6-client ssh列出了允许通过这个防火墙的服务。可以通过运行 firewall-cmd --get-services得到一个防火墙预定义服务的详细列表。
ports:列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewalld 中定义的服务的情况下。masquerade: no 表示这个区域是否允许IР 伪装。如果允许,它将允许IP转发,它可以让你的计算机作为一个路由器。
forward-ports:列出转发的端口。
icmp-blocks:阻塞的 icmp流量的黑名单。rich rules:在一个区域中优先处理的高级配置。
default:是目标区域,它决定了与该区域[匹配而没有由上面设置中显式处理的包的动作。

运行以下命令理解firewall规则用法:

查看所有打开的端口:firewall-cmd --zone=public --list-port
更新防火墙规则:firewall-cmd --reload
列出所有区域: firewall-cmd --get-zones
查看区域信息:firewall-cmd --get-active-zones
设定默认区域,立即生效:firewall-cmd --set-default-zone=public
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=ens33
查看所有规则: firewall-cmd --list-a11
通过以下两种手段可以进行永久修改:
firewall-cmd --permanent <some modification>
firewall-cmd --reload


如果这篇文章对你帮助很大,麻烦帮忙,点下友情链接: 鱼儿项目网(直接点这里),进去之后切换几个页面,停留几十秒。感激不尽。本站采集全网自媒体,网赚类,电商营销课程。里面有一些免费项目大家也可以看看

三、常用使用场景

拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic

暂时开放 ftp 服务:firewall-cmd --add-service=ftp
永久开放 ftp 服务:firewall-cmd --add-service=ftp --permanent
查询服务的启用状态:firewall-cmd --query-service ftp
开放mysql端口:firewall-cmd --add-service=mysq1
阻止http端口:firewall-cmd --remove-service=http
查看开放的服务:firewall-cmd --list-services
查看对应规则库文件:cd /usr/lib/firewalld/services

开放通过tcp访问3306:firewall-cmd --add-port=3306/tcp
阻止通过tcp访问3306: firewall-cmd --remove-port=80/tcp
永久开放80端口:firewall-cmd --zone=public --add-port=80/tcp permanent
查看80端口:firewall-cmd --zone=public --query-port=80/tcp
查看所有开放端口: firewall-cmd --zone=public --list-ports
删除80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
开放postgresql服务:firewall-cmd --add-service=postgresql --permanent

允许http服务通过1分钟: firewall-cmd --zone=public --add-service=http --timeout=1m,这个timeout 选项是一个以秒(s)、分(m)或小时(h)为单位的时间值。

重载防火墙:firewall-cmd --reload
检查防火墙状态:firewall-cmd --state
让设定生效:systemctl restart firewalld
检查设定是否生效: iptab1es -L -n | grep 21或 firewall-cmd --list-al1

四、富规则

添加指定ip访问特定端口规则:
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.112.1 port port=80
protocol=tcp accept'

删除指定某个ip访问特定端口规则:
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.112.1" port protoco1="tcp" port="80" accept"

禁止某个ip访问:
iptables -I INPUT -s 138.138.138.138 -j DROP
firewall -cmd --add-rich-rule='rule family=ipv4 source address="192.168.112.1" drop'

允许Ping:
firewall-cmd --add-rich-rule='rule family="ipv4" protocol value="icmp" source address="192.168.112.1" accept'
与iptables一致:富规则中的动作可以设置为:accept,drop,reject(注意是小写)

端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

接受192.168.112.0网段所有IP访问sSH服务:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.112.0/24" service name=sshaccept '

直接模式:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.112.1 -j ACCEPT
注意:INPUT后面的数字1代表规则的优先级,数字越小,优先级越高,建议优先级从1开始。
查看直接模式下的规则:firewall-cmd --direct --get-al1-rules
删除直接模式下的规则: firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s192.168.112.1 -j ACCEPT


五、端口转发

端口转发可以将指定地址访问指定的端口时,将流星转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。

如果配置好端口转发之后不能用,可以检查下面两个问题:

  • 比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
  • 其次检查是否允许伪装IP,没允许的话要开启伪装IP
#将8888端口的流量转发至80
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8888 :proto=tcp:toport=80

#开启伪装IP
firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade #允许防火墙伪装IP
firewall-cmd --remove-masquerade#禁止防火墙伪装IP

#将8888端口的流量转发至101.37.65.9180端口
firewall-cmd --add-forward-port=port=8888:proto=tcp:toaddr=101.37.65.91:toport=80
  • 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
  • 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。

1、检查IP tables处于关闭状态,firewalld处于开启状态
[root@numberone ~]# systemctl status iptables
[root@numberone ~]# systemctl status firewalld
Linux操作系统:Firewalld_第2张图片
2、[root@numberone ~]# firewall-cmd --list-all
现在活动区域是public
Linux操作系统:Firewalld_第3张图片
物理机去ping该虚拟机的IP地址,可以ping得通
Linux操作系统:Firewalld_第4张图片
[root@numberone ~]# /opt/lampp/lampp start开启服务。
物理机去访问192.168.88.131,默认情况下80端口是不能访问的。因为防火墙没有没有开启80端口。
Linux操作系统:Firewalld_第5张图片
3、设置默认区域:[root@numberone ~]# firewall-cmd --set-default-zone=trusted。之后就发现可以访问80端口了。这是一个全开放的区域
Linux操作系统:Firewalld_第6张图片
Linux操作系统:Firewalld_第7张图片
4、设置默认区域为drop:[root@numberone ~]# firewall-cmd --set-default-zone=drop
Linux操作系统:Firewalld_第8张图片
发现不仅ping不通,也访问不了80端口
Linux操作系统:Firewalld_第9张图片
Linux操作系统:Firewalld_第10张图片
5、设置默认区域为block:[root@numberone ~]# firewall-cmd --set-default-zone=block
Linux操作系统:Firewalld_第11张图片
物理机ping服务器,是服务器发信息回来了,告诉物理机不能访问自己。
Linux操作系统:Firewalld_第12张图片
6、切换回public区域
Linux操作系统:Firewalld_第13张图片
添加80端口:[root@numberone ~]# firewall-cmd --add-port=80/tcp
Linux操作系统:Firewalld_第14张图片
物理机可以访问网页了:
Linux操作系统:Firewalld_第15张图片

再删掉80端口:[root@numberone ~]# firewall-cmd --remove-port=80/tcp
Linux操作系统:Firewalld_第16张图片
再添加http服务:[root@numberone ~]# firewall-cmd --add-service=http
Linux操作系统:Firewalld_第17张图片
物理机可以也访问网页了:Linux操作系统:Firewalld_第18张图片
IP tables也可以看到相关信息:[root@numberone ~]# iptables -nL|grep 80
在这里插入图片描述
7、不知道可以添加什么服务时,可以查看:[root@numberone ~]# firewall-cmd --get-service
Linux操作系统:Firewalld_第19张图片
8、重启防火墙,发现之前配置的东西全部重置了:[root@numberone ~]# firewall-cmd --get-service
Linux操作系统:Firewalld_第20张图片
9、想永久配置东西,就得在命令后面添加个小单词,是永久的意思:[root@numberone ~]# firewall-cmd --add-service=http --permanent
之后要重新加载配置文件:[root@numberone ~]# firewall-cmd --reload
Linux操作系统:Firewalld_第21张图片
10、查看现在开启的端口:[root@numberone ~]# firewall-cmd --list-port
查看现在活跃的区域:[root@numberone ~]# firewall-cmd --get-active-zone
查看有哪些区域:[root@numberone ~]# firewall-cmd --get-zones
在这里插入图片描述
11、拒绝所有包:[root@numberone ~]# firewall-cmd --panic-on
Xshell已经连接不上了:在这里插入图片描述
回虚拟机取消拒绝状态,Xshell才自动重新连接:firewall-cmd --panic-off
在这里插入图片描述

你可能感兴趣的:(网络安全入门到精通,linux,网络,运维)