防火墙-firewalld

转载:http://www.52wiki.cn/docs/linux/linux-1ao67g3qlteo0

一.简介

firewalld是centos7系统默认的防火墙,和iptables一样,是使用系统中netfilter内核模块的管理工具。

和iptables不一样的点
firewalld 使用区域和服务而不是链式规则。
它动态管理规则集,允许更新规则而不破坏现有会话和连接。

优点:
支持动态的配置规则
有多个预设的区域,可以在不同环境下,简单方便的变更规则

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf中配置的默认zone 优先级最低

firewalld有的区域(zone)
block(拒绝)
dmz(非军事化)
drop(丢弃)
external(外部)
home(家庭)
internal(内部)
public(公开)
trusted(信任)
work(工作区)

文件:
/etc/firewalld/zones #用户自己定义的
/usr/lib/firewalld #系统配置文件,预定义配置文件

状态

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:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。

二.操作命令

启动
systemctl start firewalld

查看状态
systemctl status firewalld / firewall-cmd --state

停止
systemctl stop firewalld

禁用
systemctl disable firewalld

三.使用命令

firewall的状态

查看防火墙的状态
--state

重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
--reload

重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
--complete-reload

紧急模式,强制关闭所有网络连接,–panic-off是关闭紧急模式
--panic-on

配置集

使用firewall-cmd添加的操作,重启会失效

添加–permanent可以写到配置文件里,永久生效
firewall-cmd --zone=public --add-service=http

区域

可以将配置写到不同与其中,例如public区域允许22端口,而external则允许80端口访问。这样登陆机器开启public,而提供服务的机器开启external。

查看支持的所有ICMP类型
--get-icmptypes

查看所有区域
--get-zones

查看当前的默认区域
--get-default-zone

更改默认的区域
--set-default-zone=work

查看当前正在使用的区域
--get-active-zones

查看当前区域支持的服务
--get-services

查看当前区域开放的服务列表
--list-services

查看此区域内的所有配置,类似与iptables -L -n
--zone=public --list-all

查看所有区域配置
--list-all-zones

限制规则

add添加 remove删除/禁用

将网络接口添加到默认的区域内
--add-interface=eth0

将网络接口在默认的区域内删除
--remove-interface=eth0

添加端口到区域开放列表中
--add-port=12222/tcp

将端口范围添加到开放列表中
--add-port=5000-10000/tcp

添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表中的名称一致)
--add-service=ftp

区域内将http服务删除在开放列表中删除
--remove-service=ftp

添加源地址的流量到指定区域
--add-source=192.168.1.1

删除源地址的流量到指定区域
--remove-source=192.168.1.1

改变指定的接口到其他区域
--change-interface=eth1

确定该网卡接口是否存在于此区域
--query-interface=eth1

开启SNAT(源地址转换)
--add-masquerade

查询SNAT的状态
--query-masquerade

开启SNAT(源地址转换)
--add-masquerade

端口转发,本地513到其他机器的22端口,要开启masquerade
--add-forward-port=port=513:proto=tcp:toport=22:toaddr=192.168.100.101

四.例子

服务与端口

在public中添加一个允许访问http服务
firewall-cmd --zone=public --add-service=http

在public中拒绝访问http服务
firewall-cmd --zone=public --remove-service=http

允许访问12345端口的tcp流量
firewall-cmd --zone=public --add-port=12345/tcp

拒绝访问12345端口的tcp流量
firewall-cmd --zone=public --remove-port=12345/tcp

转发

将本地80端口的流量转发到本地12345端口上
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345

转发到另一台服务器上需要的区域中激活 masquerade。
firewall-cmd --zone=public --add-masquerade

将本地80端口转发到123.456.78.9的8080上
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

将add变成remove就是去除这条
firewall-cmd --zone="public" --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

五.丰富规则

列出你目前的丰富规则
firewall-cmd --list-rich-rules

允许192.168.0.14的所有IPv4流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

拒绝192.168.1.10的ipv4访问22端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'

允许10.1.0.3的ipv4访问80端口的tcp,并把流量转发到6532上
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

六.实际操作

跳板机

跳板机通常只开放22端口,其它关闭,并且只允许某ip连接,其它需要拨VPN

选择public做默认区域
firewall-cmd --set-default-zone=public

允许指定ip访问固定端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address=10.10.10.140 port protocol="tcp" port="22" accept"

对外服务机器

允许所有访问80端口
firewall-cmd --add-port=80/tcp

允许固定ip访问所有端口
firewall-cmd --add-rich-rule 'rule family="ipv4" source address=10.10.10.140 accept'

允许跳板机ip访问22端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address=10.10.10.140 port protocol="tcp" port="22" accept"

内部应用服务器

允许所有端口访问
firewall-cmd --add-port=1-65535/tcp
firewall-cmd --add-port=1-65535/udp

 

猜你喜欢

转载自www.cnblogs.com/flashfish/p/10956720.html