Linux防火墙配置(iptables和firewalld)

电子说

1.3w人已加入

描述

防火墙基本概念

防火墙就是根据系统管理员设定的规则来控制数据包的进出,主要是保护内网的安全,目前 Linux 系统的防火墙类型主要有两种:分别是 [iptables] 和 firewalld

Iptables-静态防火墙

早期的 Linux 系统中默认使用的是 iptables 防火墙,配置文件在 / etc/sysconfig/iptables

主要工作在[网络层]

使用链式规则,只可以过滤互联网的数据包,无法过滤从内网到内网的数据包 Iptables 只可以通过命令行进行配置 Iptables 默认是允许所有,需要通过拒绝去做限制 Iptables 在修改了规则之后必须得全部刷新才可以生效,还会丢失连接(无法守护进程)

Firewalld-动态防火墙

取代了之前的 iptables 防火墙,配置文件在 / usr/lib/firewalld 和 / etc/fiewalld 中,主要工作在网络层,新增区域概念,不仅可以过滤互联网的数据包,也可以过滤内网的数据包,Firewalld 不仅可以通过命令行进行配置,也可以通过图形化界面配置,Firewalld 默认是拒绝所有,需要通过允许去放行,Firewalld 可以动态修改单条规则,动态管理规则集(允许更新规则而不破环现有会话和连接,可以守护进程)

注意事项

iptables 和 firewaldl 都只是 linux 防火墙的管理程序,真正的防火墙执行者是位于内核的 netfilter,只不过 firwalld 和 iptables 的结果以及使用方法不一样 在配置防火墙时,不建议两种配置方法结合使用(建议只使用其中的一种)

Iptables 讲解

Iptables 配置防火墙依靠四个部分实现:表、规则链、规则(匹配条件)、控制类型组成

Iptables 表

处理优先级由高到低,表与表之间都是独立的

raw表

是否对某个数据包进行状态追踪(包含 OUTPUT、PREAUTING 两个规则链)

mangle表

修改数据包内容;可以做流量整形、对数据包设置标记(包含所有规则链)

nat表

负责地址转换功能;修改数据包中的源目 IP 地址或端口(包含 IN、OU、PR、PO 三个规则链)

filter表

负责过滤数据包;对数据包时允许放行还是不允许放行(包含 IN、OU、FO 三个规则链) Iptables 规则链

什么是规则链

很多个规则组成一个规则链,数据包从上往下做匹配,匹配成功就结束匹配,并执行相应的控制类型(建议需要将精准的策略放在上面)

规则链类型

INPUT         处理入站的数据包(处理目标是本机的数据包) OUTPUT        处理出站的数据包(处理源是本机的数据包,一般不在此链上做规则) PREROUTING      在进行路由选择前处理数据包(一般用来做 NAT Server) POSTROUTING     在进行路由选择后处理数据包(一般用来做源 NAT) FORWARD         处理转发的数据包(处理经过本机的数据包)

Iptables 控制类型

ACCEPT              允许数据包通过 DROP                   丢弃数据包(不给对方回应,一般工作时用这个) REJCET              拒绝数据包通过(会给对方回应,对方知道自己被拒绝) SNAT              修改数据包的源地址 DNAT              修改数据包的目的地址 MASQUERADE      伪装程一个非固定的公网 IP 地址 LOG              在 / var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则

数据包到达防火墙根据下图进行匹配

iptables 进行数据处理关心的是四表五链以及流量的进出

数据包

Iptables 命令配置

配置 iptables 防火墙时需要将防火墙服务开启

systemctl start firewalld   开启防火墙 systemctl status firewalld  查看防火墙状态

数据包

Iptables命令查看防火墙

iptables -nL -t nat  查看 nat 表的规则链 -n 使用数字形式显示输出结果(如:通过 IP 地址) -L 查看当前防火墙有哪些策略 -t 指定查看 iptables 的哪个表(默认是 filter 表)

数据包

Iptables命令配置防火墙

 

> iptables -P INPUT DROP将 INPUT 规则链的默认流量更改为拒绝
> -P 设置 / 修改默认策略
> iptables -t filter -I INPUT -s 192.168.10.0/24 -j ACCEPT在 filter 表下的 INPUT 规则链中配置规则
> -I num 插入规则(大写 i,默认在链的开头加入规则,可以指定序号)
> -i  从这块网卡流入的数据
> -o 从这块网卡流出的数据
> -s  源地址(加!表示取反)
> -d 目的地址
> -j  限制动作
> iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT拒绝 tcp 端口号为 1000~1024 的数据包
> -A 在链的末尾加入规则
> -p 指定协议类型
> --sport 源端口
> --dport 目的端口
> iptables -D INPUT 1删除 INPUT 规则链的第一条规则
> -D num 删除规则链
> -R 修改规则
> iptables -F清空已有的策略
> iptables-save来保存防火墙策略

 

注意事项

当创建的规则内容与已有规则一致时,不会覆盖原先的规则,会直接加入到现有规则链中(即此时此规则链下有两条一摸一样的规则,只是顺序不同) 以上关于防火墙的配置是 runtime 模式,即配置成功后立即生效,但是重启后会失效(需要将配置保存,重启后才不会失效)

firewalld 讲解

frewalld 是服务名称,firewall-cmd 和 firewall-config 是配置工具名称

firewall-cmd  基于命令行配置

firewall-config 基于图形化界面配置(这两个配置方式实时同步)

Firewalld 区域概念

默认所有网卡都是 public 区域,可以根据需要将网卡设置为不同的区域

 

> Trust信任区域
> 允许所有流量(所有的网络连接都可以接受)
> Public公共区域
> 仅接受 ssh、dhcpv6-client 服务连接(默认区域)
> External外部区域
> 仅接收 ssh 服务连接(默认通过此区域转发的 IPv4 流量将会进行地址伪装)
> Home家庭区域
> 仅接受 ssh、msdns、ipp-client、samba-client、dhcpv6-client 服务网络连接
> Internal内部区域
> 同 home 区域
> Work工作区域
> 仅接受 ssh、ipp-client、dhcpv6-client 服务连接
> Dmz隔离区域(非军事区域)
> 仅接收 ssh 服务连接
> Block限制区域
> 拒绝所有传入流量(有回应)
> Drop丢弃区域
> 丢弃所有传入流量(无回应)

 

数据包到达防火墙匹配规则

firewall 进行数据处理只关心区域

1.根据数据包的源 IP 地址匹配,根据源地址绑定区域的区域规则进行匹配(如果没有绑定区域则匹配默认区域的规则)

2.根据传入的网络接口匹配,进入此接口绑定区域的区域规则进行匹配(如果没有绑定区域则匹配默认区域的规则)绑定源地址的区域规则>网卡绑定的区域规则>默认区域的规则

Firewalld 两种配置方法

临时配置(runtime 当前生效表)

立即生效,重启后失效,不中断现有连接,无法修改服务配置永久配置(permanent 永久生效表)

不立即生效,重启后生效,或者立即同步后生效 会终端现有连接 可以修改服务配置

firewall-cmd 命令行基础配置

如何实现永久配置

--permanent表示此配置加入到永久生效(默认临时生效) 或者在配置结束后执行此命令 firewall-cmd --runtime-to-permanent 将临时更改为永久 永久配置完成后需要立即同步 firewall-cmd --reload立即同步永久配置

查看默认区域并进行更改

 

> firewall-cmd --get-zones               查询可用的区域
> firewall-cmd --get-default-zone          查询默认区域的名称
> firewall-cmd --get-active-zone           显示当前正在使用的区域与网卡名称
> firewall-cmd --set-default-zone=trusted    设置默认区域为 trusted 区域

 

数据包将网卡 / 子网与区域绑定(允许 / 拒绝此子网通过)

 

> firewall-cmd --zone=drop --add-source=192.168.20.0/24将此子网与 drop 区域绑定(拒绝从此子网发来的流量)
> firewall-cmd --zone=trusted--add-interface=ens160  将此网卡与 trusted 区域绑定(允许从此网卡发来的流量)
> --remove-source  删除子网与区域的绑定
> --change-source  更改子网与区域的绑定
数据包

 

配置区域允许 / 拒绝的协议 / 端口号

 

> firewall-cmd --list-all显示当前区域的端口号、网卡、服务等信息
> --list-all-zones        显示所有区域的
> firewall-cmd --get-services                     列举出来当前所有被允许的协议
> firewall-cmd --zone=public --add-service http    配置 public 区域允许通过 http 协议
> --remove-service ssh    拒绝通过 ssh 协议
> --add-port=123/tcp     允许通过 tcp 的 123 端口
> --remove-port=123/tcp  拒绝通过 tcp 的 123 端口
> cat /etc/services     保存的协议类型和端口号
数据包

 

配置协议端口转换(端口映射)

 

> firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.1
> 将 192.168.10.1 主机的 tcp 22 端口号转为 888 端口号(public 区域接收 ssh)
> --remove-forward-port 删除此端口映射

 

数据包其它配置

 

> --panic-on  紧急模式,切断一切的网络连接(特殊情况去使用)
> --panic-off 恢复一切的网络连接

 

配置富规则 rich(更复杂、更详细的防火墙策略配置)

优先级最高(高于默认规则,两个并不冲突) 能够根据源目地址、端口号来限制用户

 

> firewall-cmd  --zone=public --list-rich-rule  显示 public 区域已经配置的富规则
> firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"source address="192.168.100.1/24"service 允许来自 192.168.

 

100.1 的主机访问 22 端口

 

> --add-rich-rule         添加一个富规则
> --remove-ruch-rule     删除一个富规则
> reject                  拒绝访问
数据包

 

firewall-config 图形化配置

安装 firewall-config

配置 Yum 源(软件仓库)
安装软件 dnf install firewall-config数据包

系统界面讲解

1:选择运行时(Runtime)或永久(Permanent)模式的配置

2:选择区域

3:当前正在使用的区域(黑色加粗)

4:管理当前被选中区域中的服务

5:管理当前被选中区域中的端口

6:设置允许被访问的协议

7:设置允许被访问的端口

8:开启或关闭 SNAT(源网络地址转换)技术

9:设置端口转发策略

10:控制请求 icmp 服务的流量

11:被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量数据包

12:管理防火墙的富规则

13:网卡信息(网卡与区域绑定信息)

14:子网信息(子网与区域绑定信息)数据包

15:查看常用的服务协议列表数据包

16:主机地址的黑白名单数据包数据包

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分