防火墙分类
iptables
逻辑上划分:主机防火墙、网络防火墙 主机防火墙:针对于单个主机进行防护 网络防火墙:针对网络进行防护,处于网络边缘,防火墙背后是本地局域网 网络防火墙主外(服务集体),主机防火墙主内(服务个人) 物理上划分:硬件防火墙、软件防火墙 硬件防火墙:在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能相较于硬件防火 墙低,成本较低,对于 Linux系统已自带,直接使用即可
Linux包过滤防火墙
netfilter 位于Linux内核中的包过滤功能体系 称为Linux防火墙的“内核态” iptables 位于/sbin/iptables,用来管理防火墙规则的工具 称为Linux防火墙的“用户态”
ACCEPT:允许数据包通过 DROP:直接丢弃数据包,不给任何回应信息。 REJECT:拒绝数据包通过,必要时会给数据发送端一个相应的信息,客户端刚请求就会收到拒绝的信息。 SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题 MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的IP上。 DNAT:目标地址转换 REDIRECT:在本机做端口映射。 L0G:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。即除了记录外不对数据包做任何其他操作,仍,然让下一条规则进行匹配。
iptables的表、链结构
规则链 规则的作用:对数据包进行过滤或处理 链的作用:容纳各种防火墙规则 链的分类依据:处理数据包的不同时机 默认包括5种规则链 INPUT:处理入站数据包 OUTPUT:处理出站数据包 FORWARD:处理转发数据包 POSTROUTING链:在进行路由选择后处理数据包 PREROUTING链:在进行路由选择前处理数据包
规则表 表的作用:容纳各种规则链 表的划分依据:防火墙规则的作用相似 默认包括4个规则表 raw表:确定是否对该数据包进行状态跟踪 mangle表:为数据包设置标记 nat表:修改数据包中的源、目标IP地址或端口 filter表:确定是否放行该数据包(过滤)
iptables安装
关闭firewalld防火墙 systemctl stop firewalld.service 临时关闭 systemctl disable firewalld.service
安装iptables防火墙 yum -y install iptables iptables-services
设置iptables开机启动 systemctl start iptaes.service 临时 systemctl enable iptables.service 开机启动
iptables的基本语法
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] iptables -t filter -I INPUT -p icmp -j REJECT 注意事项 不指定表名时,默认指filter表 不指定链名时,默认指表内的所有链 除非设置链的默认策略,否则必须指定匹配条件 选项、链名、控制类型使用大写字母,其余均为小写
数据包的常见控制类型 ACCEPT:允许通过 DROP:直接丢弃,不给出任何回应 REJECT:拒绝通过,必要时会给出提示 LOG:记录日志信息,然后传给下一条规则继续匹配
添加新的规则 -A:在链的末尾追加一条规则 -I:在链的开头(或指定序号)插入一条规则 查看规则列表 -nL iptables -n -L INPUT 删除、清空规则 -D:删除链内指定序号(或内容)的一条规则 -F:清空所有的规则 设置默认策略 -P:为指定的链设置默认规则 iptables -t filter -P INPUT DROP为指定的链设置默认规则
类别 | 选项 | 用途 |
---|---|---|
添加新的规则 | -A | 在链的末尾追加一条规则 |
-I | 在链的开头(或指定序号)插入一条规则 | |
查看规则列表 | -L | 列出所有的规则条目 |
-n | 以数字形式显示地址、端口等信息 | |
-v | 以更详细的方式显示规则信息 | |
--line-numbers | 查看规则时,显示规则的序号 | |
删除、清空规则 | -D | 删除链内指定序号(或内容)的一条规则 |
-F | 清空所有的规则 | |
设置默认策略 | -P | 为指定的链设置默认规则 |
规则的匹配条件
常见的通用匹配条件 协议匹配:-p 协议名 地址匹配:-s 源地址、-d 目的地址 接口匹配:-i 入站网卡、-o 出站网卡
常用的隐含匹配条件 端口匹配:--sport 源端口、--dport 目的端口 ICMP类型匹配:--icmp-type ICMP类型
常用的显式匹配条件 多端口匹配:-m multiport --sports 源端口列表 -m multiport --dports 目的端口列表 IP范围匹配:-m iprange --src-range IP范围 MAC地址匹配:-m mac --mac-source MAC地址 状态匹配:-m state --state 连接状态
类别 | 条件类型 | 用法 |
---|---|---|
通用匹配 | 协议匹配 | -p 协议名 |
地址匹配 | -s 源地址、-d 目的地址 | |
接口匹配 | -i 入站网卡、-o 出站网卡 | |
隐含匹配 | 端口匹配 | --sport 源端口、--dport 目的端口 |
ICMP类型匹配 | --icmp-type ICMP类型 | |
显式匹配 | 多端口匹配 | -m multiport --sports | --dports 端口列表 |
IP范围匹配 | -m iprange --src-range IP范围 | |
MAC地址匹配 | -m mac --mac-source MAC地址 | |
状态匹配 | -m state --state 连接状态 |
SNAT策略
SNAT策略的典型应用环境 局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理 源地址转换,Source Network Address Translation 修改数据包的源地址
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens33 -j SNAT --to-source 218.29.30.31 POSTROUTING: 路由后 192.168.1.0/24:局域网段地址 ens33:外网接口的名称 218.29.30.31:外网接口的IP地址
共享动态IP地址上网
MASQUERADE —— 地址伪装 适用于外网IP地址非固定的情况 对于ADSL拨号连接,接口通常为 ppp0、ppp1 将SNAT规则改为MASQUERADE即可
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens33 -j MASQUERADE
firewalld
设置开启启动防火墙:systemctl enable firewalld.service
设置开机禁止防火墙:systemctl disable firewalld.service
启动防火墙:systemctl start firewalld 静止防火墙:systemctl stop firewalld
查看防火墙的具体信息,以及检查其状态:systemctl status firewalld
firewall-cmd命令
查看防火墙规则:firewall-cmd --list-all
查看防火墙状态:firewall-cmd --state
重新加载配置:firewall-cmd --reload
打开关闭端口
打开防火墙端口号:firewall-cmd --zone=public --add-port=8080/tcp --permanent
关闭防火墙端口号:firewall-cmd --zone=public --remove-port=9200/tcp --permanent
具体参数讲解 --permanent:设置为永久 --add-port:添加的端口,格式为端口/通讯协议 --zone :作用域
添加完端口号后记得重启以下,才能看见端口号firewall-cmd --reload 查看开放的端口:firewall-cmd --list-ports
显示预定义的区域
firewall-cmd --get-zones
显示预定义的服务
firewall-cmd --get-service
显示预定义的icmp类型
firewall-cmd --get-icmptypes
要允许或阻止特定的 ICMP 类型,您可以使用 firewall-cmd
命令的 --add-icmp-block
和 --add-icmp-block-inversion
选项。例如,要阻止所有 ICMP 流量,可以使用以下命令:
firewall-cmd --add-icmp-block=incoming --permanent firewall-cmd --reload
要仅阻止特定的 ICMP 类型,例如 echo-request
(ping),可以使用:
firewall-cmd --add-icmp-block=echo-request --permanent firewall-cmd --reload
命令中的 --permanent
选项意味着更改将永久生效,并在防火墙服务重载后生效。如果您不使用 --permanent
选项,更改将只在当前会话中生效,并在系统重启或防火墙服务重载后失效。
firewalld防火墙区域
在 firewalld
中,区域(zones)是一个核心概念,它允许管理员根据网络的信任级别来应用不同的防火墙规则。每个区域都有自己的规则集,决定了哪些流量被允许进入或离开系统。
查看区域
firewall-cmd --get-zones
查看默认区域
firewall-cmd --get-default-zone
设置默认区域
firewall-cmd --set-default-zone=public
public
是您想要设置为默认的区域名称。
显示默认区域的所有规则
firewall-cmd --list-all
查看活动区域--显示所有激活区域。
firewall-cmd --get-active-zones
修改接口区域
要将某个接口分配到特定区域,eth0
是您想要分配区域的接口名称,public
是目标区域的名称。
firewall-cmd --zone=public --change-interface=eth0
查看区域规则
要查看特定区域的所有规则,
firewall-cmd --list-all --zone=public
添加或删除服务
要在特定区域中添加或删除服务。
firewall-cmd --zone=public --add-service=http firewall-cmd --zone=public --remove-service=http
永久更改
要在系统重启后保持更改,需要添加 --permanent
选项。
firewall-cmd --zone=public --add-service=http --permanent
在做出永久性更改后,需要重新加载 firewalld
以应用这些更改:
firewall-cmd --reload
显示网络接口 ens33 对应区域
firewall-cmd --get-zone-of-interface=ens33
将网络接口 ens33 对应区域更改为 internal 区域。
firewall-cmd --zone=public --change-interface=ens33 #The interface is under control of NetworkManager,setting zone to 'internal'. #该接口由NetworkManager控制,将区域设置为“内部”。 #success #成功 firewall-cmd --zone=internal --list-interfaces #ens33 firewall-cmd --get-zone-of-interface=ens33 #internal
*firewall-cmd* *命令区域中服务管理的常用选项说明*
[--zone=<zone>]--list-services 显示指定区域内允许访问的所有服务 [--zone=<zone>]--add-service=<service> 为指定区域设置允许访问的某项服务 [--zone=<zone>]--remove-service=<service> 删除指定区域已设置的允许访问的某项服务 [--zone=<zone>]--list-ports 显示指定区域内允许访问的所有端口号 [--zone=<zone>]--add-port=<portid>[-<portid>]/<protocol> 为指定区域设置允许访问的某个/某段端口号(包括协议名) [--zone=<zone>]--remove-port=<portid>[-<portid>]/<protocol> 删除指定区域已设置的允许访问的端口号(包括 协议名) [--zone=<zone>]--list-icmp-blocks 显示指定区域内拒绝访问的所有ICMP类型 [--zone=<zone>]--add-icmp-block=<icmptype> 为指定区域设置拒绝访问的某项ICMP类型 [--zone=<zone>]--remove-icmp-block=<icmptype> 删除指定区域已设置的拒绝访问的某项ICMP 类型,省略--zone=<zone>时表示对默认区域操作
列出可用服务
firewall-cmd --get-services
查看服务的详细信息
firewall-cmd --service=ssh --get-all #ssh 是您想要查看的服务名称。
添加服务
firewall-cmd --zone=public --add-service=http
public
是您想要添加服务的区域名称,http
是您想要添加的服务名称。
删除服务
firewall-cmd --zone=public --remove-service=http
永久更改
要在系统重启后保持更改,需要添加 --permanent
选项。
firewall-cmd --zone=public --add-service=http --permanent
在做出永久性更改后,需要重新加载 firewalld
以应用这些更改:
firewall-cmd --reload
查看当前区域的服务(允许的)
firewall-cmd --list-services
查看特定区域的服务
firewall-cmd --zone=public --list-services
firewalld端口
在 firewalld
中,端口管理是控制网络流量进出系统的关键方面。您可以使用 firewalld
的命令行工具 firewall-cmd
来添加、删除或查询端口的防火墙规则。
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。 但是,对于非预定义的服务只能手动为指定的区域添加端口。
添加端口
firewall-cmd --zone=public --add-port=1626/tcp
public
是您想要添加端口的区域名称,1626/tcp
表示您想要添加的端口和协议。
删除端口
firewall-cmd --zone=public --remove-port=1626/tcp
查看端口
firewall-cmd --zone=public --list-ports
永久更改
firewall-cmd --zone=public --add-port=1626/tcp --permanent
要在系统重启后保持更改,需要添加 --permanent
选项。
在做出永久性更改后,需要重新加载 firewalld
以应用这些更改:
firewall-cmd --reload
运行时和永久配置
firewalld
允许您在运行时(即时生效,但重启后失效)和永久(重启后仍然有效)之间进行选择。如果您不使用 --permanent
选项,更改将只在当前会话中生效,并在系统重启或防火墙服务重载后失效。
两种配置模式
运行时模式 (Runtime mode)
运行时模式 (Runtime mode) 表示当前内存中 运行的防火墙配置,在系统或firewalld 服务重启、停止时配置将失效;
永久模式 (Permanent mode )
表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。
firewall-cmd 命令工具与配置模式相关的选项有三个。
--reload: | 重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。 |
---|---|
--permanent: | **带有此选项的命令用于设置永久性规则,这些规则只有在重新启动**** **firewalld****或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时规则。 |
--runtime-to-permanent: | 将当前的运行时配置写入规则配置文件中,使之成为永久性配置。 |
范围端口
您还可以添加端口范围,而不是单个端口:
firewall-cmd --zone=public --add-port=10000-20000/tcp
协议
firewalld
支持多种协议,包括但不限于 tcp
、udp
和 sctp
。确保在添加端口时指定正确的协议。
开启网关服务器的路由转发功能
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p
禁止ping
firewall-cmd --add-icmp-block=echo-request --zone=external --permanent
将(ens33)网卡配置到某一个区域
firewall-cmd --change-interface=ens33 --zone=external(区域)
查看网卡配置情况
firewall-cmd --get-active-zones