Liunx-10防火墙管理

在生产中,如果使用的是云服务器其实对于四层之间的隔离其实不需要太了解,重点应该在服务的设置上。

大家搜索到这个文章大部分其实还是想关闭自己的防火墙的

liunx关闭防火墙

临时和永久关闭Selinux

临时关闭
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
永久关闭
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
#重启服务才生效

关闭防火墙并设置开机不启动

[root@root ~]# systemctl stop firewalld.service && systemctl disable firewalld.service && iptables -F && setenforce 0
[root@root ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

------解释-----
systemctl status firewalld.service //查看firewall状态
systemctl stop firewalld //关闭
systemctl start firewalld //开启
systemctl disable firewalld //开机自动关闭
systemctl enable firewalld //开机自动启动

iptables

iptables实际上只是位于用户空间的一个面向系统管理员的Linux防火墙的管理工具而已,而真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内核模块,iptables对应在内核中的模块应该是ip_tables

服务相关命令

systemctl stop firewalld.service                #停止firewall
systemctl disable firewalld.service          #禁止firewall开机启动
yum install -y iptables-services        #安装iptables
vim /etc/sysconfig/iptables              #编辑防火墙配置文件
systemctl restart iptables.service      #最后重启防火墙使配置生效
systemctl enable iptables.service    #设置防火墙开机启动
systemctl disable iptables    #禁止iptables服务
systemctl stop iptables        #暂停服务
systemctl enable iptables    #开机自启动iptables
systemctl start iptables        #开启服务

iptables特点

  • iptables是用来衡量tcp/ip报文的五元组:源ip、目标ip、协议、源端口、目标端口;
  • Linux 防火墙工作在用户空间的管理工具
  • netfilter主要工作在tcp/ip协议栈上的,主要集中在tcp报文首部和udp报文首部。
  • 类别
    • 单一主机型:数据包过滤型的Netfilter; 依据服务软件程序作为分析的TCP Wrappers
    • 网路型:数据包过滤型的Netfilter; 利用代理服务器(proxy server)

iptables流程图

在这里插入图片描述

箭头展示了用户访问使用了iptables的机器的过程,其中按照箭头的顺序我们就可以将其梳理为一条大的带有分支的链条,在每个需要进行操作的模块处都标有名称和相应的括号,括号内的就是iptables的四表,而每个模块都可以视为一个链。

iptables 表、链结构

iptables四个表
iptable_nat    地址转换表       #用来管理后端主机的;
iptable_filter 数据过滤表       #管理本机进出的;
iptable_raw    状态跟踪表       #跟踪数据表规则表
iptable_mangle 包标记表         #管理特殊标志使用的mangle(将报文拆开来并修改报文标识位,最后封装起来)

#默认表是filter(没有指定表的时候就是filter表)。

CentOS7中的input链中还有nat表,但是在CentOS6中并没有

表的处理优先级:raw>mangle>nat>filter

iptables五条链

iptables的五个链PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING

  • input 链:当收到访问防火墙本机地址的数据包时,将应用此链中的规则;
  • output 链:当防火墙本机向外发送数据包时,将应用此链中的规则;
  • forward 链:当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则,注意如果需要实现forward转发需要开启Linux内核中的ip_forward功能;
  • prerouting 链:在对数据包做路由选择之前,将应用此链中的规则;
  • postrouting 链:在对数据包做路由选择之后,将应用此链中的规则;
表链之间的关系
  • filter表:用来对数据包进行过滤,具体的规则要求决定如何处理一个数据包。
    对应的内核模块为:iptable_filter,其表内包括三个链:input、forward、output;
  • nat 表:nat 全称:network address translation 网络地址转换,主要用来修改数据包的 IP 地址、端口号信息。
    对应的内核模块为:iptable_nat,其表内包括三个链:prerouting、postrouting、output;
  • mangle 表:主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略路由等。
    对应的内核模块为:iptable_mangle,其表内包括五个链:prerouting、postrouting、input、output、forward;
  • raw 表:主要用来决定是否对数据包进行状态跟踪。
    对应的内核模块为:iptable_raw,其表内包括两个链:output、prerouting;

iptables基本用法

管理程序的文件位置:/var/sbin/iptables

iptables 的基本语法命令格式

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

- 表名、链名:指定iptables命令所操作的表和链,未指定表名时将默认使用filter表;
- 管理选项:表示iptables规则的操作方式,比如:插入、增加、删除、查看等;
- 匹配条件:指定要处理的数据包的特征,不符合指定条件的数据包不处理;
- 控制类型:指数据包的处理方式,比如:
LOG  : 日志
DROP : 丢弃数据包
REJECT : 拒绝数据包通过
ACCEPT : 允许数据包通过
RETURN : 返回主链继续匹配
REDIRECT: 端口重定向
MASQUERADE :地址伪装
DNAT : 目标地址转换
SNAT :源地址转换
MARK :打标签

#管理选项
iptables [-t 表] 大写选项子命令 [规则号] 链名 匹配标准 [-j 目标(规则)]
(大写字母选项:可以实现某种功能,比如添加删除清空规则链;小写字母选项:用来匹配及其他)
-t:指定表 -t {fillter|nat|mangle|raw};
-N:新建自定义链;
-p:协议名和协议号
-X:删除自定义空链,如果链内有”规则,则无法删除
-Z:清空防火墙数据表统计信息
-E:重命名自定义链
-A:在指定链的末尾添加一条新的规则
-D[n]:删除指定链中的某一条规则,可删除指定序号或具体内容
-I[n]:在指定链中插入一条新规则,未指定序号时默认作为第一条规则
-R[n]:修改、替换指定链中的某一条规则,可指定规则序号或具体内容
-L:列出指定链中所有的规则,未指定链名,则列出表中的所有链
-F:清空指定链中所有的规则,未指定链名,则清空表中的所有链
-P:设置指定链的默认策略
-n:使用数字形式显示输出结果
-v:查看规则列表时显示详细的信息
-h:查看命令帮助信息
--line-numbers:查看规则列表时,同时显示规则在链中的顺序号

#示例
清空nat表中的input链,#iptables-t nat -F INPUT
清空fllter表所有链:#iptables -F
查看规则:# iptables -L -n
清空所有规则:#iptables --flush

注意事项:

  1. 可以不指定表,默认认为filter表;
  2. 可以不指定链,默认认为对应表的所有链;
  3. 除非设置默认策略,否则必须指定匹配条件;
  4. 选项/链名/目标操作用大写字母,其余为小写;
  5. 对于数据包被分割成片段发送出去,为了匹配不同的分割数据片,加" -f "选项。
  6. 防止收到大量无效数据包的攻击,限制每秒钟接收数据包的个数,用 “–limit” 扩展功能。
  7. 通过"–string" 设置关键词限制网络连接。

配置示例

iptables 参数(target prot opt source destination)

#target 代表进行的操作;
#prot 代表使用的数据包协议;
#opt 代表额外的选项
#source 来源IP
#destination 目标IP

#在INPUT链的filter表中插入一条规则,限定对192.168.100.100这个IP使用tcp协议访问本机的目的端口80端口的时候拒绝掉数据包
iptables -t filter -A INPUT -p tcp -s 192.168.100.100 --dport 80 -j REJECT 

#在OUTPUT第三行插入配置
iptables -I OUTPUT 3 -p udp -d 172.16.0.0/16 -j ACCEPT  

#拒绝所有人访问服务器(作为最后一条规则
iptables -A INPUT -j DROP

# 删除 filter 表 INPUT 链中的第 2 条规则
iptables -D INPUT 2

#设置 filter 表 INPUT 链的默认规则是 DROP
iptables -P INPUT DROP

#清除filter表INPUT链上的计数器
iptables -Z INPUT

#允许所有访问本机的数据包通过
iptables -A INPUT -j ACCEPT

#阻止来自10.10.10.10 的数据包通过本机
iptables -A FORWARD -s 10.10.10.10 -j DROP

#将内网 192.168.1.0/24 转换为公网18.18.18.18地址;SNAT,用于访问互联网
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 18.18.18.18

#将内网 192.168.1.0/24 转换为公网 18.18.18.18-18.18.18.28地址;SNAT,用于访问互联网
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 18.18.18.18-18.18.18.28

#把从eth0口进来访问TCP/80端口的数据包目的地址改成192.168.1.1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.1

常用附加模块

- 按包状态匹配 (state)-m state --state 状态
#将目前已运行的服务端口全部放行
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

- 按来源 MAC 匹配(mac)-m mac --mac-source MAC
#拒绝来自某 MAC 地址的数据包进入本机
iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP

- 按包速率匹配 (limit)-m limit --limit 匹配速率
#按一定速率去匹配而已,50/s 表示 1 秒中转发 50 个数据包,要想限制的话后面要再跟一条DROP规则
iptables -A FORWARD -d 192.168.1.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.1.1 -j DROP

- 多端口匹配 (multiport)

-m multiport <--sports|--dports|--ports> 端口 1[,端口 2,..,端口 n]

#允许访问本机TCP/22,53,80,443端口该参数必须与 -p 参数一起使用
iptables -A INPUT -p tcp -m multiport --dports 22,53,80,443 -j ACCEPT

备份与还原

工具:iptables-save(备份)和iptables-restore(还原)
防火墙的默认规则存储在/etc/sysconfig/iptables 中,iptables-save将规则保存至该文件中,计算机重启后会加载该文件。
iptables-restore 将备份文件直接导当前防火墙规则。

]# iptables-save > /etc/sysconfig/iptables
]# iptables-save > firewall.bak
]# iptables-restore < firewall.bak

或者

cp /etc/sysconfig/iptables /opt/myipt.rule
iptables-restore < /opt/myipt.rule

Firewalld

概述

  1. firewalld防火墙是Centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。
  2. firewalld和iptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfilter网络过滤子系 统(属于内核态)来实现包过滤防火墙功能。
    firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具。
  3. 它支持IPv4、IPv6防火墙设置以及以太网桥(在某些高级服务可能会用到,比如云计算),
  4. 拥有两种配置模式:运行时配置与永久配置。
  5. firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 iptables 和 ebtables 命令行工具添加的防火墙规则。

Firewalld和iptables的区别

  1. iptables主要是基于接口,来设置规则,从而判断网络的安全性。
    firewalld是基于区域,根据不同的区域来设置不同的规则,从而保证网络的安全。与硬件防火墙的设置相类似。
  2. iptables 在/etc/ sysconfig/iptables 中储存配置,
    firewalld将配置储存在/etc/firewalld/ (优先加载)和/usr/lib/firewalld/ (默认的配置文件)中的各种XML文件里。
  3. 使用iptables每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则。
    使用firewalld却不会再创建任何新的规则,仅仅运行规则中的不同之处。因此firewalld可以在运行时间内,
    改变设置而不丢失现行连接。
  4. iptables防火墙类型为静态防火墙
    firewalld防火墙类型为动态防火墙

Firewalld网络区域

Firewalld区域的概念

firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone) 。然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域。每个区域都定义了自己打开或者关闭的端口和服务列表。

firewalld防火墙预定义的9个区域

①trusted (信任区域) :允许所有的传入流量。
②public (公共区域) :允许与ssh或dhcpv6-client预定义服务匹配的传入流量其余均拒绝。是新添加网络接口的默认区域。
③external (外部区域) :允许与ssh预定义服务匹配的传入流量,其余均拒绝。
默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
④home (家庭区域) :允许与ssh、ipp-client,mdns,samba-cl ient或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
⑤internal (内部区域) :默认值时与home区域相同。
⑥work (工作区域) :允许与ssh、ipp-client、 dhcpv6-client 预定义服务匹配的传入流量,其余均拒绝。
⑦dmz (隔离区域也称为非军事区域) :允许与ssh预定义服务匹配的传入流量,其余均拒绝。
⑧block (限制区域) :拒绝所有传入流量。
⑨drop (丢弃区域) :丢弃所有传入流量,并且不产生包含ICMP的错误响应。

firewalld数据处理流程

firewalld对于进入系统的数据包,会根据数据包的源IP地址或传入的网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。

firewalld检查数据包的源地址的规则
  1. 若源地址关联到特定的区域(即源地址或接口绑定的区域有冲突),则执行该区域所制定的规则。
  2. 若源地址未关联到特定的区域(即源地址或接口绑定的区域没有冲突),则使用传入网络接口的区域并执行该区域所制定的规则。
  3. 若网络接口也未关联到特定的区域(即源地址或接口都没有绑定特定的某个区域),则使用默认区域并执行该区域所制定的规则。

firewalld配置

运行时配置与永久配置
  • 运行时配置

    • 实时生效,并持续至Firewalld重 新启动或重新加载配置
    • 不中断现有连接
    • 不能修改服务配置
  • 永久配置

    • 不立即生效,除非Firewalld重新启 动或重新加载配置
    • 中断现有连接
    • 可以修改服务配置
firewalld防火墙的配置方法
  1. 使用firewall-cmd 命令行工具。
  2. 使用firewall-config 图形工具。
  3. 编写/etc/firewalld/中的配置文件。

常用的firewalld-cmd命令选项

[root@localhost ~]#firewall-cmd
    --reload 重新加载防火墙配置
    --state  查看firewalld的运行状态
    --get-default-zone :显示当前默认区域
    --set-default-zone=<zone> :设置默认区域
    --get-active-zones :显示当前正在使用的区域及其对应的网卡接口
    --get-zones :显示所有可用的区域
    --get-zone-of-interface=<interface> :显示指定接口绑定的区域
    --zone=<zone> --add-interface=<interface> :为指定接口绑定区域
    --zone=<zone> --change-interface=<interface> :为指定的区域更改绑定的网络接口
    --zone=<zone> --remove-interface=<interface> :为指定的区域删除绑定的网络接口
    --zone=<zone> --add-source=<source>[/<mask>]:为指定源地址绑定区域
    --zone=<zone> --change-source=<source>[/<mask>] :为指定的区域更改绑定的源地址
    --zone=<zone> --remove-source=<source>[/<mask>] :为指定的区域删除绑定的源地址

#查询区域中是否包含某接口
firewall-cmd [--zone=<zone>] --query-interface=<interface>

#显示所有区域及其规则
firewall-cmd --list-all-zones 
输出格式是:
<zone>
  interfaces: <interface1> ..
  services: <service1> ..
  ports: <port1> ..
  forward-ports: <forward port1> ..
  icmp-blocks: <icmp type1> ....

firewall-cmd --list-all   # 查看默认区域设置
输出格式是:
Target:目标
icmp-block-inversion:ICMP协议类型黑白名单开关(yes/no)
Interfaces:关联的网卡接口
sources:来源,可以是IP地址,也可以是mac地址
services:允许的服务
ports:允许的目标端口,即本地开放的端口
protocols:允许通过的协议
masquerade:是否允许伪装(yes/no),可改写来源IP地址及mac地址
forward-ports:允许转发的端口
source-ports:允许的来源端口
icmp-blocks:可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许。
rich rules:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。
   
#获取所有支持的服务
firewall-cmd  --get-services 

#获取所有支持的ICMP类型   
firewall-cmd --get-icmptypes

#列举区域中启用的服务
firewall-cmd [ --zone=<zone> ] --list-services

#启用应急模式阻断所有网络连接,以防出现紧急状况
firewall-cmd --panic-on

#禁用应急模式
firewall-cmd --panic-off
应急模式在 0.3.0 版本中发生了变化
在 0.3.0 之前的 FirewallD版本中, panic 选项是 –enable-panic 与 –disable-panic.

#查询应急模式
firewall-cmd --query-panic

#此命令返回应急模式的状态,没有输出。可以使用以下方式获得状态输出:
firewall-cmd --query-panic && echo "On" || echo "Off"

#处理运行时区域
#运行时模式下对区域进行的修改不是永久有效的。重新加载或者重启后修改将失效。

#启用区域中的一种服务
firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]
此举启用区域中的一种服务。如果未指定区域,将使用默认区域。如果设定了超时时间,服务将只启用特定秒数。如果服务已经活跃,将不会有任何警告信息。
例: 使区域中的ipp-client服务生效60秒:
firewall-cmd --zone=home --add-service=ipp-client --timeout=60
例: 启用默认区域中的http服务:
firewall-cmd --add-service=http

#禁用区域中的某种服务
firewall-cmd [--zone=<zone>] --remove-service=<service>
此举禁用区域中的某种服务。如果未指定区域,将使用默认区域。
例: 禁止home区域中的http服务:
firewall-cmd --zone=home --remove-service=http
区域种的服务将被禁用。如果服务没有启用,将不会有任何警告信息。

#查询区域中是否启用了特定服务
firewall-cmd [--zone=<zone>] --query-service=<service>
如果服务启用,将返回1,否则返回0。没有输出信息。

#启用区域端口和协议组合
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
此举将启用端口和协议的组合。端口可以是一个单独的端口 <port> 或者是一个端口范围 <port>-<port> 。协议可以是 tcp 或 udp。
#禁用端口和协议组合
firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
#查询区域中是否启用了端口和协议组合
firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
如果启用,此命令将有返回值。没有输出信息。

#启用区域中的IP伪装功能
firewall-cmd [--zone=<zone>] --add-masquerade
此举启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。这是地址转换的一种形式,常用于路由。由于内核伪装功能一般仅可用于IPv4。
#禁用区域中的IP伪装
firewall-cmd [--zone=<zone>] --remove-masquerade
#查询区域的伪装状态
firewall-cmd [--zone=<zone>] --query-masquerade
如果启用,此命令将有返回值。没有输出信息。

#启用区域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --add-icmp-block=<icmptype>
此举将启用选中的Internet控制报文协议(ICMP)报文进行阻塞。ICMP报文可以是请求信息或者创建的应答报文,以及错误应答。
#禁止区域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --remove-icmp-block=<icmptype>
#查询区域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --query-icmp-block=<icmptype>
如果启用,此命令将有返回值。没有输出信息。
例: 阻塞区域的响应应答报文:
firewall-cmd --zone=public --add-icmp-block=echo-reply

#在区域中启用端口转发或映射
firewall-cmd [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口 <port> 或者是端口范围 <port>-<port> 。协议可以为 tcp 或udp 。目标端口可以是端口号 <port> 或者是端口范围 <port>-<port> 。目标地址可以是 IPv4 地址。受内核限制,端口转发功能仅可用于IPv4。
#禁止区域的端口转发或者端口映射
firewall-cmd [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
#查询区域的端口转发或者端口映射
firewall-cmd [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
如果启用,此命令将有返回值。没有输出信息。
例: 将区域home的ssh转发到127.0.0.2
firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2


#处理永久区域
永久选项不直接影响运行时的状态。这些选项仅在重载或者重启服务时可用。为了使用运行时和永久设置,需要分别设置两者。 选项 –permanent 需要是永久设置的第一个参数。
#获取永久选项所支持的服务
firewall-cmd --permanent --get-services
#获取永久选项所支持的ICMP类型列表
firewall-cmd --permanent --get-icmptypes
#获取支持的永久区域
firewall-cmd --permanent --get-zones
#启用区域中的服务
firewall-cmd --permanent [--zone=<zone>] --add-service=<service>
此举将永久启用区域中的服务。如果未指定区域,将使用默认区域。
#禁用区域中的一种服务
firewall-cmd --permanent [--zone=<zone>] --remove-service=<service>
#查询区域中的服务是否启用
firewall-cmd --permanent [--zone=<zone>] --query-service=<service>
如果服务启用,此命令将有返回值。此命令没有输出信息。
例: 永久启用 home 区域中的 ipp-client 服务
firewall-cmd --permanent --zone=home --add-service=ipp-client
#永久启用区域中的一个端口-协议组合
firewall-cmd --permanent [--zone=<zone>] --add-port=<port>[-<port>]/<protocol>
#永久禁用区域中的一个端口-协议组合
firewall-cmd --permanent [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
#查询区域中的端口-协议组合是否永久启用
firewall-cmd --permanent [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
如果服务启用,此命令将有返回值。此命令没有输出信息。
例: 永久启用 home 区域中的 https (tcp 443) 端口
firewall-cmd --permanent --zone=home --add-port=443/tcp
#永久启用区域中的伪装
firewall-cmd --permanent [--zone=<zone>] --add-masquerade
此举启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。这是地址转换的一种形式,常用于路由。由于内核的限制,伪装功能仅可用于IPv4。
#永久禁用区域中的伪装
firewall-cmd --permanent [--zone=<zone>] --remove-masquerade
#查询区域中的伪装的永久状态
firewall-cmd --permanent [--zone=<zone>] --query-masquerade
如果服务启用,此命令将有返回值。此命令没有输出信息。
#永久启用区域中的ICMP阻塞
firewall-cmd --permanent [--zone=<zone>] --add-icmp-block=<icmptype>
此举将启用选中的 Internet 控制报文协议 (ICMP) 报文进行阻塞。 ICMP 报文可以是请求信息或者创建的应答报文或错误应答报文。
#永久禁用区域中的ICMP阻塞
firewall-cmd --permanent [--zone=<zone>] --remove-icmp-block=<icmptype>
#查询区域中的ICMP永久状态
firewall-cmd --permanent [--zone=<zone>] --query-icmp-block=<icmptype>
如果服务启用,此命令将有返回值。此命令没有输出信息。
例: 阻塞公共区域中的响应应答报文:
firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply
#在区域中永久启用端口转发或映射
firewall-cmd --permanent [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口 <port> 或者是端口范围 <port>-<port> 。协议可以为 tcp 或udp 。目标端口可以是端口号 <port> 或者是端口范围 <port>-<port> 。目标地址可以是 IPv4 地址。受内核限制,端口转发功能仅可用于IPv4。
#永久禁止区域的端口转发或者端口映射
firewall-cmd --permanent [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
#查询区域的端口转发或者端口映射状态
firewall-cmd --permanent [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
#如果服务启用,此命令将有返回值。此命令没有输出信息。
例: 将 home 区域的 ssh 服务转发到 127.0.0.2
firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
区域管理
显示当前系统中的默认区域
firewall-cmd --get-default-zone

显示默认区域的所有规则
firewall-cmd --list-all

显示当前正在使用的区域及其对应的网卡接口
firewall-cmd --get-active-zones

设置默认区域
firewall-cmd --set-default-zone-home
firewall-cmd --get-default-zone
服务管理
查看默认区域内允许访问的所有服务
firewall-cmd --list-service

添加httpd服务到public区域
firewall-cmd --add-service=http--zone=public

查看public区域已配置规则
firewall-cmd --list-all--zone=public

删除public区域的httpd服务
firewall-cmd --remove-service=http--zone=public



同时添加httpd、https服务到默认区域,设置成永久生效
firewall-cmd --add-service=http --add-service=https--permanent
firewall-cmd -- add-service={http, https,ftp}--zone= internal
firewall-cmd --reload
firewall-cmd --list-all
#添加使用-- permanent选项表示设置成永久生效,需要重新启动firewalld服务或执行firewall-cmd -- reload命令
重新加载防火墙规则时才会生效。若不带有此选项,表示用于设置运行时规则,但是这些规则在系统或firewalld服务重启、停止时配置将
失效。
firewall-cmd--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

端口管理
允许TCP的443端口到internal区域
firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --list-all --zone=internal
从internal区域将TCP的443端口移除
firewall-cmd --zone=internal --remove-port=443/tcp
允许UDP的2000~2500端口到默认区域
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --list-all

富规则

rule [family="<rule family>"]
[ source address="<address>" [invert="True"] ]
[ destination address="<address>" [invert="True"] ]
[ <element> ]
[ log [prefix="<prefix text>"]  [level="<log level>"]  [limit value="rate/
duration"] ]
[ audit ]
[ accept|reject|drop ]
参数解释
source限制源IP地址,源地址可以是—个IPv4,IPv6地址或者一个网络地址段
destination限制目标地址,目标地址使用跟源地址相同的语法
log注册有内核曰志的连接请求到规则中。如系统曰志
audit审核,审核类型可以是accept, reject或drop中的一种
accept reject drop指定accept时所有新的连接请求都将被允许。指定reject时连接将被拒绝,发起端将接到—个拒绝信息。指定drop时所有数据包会被丢弃并且不会向发起端发送任何信息
element要素
service服务名称。命令格式为service name = service_name
port端口。命令格式为port port = number _or _range protocoI = protocoI
protocol协议。命令格式为 protocol value = protocol_name_or _ID
icmp-block阻断—个或多个 ICMP类型。命令格式为icmp-block name = icmptype_name
masquerade规则里的IP伪装。
forward-port将指定的TCP或UDP协议的数据包转发到本机的其他端口。

配置示例

#把ens32网卡关联的区域修改为drop
firewall-cmd --permanent --zone=drop --change-interface=ens32   # 永久设置
firewall-cmd --zone=drop --change-interface=ens32   # 当前生效

#来自ens33网卡的流量都作用到默认的drop区域
firewall-cmd --zone=drop -add-interface=ens33   # 作用在指定区域
firewall-cmd -add-interface=ens33   # 作用在默认区域
firewall-cmd -remove-interface=ens33  # 禁止ens33网卡作用在drop区域

#启动关闭firewalld防火墙服务的应急状况模式,远程连接服务器时请慎用
firewall-cmd --panic-on  # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd --panic-off  # 取消应急模式,但需要重启firewalld后才可以远程ssh
firewall-cmd --query-panic  # 查看是否为应急模式

#设置一个来源地址作用在drop区域上面
firewall-cmd --zone=drop --add-source=192.168.1.12  # 作用在指定区域
firewall-cmd --add-source=192.168.1.12  # 作用在默认区域
firewall-cmd --remove-source=192.168.1.12  # 取消源IP为192.168.1.12的包作用在drop区域

在drop区域开放https服务
firewall-cmd --zone=drop --add-service=https
取消开放https服务,即禁止https服务
firewall-cmd --zone=drop --remove-service=https
开放22端口
firewall-cmd --zone=drop --add-port=22/tcp
取消开放22端口
firewall-cmd --zone=drop --remove-port=22/tcp
开放8080和8081端口
firewall-cmd --zone=drop --add-port=8080-8081/tcp
查询drop区域开放了哪些端口
firewall-cmd --zone=drop --list-ports
允许icmp协议流量,即允许ping
firewall-cmd --zone=drop --add-protocol=icmp
取消允许icmp协议的流量,即禁ping
firewall-cmd --zone=drop --remove-protocol=icmp
查询drop区域开放了哪些协议
firewall-cmd --zone=drop --list-protocols
将原本访问本机888端口的流量转发到本机22端口
firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22

富规则的设置

允许192.168.2.208主机的所有流量
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" accept"
允许192.168.2.208主机的icmp协议,即允许192.168.2.208主机ping
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept"
取消允许192.168.2.208主机的所有流量
firewall-cmd --zone=drop --remove-rich-rule="rule family="ipv4" source address="192.168.2.208" accept"
允许192.168.2.208主机访问ssh服务
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept"
禁止192.168.2.208访问https服务,并返回错误信息
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="https" reject"
注:如果是drop的话是直接丢弃,会返回timeout(连接超时)
允许192.168.2.0/24网段的主机访问22端口
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
每分钟允许2个新连接访问ftp服务
firewall-cmd --add-rich-rule="rule service name=ftp limit value=2/m accept"
允许新的ipv4和ipv6连接ftp,并使用日志和审核,每分钟允许访问一次
firewall-cmd --add-rich-rule="rule service name=ftp log limit value="1/m" audit accept"
拒绝来自192.168.2.0/24网段的连接,10秒后自动取消
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 reject" --timeout=10
允许ipv6地址为2001:db8::/64子网的主机访问dns服务,并且每小时审核一次,300秒后自动取消
firewall-cmd --add-rich-rule="rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject" --timeout=300
将来自192.168.2.0/24网段访问本机80端口的流量转发到本机的22端口
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 forward-port port=80 protocol=tcp to-port=22"
将来自192.168.2.0/24网段访问本地80端口的流量转发到192.168.2.208主机的22端口
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 forward-port port=80 protocol=tcp to-port=22 to-addr=192.168.2.208"
伪装,将来自局域网192.168.2.0/24网段访问外网的流量映射为网络出口公网IP,即修改源IP地址

#应用
firewall-cmd --zone=drop --add-masquerade
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 masquerade"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值