该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。
防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的边界上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件.该计算机流入流出的所有网络通信和数据包均要经过此防火墙,实际上防火墙是一种隔离技术,防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你"同意"的人和数据进入你的网络,同时将你"不同意"的人和数据拒之门外,最大限度地阻止网络中的黑客来访问你的网络.
Iptables防火墙
Iptables的前身叫ipfirewall,这是一个作者从FreeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具.但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的).当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能.
IPTABLES是与 3.5 版本 Linux 内核集成的 IP 信息包过滤系统,如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器,则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置.
网络安全设备的分类:
基础类防火墙:通过数据包过滤加固服务器
IDS类防火墙:入侵检测系统,没有防护能力,仅仅提供事后日志的报告
IPS类防火墙:入侵防御系统
主动安全类防火墙:waf和daf
云盾:相当于代理服务器,有大量带宽,和性能,普通攻击无效
关于常见的DDOS攻击:
SYN攻击:发起最小syn包,通过频繁发送大量数据包,导致CPU消耗殆尽
CC攻击:请求大量请求,通过http协议发起大量正常连接,导致内存消耗殆尽
长连接攻击:通过http1.1协议,建立正常通信,一点一点的发送请求,导致网络带宽消耗殆尽
UDP攻击:DNS攻击,向DNS一直发送解析请求,导致瘫痪
死亡Ping:把你的外网带宽占满,正常主机就无法访问
QPS:代表每秒攻击数
防火墙的安装位置:
工作在主机边缘处或工作在网络边缘处,根据自定义规则或者默认规则对数据报文操作的组件
如果路由器性能比防火墙好,应把路由器放在前面(让路由器抗压)
如果防火墙性能比路由器好,应把防火墙放在前面(让交换机抗压)
如果装在主机与交换机之间,可以隔离内网,但一般不这样配置,不方便
◆替换默认防火墙◆
在早期的Linux系统中,默认使用的是Iptables防火墙管理服务来配置防火墙,尽管新型的防火墙已经投入使用多年,但是大量的企业生产环境中,依然出于各种原因继续使用Iptables,下面我们将手动关闭系统中的Firewall防火墙,而安装Iptables防火墙.
1.在替换之前我们要先将firewalld防火墙关闭,并设置开机禁止启动
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl status firewalld
2.通过Yum仓库安装,Iptables防火墙管理工具
[root@localhost ~]# yum install -y iptables iptables-services
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package iptables-1.4.21-24.el7.x86_64 already installed and latest version
Package iptables-services-1.4.21-24.el7.x86_64 already installed and latest version
Nothing to do
3.启动Iptables并设置成开机自启动.
[root@localhost ~]# systemctl restart iptables
[root@localhost ~]# systemctl enable iptables
[root@localhost ~]# systemctl status iptables
◆配置防火墙实例◆
此处在配置规则的时候,要注意防火墙规则顺序是按照,从上到下的规则匹配的,因此一定要把允许动作放在拒绝动作前面,否则所有流量就被拒绝掉了,从而导致任何主机都无法访问我们的服务.
Iptable常用参数说明:
[root@localhost ~]# iptables --help
Commands:
-P #设置默认策略
-F #清空策略
-L #查看规则链
-A #在规则链末尾加入新规则
-I num #在规则链头部加入新规则
-D num #删除一个规则
-s #匹配来源地址IP/MASK,加!表示除这个IP外
-d #匹配目标地址
-i 网卡名称 #匹配从这块网卡流入的数据
-o 网卡名称 #匹配从这块网卡流出的数据
-p #匹配协议,如TCP,UDP,ICMP
--dport num #匹配目标端口
--sport num #匹配来源端口
[添加配置]
-A #在规则链末尾加入新规则
-I num #在规则链头部加入新规则
[查看配置]
-L #列出所有规则项目
-n #以数字形式显示地址,端口等信息
-v #详细信息显示
--line-numbers #查看规则时,显示规则序号
[删除清空]
-D num #删除一个规则
-F #清空策略
-P #设置默认策略
[协议匹配]
-p 协议名 #匹配协议,如TCP,UDP,ICMP
-s 源地址 #匹配来源地址IP/MASK,加!表示除这个IP外
-d 目标地址 #匹配目标地址
-i 入站网卡 #匹配从这块网卡流入的数据
-o 出站网卡 #匹配从这块网卡流出的数据
[隐含匹配]
--dport 目的端口 #匹配目标端口号
--sport 源端口号 #匹配源端口号
--tcp-flags 检查范围 #tcp标记匹配
--icmp-type ICMP类型 #icmp类型匹配
查询规则: 使用 -L -n --line-numbers
参数查看防火墙默认配置规则.
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
清空规则: 使用 -F
参数暂时清空防火墙规则,需要注意的是暂时清空后下次登陆后依旧会恢复回来.
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
设置默认拒绝: 设置默认拒绝规则,把 INPUT
链设置为默认拒绝,也就是拒绝所有连接请求.
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP) #这里可以看出INPUT链已变成DROP
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
开启ICMP: 在默认规则拒绝的情况下,设置开启ICMP测试,允许主机ping通.
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
允许SSH连接: 在默认拒绝的情况下,设置开启22号端口,允许远程ssh连接到本机.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
规则的删除: 在默认拒绝的情况下,删除INPUT链,第2条数据,删除ICMP规则.
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
[root@localhost ~]# iptables -D INPUT 2
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
指定允许网段: 在默认拒绝的情况下,设置只允许192.168.1.0/24
网段的主机访问本机的22号端口.
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
拒绝指定端口: 在INPUT规则链中,添加拒绝所有人访问本机的8888号端口.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable
2 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
拒绝指定端口: 在INPUT规则链中,添加拒绝192.168.1.20
主机访问本机的80端口.
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 REJECT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable
3 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
拒绝端口范围: 在INPUT规则链中,添加拒绝所有主机访问本机1000-2000端口.
[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 REJECT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable
3 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
4 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1000:2000 reject-with icmp-port-unreachable
5 REJECT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1000:2000 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
SNAT-源地址转换<内网-->公网>: 从本地发出的数据包,经过SNAT后,会自动伪装成公网的IP,并以公网IP访问指定服务.
#例:将本地 192.168.1.1 的请求自动伪装成外网地址 8.8.8.8
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 8.8.8.8
-o #指定外网接口,此处为ens32
-s #指定内网口地址,此处为192.168.1.1
--to-source #外网口的地址
DNAT-目标地址转换<公网-->内网>: 从公网接收的数据包,经过DNAT后,会自动将数据包转到指定的内网主机.
#例:将请求 8.8.8.8 且端口为 80 的数据包,自动映射到内网 192.168.1.1
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 8.8.8.8 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1
--to-destination #内网口地址,此处为192.168.1.1
-i #绑定外网接口,此处为ens32
-d #外网地址,此处为8.8.8.8
-dport #内网端口,此处为80
其他常用总结: 下面是几个生产常用小总结,这些基础很重要,必须要掌握.
iptables -L -n --line-number #查看默认规则
iptables -F #清空当前的规则
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #放行80端口
iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT #插入在顶端一条放行443端口的规则
iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一条443放行规则
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP #丢弃80端口的请求
iptables -I INPUT 2 -p icmp -j DROP #丢弃ICMP请求
iptables -t filter -D INPUT 3 #删除第三条规则
iptables -t filter -P INPUT DROP #设置默认规则,拒绝所有
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #放行80口
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT #放行22口
iptables -A FORWARD -s 192.168.1.10 -j REJECT #拒接IP的转发请求
iptables -I INPUT -s 10.20.30.0/24 -j DROP #丢弃IP网段的入站请求
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
ables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
/sbin/iptables-save #保存规则
配置生产规则: 以下一段脚本,用来配置生产环境中最基本的防火墙规则.
#===================================================================
# 删除已有规则
iptables --delete-chain
iptables --flush
# 禁止进,允许出,允许回环网卡
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#===================================================================
# 允许已建立的或相关连接的通行
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#===================================================================
# 限制80端口单个IP的最大连接数为10
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
# 允许80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
#===================================================================
# 允许SSH端口的连接,脚本自动侦测目前的SSH端口,否则默认为22端口
# 获取SSH端口
if grep "^Port" /etc/ssh/sshd_config>/dev/null;then
sshdport=`grep "^Port" /etc/ssh/sshd_config | sed "s/Port\s//g" `
else
sshdport=22
fi
# 放行SSH端口
iptables -A INPUT -p tcp -m tcp --dport $sshdport -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport $sshdport -j ACCEPT
#===================================================================
# 允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
#===================================================================
# 放行允许DNS解析端口.
# 获取DNS服务器IP
if [ -s /etc/resolv.conf ]
then
DNS1=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'`
DNS2=`cat /etc/resolv.conf |grep nameserver |awk 'NR==2{print $2 }'`
fi
# 放行允许DNS解析端口.
[ ! -z "$DNS1" ] && iptables -A OUTPUT -p udp -m udp -d $DNS1 --dport 53 -j ACCEPT
[ ! -z "$DNS2" ] && iptables -A OUTPUT -p udp -m udp -d $DNS2 --dport 53 -j ACCEPT
#===================================================================
# 保存规则
iptables-save
#===================================================================
firewall 防火墙
在Centos7系统中默认集成了许多防火墙,其中firewalld服务是默认的防火墙工具,它拥有基于CLI和基于GUI的两种工作方式,相比于iptables防火墙firewall支持动态更新的技术并且加入的区域(zone)相关的概念.简单来说,区域就是firewall预先准备了几套防火墙策略的集合,从而实现防火墙之间策列的快速切换技术,从而极大地提升了防火墙的快速切换应用效率.
firewalld跟iptables比起来的两大优势:
1.firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效.
2.firewalld在使用上要比iptables人性化很多,即使不明白"5表5链",而且对TCP/IP协议也不理解也可以实现大部分功能.
3.firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了.
firewall的常用区域说明:
区域 | 默认策略规则 |
---|---|
trusted | 允许所有数据包 |
home | 拒绝流入流量,但是与ssh,mdns,ipp-client,dhcpv6-client服务则允许通过 |
internal | 等同于home区域 |
work | 拒绝流入流量,但是与ssh,ipp-client,dhcpv6-client服务则允许通过 |
public | 拒绝流入流量,但是与ssh,ipp-client,dhcpv6-client服务则允许通过 |
external | 拒绝流入流量,但是与ssh服务相关则允许通过 |
dmz | 拒绝流入流量,但是与ssh服务相关则允许通过 |
block | 拒绝流入流量,除非与流出的流量相关 |
drop | 拒绝流入流量,除非与流出的流量相关 |
◆常用命令说明◆
状态显示相关:
[root@localhost ~]# firewall-cmd --version #显示版本
[root@localhost ~]# firewall-cmd --state #显示运行状态
[root@localhost ~]# firewall-cmd --get-zones #显示所有zone区域
[root@localhost ~]# firewall-cmd --get-active-zones #显示当前使用的区域
[root@localhost ~]# firewall-cmd --get-default-zone #显示默认使用的区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32 #查看ens32网口的区域
[root@localhost ~]# firewall-cmd --zone=public --list-ports #显示public区域所有开放的端口
常用配置相关:
[root@localhost ~]# firewall-cmd --panic-on #拒绝所有包
[root@localhost ~]# firewall-cmd --panic-off #取消拒绝状态
[root@localhost ~]# firewall-cmd --query-panic #查看是否拒绝
查询服务相关:
[root@localhost ~]# firewall-cmd --get-services #显示服务列表
[root@localhost ~]# firewall-cmd --list-service #查询当前放行服务
[root@localhost ~]# firewall-cmd --reload #重新加载防火墙
[root@localhost ~]# firewall-cmd --add-service=nfs #临时允许nfs服务通过
[root@localhost ~]# firewall-cmd --add-service=nfs --permanent #永久允许nfs服务通过
端口管理相关:
[root@localhost ~]# firewall-cmd --add-port=443/tcp #临时开启443端口
[root@localhost ~]# firewall-cmd --add-port=3306/tcp --permanent #永久开启3306端口
[root@localhost ~]# firewall-cmd --remove-port=443/tcp #删除443端口
[root@localhost ~]# firewall-cmd --list-all #显示所有端口列表
[root@localhost ~]# firewall-cmd --add-service=mysql #开放mysql端口
[root@localhost ~]# firewall-cmd --remove-service=http #阻止http端口
[root@localhost ~]# firewall-cmd --list-services #查看开放的服务
[root@localhost ~]# firewall-cmd --add-port=3306/tcp #开放通过tcp访问3306
[root@localhost ~]# firewall-cmd --remove-port=80/tcp #阻止通过tcp访问3306
[root@localhost ~]# firewall-cmd --add-port=233/udp #开放通过udp访问233
[root@localhost ~]# firewall-cmd --list-ports #查看开放的端口
端口转发:
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 #将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.1.1 #将80端口的流量转发至192.168.1.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.1:toport=8080 #将80端口的流量转发至192.168.1.1的8080
◆几个小例子◆
区域查询: 查询firewall服务当前所使用的区域.
[root@localhost ~]# firewall-cmd --get-default-zone
public
特定区域查询: 查看ens32网卡的所在区域信息.
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
public
修改默认区域: 修改ens32的public区域到external区域,并永久生效.
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
public
[root@localhost ~]# firewall-cmd --zone=external --change-interface=ens32
[root@localhost ~]# firewall-cmd --zone=external --change-interface=ens32 --permanent
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
external
设置默认区域: 把当前服务的默认区域设置为external.
[root@localhost ~]# firewall-cmd --get-default-zone
public
[root@localhost ~]# firewall-cmd --set-default-zone=external
success
[root@localhost ~]# firewall-cmd --get-default-zone
external
请求查询: 查询public区域是否允许请求SSH和HTTPS协议的流量.
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
允许请求设置: 把public区域的https请求,永久允许通过.
[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent
success
拒绝请求设置: 把public区域的https请求,设置为永久拒绝.
[root@localhost ~]# firewall-cmd --zone=public --remove-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --remove-service=https --permanent
success
放行端口: 临时放行8080端口,和8081端口.
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
端口转发: 在192.168.1.0/24
网络中的系统,访问本地端口5423
将被转发到本地的80
端口.
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 forward-port port=5423 protocol=tcp to-port=80' --permanent
放行端口: 另一种放行方法放行本地的3260端口.
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 port port=3260 protocol=tcp accept'
放行服务: 另一种方法,放行https服务数据包通过.
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 service name=httpd accept'
[root@localhost ~]# firewall-cmd --list-rich-rule
rule family="ipv4" source address="192.168.1.0/24" service name="https" accept
参考文献:Linux鸟哥私房菜,Linux运维之道