Linux防火墙详解

防火墙介绍

inux防火墙主要工作在网络层,属于典型的包过滤防火墙。在RHEL中常用的有两种火墙工具iptables和firewalld,但软件本身其实并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样罢了,真正利用规则进行过滤是由内核netfilter完成的。
netfilter IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的 链(chain)中。我马上会详细讨论这些规则以及如何建立这些规则并将它们分组在链中。
在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。如下图:
在这里插入图片描述

iptables和firewalld的区别

  1. 与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:

    FirewallD 使用区域和服务而不是链式规则。
    FirewallD可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。

  2. Firewalld 跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。

  3. iptables 服务在 /etc/sysconfig/iptables 中储存配置,而 FirewallD 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里,使用 iptables 的时候每一个单独更改意味着清除所有旧有的规则和从 /etc/sysconfig/iptables 里读取所有新的规则,使用 firewalld 却不会再创建任何新的规则;仅仅运行规则中的不同。因此 FirewallD 可以在运行时改变设置而不丢失现行配置。

火墙策略之三链五表

netfilter是Linux 2.4内核引入的全新的包过滤引擎。由一些数据包过滤表组成,这些表包含内核用来控制信息包过滤的规则集。iptables等等都是在用户空间修改过滤表规则的便捷工具。

netfilter在数据包必须经过且可以读取规则的位置,共设有5个控制关卡。这5个关卡处的检查规则分别放在5个规则链中(有的叫钩子函数(hook functions)。也就是说5条链对应着数据包传输路径中的5个控制关卡,链中的规则会在对应的关卡检查和处理。任何一个数据包,只要经过本机,必然经过5个链中的某个或某几个。

PREROUTING数据包刚进入网络接口之后,路由之前,
INPUT数据包从内核流入用户空间。
FORWARD在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤。
OUTPUT数据包从用户空间流出到内核空间。
POSTROUTING路由后,数据包离开网络接口前。
默认表表中存放数据
filter经过本机内核的所有数据(input output forward)
nat不经过内核的数据(postrouting prerouting input output)
mangle当filter和nat表不够用时使用,表中记录对链数据的补充解释说明(input output forward postrouting prerouting)

iptables的使用

因为防火墙之间存在冲突,所以在使用iptables时须关闭并冻结firewalld

yum install iptables-services
systemctl mask firewalld
systemctl enable --now iptables.service

保存策略

** 方法一**
iptables-save > /etc/sysconfig/iptables
方法二
service iptables save

iptables命令

iptables
-t ##指定表名称
-n ##不做解析
-L ##查看
-A ##添加策略
-p ##指定协议
–dport ##指定目的地端口
-s ##指定来源
-j ##指定动作
ACCEPT ##允许
DROP ##丢弃
REJECT ##拒绝
SNAT ##源地址转换
DNAT ##目的地地址转换
-F ##清空表中策略
-N ##新建链
-E ##更改链名称
-X ##删除链
-D ##删除规则
-I ##插入规则
-R ##更改规则
-P ##更改默认规则
注意:火墙策略是由上到下读取,当第一条与第二条发生冲突时,第一条策略生效。

查看表filter策略
在这里插入图片描述
清空策略,在INPUT链中指定允许所有,查看策略(默认查看filter)
在这里插入图片描述
删除INPUT链中的第一条策略
在这里插入图片描述

iptables -P INPUT DROP 改变INPUT链的默认状态为丢弃

在这里插入图片描述

指定协议为tcp,端口为22的被允许
在这里插入图片描述

firewalld的使用

firewalld的开启与关闭

systemctl disable --now iptables.service 关闭
systemctl unmask firewalld.service 解冻
systemctl enable --now firewalld.service 开启
systemctl mask iptables.service 冻结

firewall的模式

trusted信任模式:接受所有连接
home家庭网络:允许ssh,mdns, ipp-client, samba-client, dhcp-client
work工作网络:允许ssh, ipp-client, dhcp-client
public公共模式:ssh,dhcp-client
dmz军工级:ssh
block拒绝所有
drop丢弃,所有的连接都不回复
intter内部网络:ssh,mdns,ipp-client,samba-client
external ipv4网络地址伪装发送 sshd

管理命令

    firewall-cmd --state    ##查看火墙状态
    firewall-cmd --get-active-zones    ##查看当前火墙中生效的域
    firewall-cmd --get-default-zone    ##查看默认域
    firewall-cmd --list-all    ##查看默认域中的火墙策略
    firewall-cmd --list-all --zone=work    ##查看指定域的火墙策略
    firewall-cmd --set-default-zone=trusted    ##设定默认域
    firewall-cmd --get-services    ##查看所有可以设定的服务
    firewall-cmd --permanent --remove-service=cockpit    ##移除服务(刷新后生效)
    firewall-cmd --reload    重启服务
    firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block    ##指定数据来源访问指定域
    firewall-cmd --reload    
    firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block    ##删除自定域中的数据来源
    firewall-cmd --permanent --remove-interface=ens224 --zone=public    ##删除指定域的网络接口
    firewall-cmd --permanent --add-interface=ens224 --zone=block    ##添加指定域的网络接口
    firewall-cmd --permanent --change-interface=ens224 --zone=public    ##更改网络接口到指定域

高级规则

firewall-cmd --direct --get-all-rules :查看高级规则

firewalld中的NAT地址转换

firewall-cmd --add-masquerade
firewall-cmd --reload

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值