基本
#查看状态
systemctl status firewalld
#启动
systemctl start firewalld
#关闭
systemctl stop firewalld
#开机启动
systemctl enable firewalld
#开机禁用
systemctl disable firewalld
配置
#查看版本
firewall-cmd --version
#显示状态
firewall-cmd --state
#查看帮助
firewall-cmd --help
#查看rich规则
firewall-cmd --list-rich-rules
#查看所有开放的端口
firewall-cmd --zone=public --list-ports
#更新防火墙规则
firewall-cmd --reload
区域
#获取支持的区域列表
firewall-cmd --get-zones
#列出全部启用的区域的特性(即查询当前防火墙策略)
firewall-cmd --list-all-zones
特性可以是定义的防火墙策略,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等。上面的命令将会列出每种区域如block、dmz、drop、external、home、internal、public、trusted以及work。如果区域还有其它详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来。
#查看默认区域
firewall-cmd --get-default-zone
#设置默认区域
firewall-cmd --set-default-zone=drop
#获取活动区域
firewall-cmd --get-active-zones
这条命令将用以下格式输出每个区域所含接口:
区域名
interfaces : 接口名
#输出区域全部启用的特性。如果省略区域,将显示默认区域的信息。
firewall-cmd --list-all
#输出指定区域启动的特性
firewall-cmd --zone=public --list-all
#根据接口获取区域即需要查看哪个区域和这个接口绑定即查看某个接口是属于哪个zone的:
firewall-cmd --get-zone-of-interface=接口名
这条命令将输出接口所属的区域名称。
#将接口(网卡)增加到区域
firewall-cmd [–zone=] --add-interface=接口名
如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。
#修改接口所属区域
firewall-cmd [–zone=] --change-interface=接口名
这个选项与 --add-interface 选项相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。
#从区域中删除一个接口
firewall-cmd [–zone=] --remove-interface=接口名
#查询区域中是否包含某接口
firewall-cmd [–zone=] --query-interface=接口名
如果区域被省略了,将使用默认区域
服务
服务是端口和/或协议入口的组合。
#列举所支持的服务
firewall-cmd --get-services
如果区域被省略了,将使用默认区域
#列举区域中启用的服务
firewall-cmd --list-services
如果区域被省略了,将使用默认区域
#查看指定区域中启用的服务
firewall-cmd --zone=home --list-services
#启用区域中的一种服务即给某个区域开启某个服务
firewall-cmd [–zone=区域] --add-service=服务 [–timeout=秒数]
此操作启用区域中的一种服务。如果未指定区域,将使用默认区域。如果设定了超时时间,服务将只启用特定秒数。
firewall-cmd --zone=home --add-service=telnet --timeout=60
使区域中的telnet 服务生效60秒
#禁用区域中的某种服务即关闭某个服务
firewall-cmd [–zone=区域] --remove-service=服务
此举禁用区域中的某种服务。如果未指定区域,将使用默认区域。例:禁止默认区域中的 http 服务:
firewall-cmd --zone=home --remove-service=http
#查询区域中是否启用了特定服务
firewall-cmd [–zone=区域] --query-service=服务
firewall-cmd --zone=public --query-service=telnet
#仅允许部分IP访问本机服务(如http服务)
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" service name="http" accept"
端口和协议组合
定义了 tcp 或 udp 端口,端口可以是一个端口或者端口范围。
#查看所有打开的端口
firewall-cmd --zone=public --list-ports
#启动语法
firewall-cmd [–zone=区域] --add-port=portid[-portid]/protocol [–timeout=seconds]
此操作将启用端口和协议的组合。端口可以是一个单独的端口或者是一个端口范围 - 。协议可以是tcp或udp。
#添加单个端口
firewall-cmd --zone=public --add-port=27017/tcp --permanent
#添加多个端口
firewall-cmd --zone=public --add-port=8080-8083/tcp --permanent
#仅允许部分IP访问本机单个端口
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="8080" accept"
#删除rich规则
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="8080" accept"
#仅允许部分IP访问本机多个端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="30000-31000" accept"
#创建rich规则,可以指定日志的前缀和输出级别
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" port port=8080 protocol="tcp" log prefix=proxy level=warning accept"
可以通过查看/var/log/messages日志文件
#禁用语法
firewall-cmd [–zone=区域] --remove-port=portid[-portid]/protocol
#删除单个端口
firewall-cmd --zone=public --remove-port=27017/tcp --permanent
#删除多个端口
firewall-cmd --zone=public --remove-port=8080-8083/tcp --permanent
#查询语法(查询区域中是否启用了端口和协议组合)
firewall-cmd [–zone=区域] --query-port=portid[-portid]/protocol
IP伪装
私有网络地址可以被映射到公开的IP地址。这是一次正规的地址转换。
ICMP阻塞
可以选择 Internet 控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。
端口转发
端口可以映射到另一个端口以及/或者其他主机。
#查看转发的端口
firewall-cmd --list-forward-ports
#在区域中启用端口转发或映射
语法
firewall-cmd [–zone=区域] --add-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口或者是端口范围 - 。协议可以为tcp或udp。目标端口可以是端口号或者是端口范围 - 。目标地址可以是 IPv4 地址。受内核限制,端口转发功能仅可用于IPv4。
例如将来从external进来的22端口的数据包全部转发到211.106.65.50
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=211.106.65.50
注意:如果不开启伪装IP,端口转发会失败。
#禁止区域的端口转发或者端口映射
语法
firewall-cmd [–zone=] --remove-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
#查询区域的端口转发或者端口映射
语法
firewall-cmd [–zone=]–query-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
应急模式
#启用应急模式阻断所有网络连接,以防出现紧急状况
firewall-cmd --panic-on
#禁用应急模式
firewall-cmd --panic-off
#查询应急模式
firewall-cmd --query-panic
注意:为了使设置永久生效,避免重启后失效,设置需要带上选项–permanent。
防火墙配置目录:/etc/firewalld/,也可通过配置该目录下的XML文件对防火墙的配置进行修改
IP标识法
一个完整IP描述包含IP 地址和子网掩码
具体标识有两种
192.168.0.n 255.255.255.0
192.168.0.n/24
/24表示子网掩码二进制标识法中前面24位1
linux端口范围
port的取值范围是 0 - 65535(即2的16次方),0到1024是众所周知的端口(知名端口,常用于系统服务等,例如http服务的端口号是80)。
个人写的应用程序,尽量不要使用0到1024之间的端口号。
参考: https://blog.51cto.com/xylbk/1757535
参考:https://blog.youkuaiyun.com/wbryfl/article/details/79975552