firewalld

本文介绍了firewalld防火墙,包括其主要架设位置、四表五链、数据报文流向等。详细说明了如何使用iptables命令工具管理firewalld,还分别阐述了主机防火墙规则和网络防火墙规则的配置方法,以及防火墙配置的保存与恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、firewalld 介绍

firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘,对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,对于能够被规则所匹配的报文做出相应处理的组件(组件可以是硬件,也可以是软件)
在这里插入图片描述

1.firewalld主要架设位置

主机防火墙
网络防火墙

2.firewalld的表与链:四表五链

表:

    filter:数据包过滤表
	nat:网路地址转换表
	mangle:数据包设置标记
	raw:关闭nat表上启用的连接追踪功能

链:

    PREROUTING:在进行路由选择后数据包处理
	INPUT:入站数据包处理
	FORWARD:转发数据包处理
	OUTPUT:出站数据包处理
	POSTROUTING:在进行路由选择前数据包处理
3.数据报文的流向
流入:PREROUTING--> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING--> FORWARD --> POSTROUTING	
4.添加规则时的考量点

要实现什么功能:判断添加在哪张表上
报文流经的路劲:判断添加在哪个链上

5.firewalld表的优先级

策略应用优先级:raw,mangle,nat,filter
策略常用优先级:filter,nat,mangle,raw

6.iptables命令工具管理firewalld

iptables语法:
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

  • -t:指定表名 ,不指定默认filter
    -P:指定链名

  • 选项:大写字母

        -A:append,将新规则追加于指定链的尾部
     	-I:insert,将新规则插入至指定链的指定位置
     	-D:delete,删除指定链上的指定规则:
    
  • 条件:

     -s, source:检查报文中源ip地址是否符合此处指定的地址范围
     -d, destination:检查报文中ip地址是否符合此处指定的地址范围
     -p, protocol(udp|tcp|icmp):检查报文中的协议
     -i, input-interface:数据报文的流入接口:仅能用于PREROUTING,INPUT,FORWARD链上
     -o, out-interface:数据报文的流出接口:仅能用于POSTROUTING,OUTPUT,FORWARD链上
    
  • 控制类型:

    ACCEPT:允许通过
    DROP:直接丢弃,不给出任何回应
    REJECT:拒绝通过,必要时会给出提出
    LOG:记录日志信息,然后传给下一条规则继续匹配
    RETURN:返回调用链
    MARK:做防火墙标记
    DNAT:目标地址转换
    SNAT:源地址转换

命令案例:

查看filter表上面的所有规则(-t是指定表,默认是filter表)
iptables -t filter -L -n   


清空所有规则(fileter)
iptables -F


删除所有自定义链
iptables -X

凡是ping 192.168.254.74主机都拒绝
iptables -t filter -A INPUT -d 192.168.254.74 -p icmp -j REJECT|DROP|ACCEPT

	
以行数字来显示
iptables -L -n --line-number

	
删除filter表上INPUT链上的第一条规则
iptables -D INPUT 1

	
设置INPUT链为黑名单
iptables -P INPUT DROP

	
设置客户端允许ssh连接主机
iptable -A INPUT -s source_ip -d destination_ip -p tcp --dport 22 -j ACCEPT
iptable -A OUPUT -s destination_ip -d source_ip -p tcp --sport 22 -j ACCEPT

二、配置主机防火墙规则

以Windows和linux虚拟机为环境配置ssh登录和访问httpd网页
192.168.30.1(windows)
192.168.30.155(linux)
在这里插入图片描述

思路分析:

  1. 远程管理工具用的就是ssh服务协议为tcp,在Windows上用ssh服务访问linux主机,数据包要在fileter表进行规则过滤;
  2. 首先进入INPUT链进行过滤,符合规则可以通过
  3. 数据到达用户空间,linux主机需要发送响应报文并要通过OUTPUT过滤规则返回响应
  4. 完成了响应后ssh才能正常访问
1.首先查看防火墙默认过滤规则有很多系统定义的规则
iptables -L -n

我们选择清空这些规则和自定义的链

#清空所有规则(fileter) 
iptables -F 
iptables -X
[root@c2 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

将INPUT和OUTPUT链修改为DROP(抛弃任何数据包)之后在添加一条条的白名单
在这里插入图片描述
设置了上述第一条后SSH连接马上就断开了
在这里插入图片描述

2.配置过滤规则

根据思路的分析我们首先要配置INPUT链上的规则
在这里插入图片描述
再配置OUTPUT链上规则,实现数据一来一回完整传输
在这里插入图片描述
配置完成后测试22号端口,telnet或用远程管理工具登录成功

httpd服务同理将端口号该为80就可以,配置规则如下
在这里插入图片描述

三、防火墙配置保存与恢复

之前我们配置的防火墙规则只是临时性的,重启之后手动配置的规则消失会变成系统定义的规则,这是如果想保存已配置的规则就需要保存

1.先清空其他表和链上的规则
[root@c2 ~]# iptables -t nat -F
[root@c2 ~]# iptables -t nat -X
[root@c2 ~]# iptables -t mangle -F
[root@c2 ~]# iptables -t mangle -X
[root@c2 ~]# iptables -t raw -F
[root@c2 ~]# iptables -t raw -X
2.保存已配置的规则
[root@c2 ~]# iptables-save > /etc/sysconfig/iptables
3.如果重启,恢复就可以
iptable-restore < /etc/sysconfig/iptables

四、配置网络防火墙规则

在这里插入图片描述
思路分析:

  • 1.SNAT 首先内网ip192.168.20.2想要访问外网web服务ip172.16.100.2,不做SNAT前在假定可以直接访问外网web服务,只不过外网web服务日志会记录下所有访问它的地址,这对内网ip相对不安全,所以我们一是为了安全考虑;二是因为真实内网ip是C类网是不能访问外网,公网ip数量较紧张,把内网ip进行SNAT(源地址转换)转换成公网ip进行访问
    然后内网client访问的目标webserver经过防火墙要在POSTROUTING链进行SNAT,将地址由20.2转换成100.1访问100.2
  • 2.DNAT (1).首先web端只知道数据是从100.1发给它的,所以数据包返回的目的ip就只能到100.1 (2).实际数据包是要返回给20.2的,这时我们需要给它进行DNAT(目标地址转换)
    (3).数据包进过防火墙要在PREROUTING链进行DNAT,将地址由100.1转换成20.2
    为了方便我们用图上web端访问client端的web服务模拟数据包返回
1.首先开启路由转发功能需要修改内核参数,保证20.2可以ping通100.2
临时:echo 1 > /proc/sys/net/ipv4/ip_forward
永久:vim /etc/sysctl.conf
             net.ipv4.ip_forward=1    #添加这一条
     sysctl -p	
2.防火墙规则

源地址为192.168.20.2经过防火墙都转换成172.16.100.1这个ip地址(SNAT:源地址转换)

iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.168.100.2 -j SNAT --to-source 172.16.100.1

我们用curl抓取100.2web服务网页的内容,为了方便区分我们实现在网站根目录写了内容
在这里插入图片描述
访问目标地址为172.116.100.1这个ip的都转发给192.168.20.2(DNAT目标地址转换)

iptables -t nat -A PREROUTING -d 172.16.100.1 -j DNAT --to-destination 192.168.20.2
### 如何重置 firewalld 到默认配置 重置 `firewalld` 到默认配置可以通过以下方法实现。这些方法包括清除所有规则、重新加载默认配置以及停止服务等操作[^1]。 #### 1. 停止并禁用 firewalld 服务 在重置之前,需要先停止 `firewalld` 服务以确保没有活动的防火墙规则干扰: ```bash sudo systemctl stop firewalld sudo systemctl disable firewalld ``` #### 2. 删除自定义区域和规则 通过以下命令删除所有用户自定义的区域和规则: ```bash sudo firewall-cmd --delete-all-zones sudo firewall-cmd --delete-all-services sudo firewall-cmd --delete-all-rich-rules sudo firewall-cmd --delete-all-sources sudo firewall-cmd --delete-all-forward-ports ``` #### 3. 重置到默认配置 使用 `--reload` 和 `--complete-reload` 参数可以重载配置文件,并将 `firewalld` 恢复到初始状态: ```bash sudo firewall-cmd --reload sudo firewall-cmd --complete-reload ``` 这一步会重新加载系统中的默认配置文件[^2]。 #### 4. 启动并启用 firewalld 完成重置后,重新启动并启用 `firewalld` 服务: ```bash sudo systemctl start firewalld sudo systemctl enable firewalld ``` #### 5. 验证重置是否成功 可以通过以下命令检查当前活动的区域和服务,确保已恢复为默认设置: ```bash sudo firewall-cmd --get-active-zones sudo firewall-cmd --list-all ``` 如果以上步骤完成后,`firewalld` 的配置仍未能恢复到默认状态,可能需要手动编辑配置文件 `/etc/firewalld/firewalld.conf` 或相关区域文件 `/etc/firewalld/zones/` 并删除所有非默认内容[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值