centos7新的firewalld防火墙有区域的概念,默认有下面九个区域,各自的作用如下
drop 任何传入本机的网络数据包都会被丢弃,并且不会回复,只允许本 机对外访问其他的服务器,推荐把需要进行网络限制的网卡绑定到这个区域
block 任何传入本机的网络数据包都会被丢弃,并且会回复一条拒绝访问的消息,只允许本机对外访问其他的服务器
public 除了ssh连接的22端口和dhcpv6-client的546端口,其他传入本机的网络数据包都会被丢弃,系统默认的防火墙就工作在这个区域
external 除了ssh连接的22端口和端口转发的连接,其他传入本机的网络数据包都会被丢弃
dmz 除了ssh连接的22端口,其他传入本机的网络数据包都会被丢弃
work 除了ssh连接的22端口和dhcpv6-client的546端口,其他传入本机的网络数据包都会被丢弃
home 除了ssh连接的22端口和dhcpv6-client的546端口,mdns的5353端口,samba服务的137,138端口,其他传入本机的网络数据包都会被丢弃
internal 除了ssh连接的22端口和dhcpv6-client的546端口,mdns的5353端口,samba服务的137,138端口,其他传入本机的网络数据包都会被丢弃
trusted 所有对本机的网络连接请求都会被接受,如果不想对网络进行任何限制,就把接口绑定到这个区域
使用firewall-cmd命令来对防火墙进行配置,经常使用的参数如下
--get-default-zone 查看系统默认的区域名称
--set-default-zone=<区域名称> 设置系统默认的区域名称并永久生效
--get-zones 显示可用的区域
--get-services 显示可用的服务
--get-active-zones 显示当前正在使用的区域
--add-source=ip地址或ip地址段 把源自此ip地址或ip地址段的流量导入到指定的区域
--remove-source=ip地址或ip地址段 在指定的区域移除此ip地址或ip地址段的流量
--get-zone-of-interface=<网卡名称> 查看该网卡所在的区域
--add-interface=<网卡名称> 把该网卡的流量绑定到某个区域
--change-interface=<网卡名称> 把该网卡的流量更改到某个区域,一般使用这个命令,来对网卡的区域进行改变
--list-all 显示当前指定区域的网卡配置
--list-all-zones 显示所有区域的网卡配置
--add-port=<端口号> 添加端口
--remove-port=<端口号> 删除端口
--reload 让防火墙重新应用新更改的规则
--add-rich-rule 创建富规则
--remove-rich-rule 删除富规则
--panic-on 开启应急状况模式,会断开所有连接,只能本地登陆系统
--panic-off 关闭应急状况模式,这时就可以远程连接机器
--zone 指定区域
如果想让更改的规则永久生效,那么就需要在firewall-cmd命令后面加入
firewall-cmd --permanent
规则添加完了,以后在使用
firewall-cmd --reload
让规则生效
如果添加的规则,没有添加这个参数,那么系统重启后,新增加的规则就会失效
使用下面的命令启动和停止防火墙
systemctl start firewalld.service
systemctl restart firewalld.service
systemctl stop firewalld.service
firewall-cmd --get-active-zones
查看系统当前正在使用的区域和关联的网卡
firewall-cmd --zone=trusted --list-all
查看指定区域的详细配置,本例查看的是trusted区域
firewall-cmd --zone=drop --change-interface=ens33
把ens33网卡的区域设置为drop,这样任何想连接ens33的流量都会被丢弃,所有机器都不能访问ens33网卡,推荐把需要进行网络限制的网卡进行这样的设置,然后根据需要来开放某些端口,让指定的ip地址来访问
要把端口对某个ip地址开放,就需要使用下面的命令来进行设置
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.0.81" port protocol="tcp" port="22" accept"
上面的命令,就是在drop区域,设置了一条富规则,这个规则的意思就是允许192.168.0.81这个ip地址,可以访问22端口
如果要移除这个富规则,就使用下面的命令
firewall-cmd --zone=drop --remove-rich-rule="rule family="ipv4" source address="192.168.0.81" port protocol="tcp" port="22" accept"
想对网卡进行网络限制,就按照上面的规则设置就可以了
对于一个接受到的请求,具体使用哪个zone,防火墙是根据下面的规则来进行判断的:
一:source,来源地址
二,interface,接受请求的网卡地址
三,防火墙配置的默认区域
判断顺序就是按照上面的顺序来进行的,比如在
192.168.0.80上面配置了防火墙,然后在192.168.0.81上面访问192.168.0.80
那么192.168.0.80上面的防火墙,会首先判断网络请求的来源地址,本例就是192.168.0.81,如果防火墙中没有对这个来源地址配置规则,那么防火墙开始判断接受请求的网卡有没有配置规则,如果接受请求的网卡也没有配置规则,那么就会对这个请求按照防火墙配置的默认区域的规则进行处理
比如在192.168.0.80的上面设置了下面的防火墙规则
firewall-cmd --zone=trusted --add-source=192.168.0.81
firewall-cmd --zone=drop --change-interface=ens33
因为192.168.0.81作为来源地址,被绑定到了trusted区域,所以只要来源是192.168.0.81的网络请求,都会被trusted区域的规则处理,如果是其他的ip地址,并且是访问ens33网卡的,那么因为防火墙规则没有绑定其他的来源地址,所以都会被ens33网卡绑定的drop区域的规则处理
还有一点要注意,一个来源地址只能被绑定到一个区域,不能被绑定到多个区域,如果要更改绑定区域,要先删除原来的绑定区域
比如上面要把来源地址192.168.0.81绑定到home区域,那么就要先删除原来绑定的trusted区域
使用下面的命令进行删除
firewall-cmd --zone=trusted --remove-source=192.168.0.81
在drop区域开放80端口
firewall-cmd --zone=drop --add-port=80/tcp
这个规则的作用就是允许任意地址访问80端口
在drop区域,允许ping
firewall-cmd --zone=drop --add-protocol=icmp
在drop区域,禁止ping
firewall-cmd --zone=drop --remove-protocol=icmp
注意上面的规则,都没有使用–permanent参数,所以只要服务器重启,这些规则就会失效,如果想让这些规则永久生效,就需要在这些规则前面加入–permanent参数
比如像下面这样
firewall-cmd --permanent --zone=trusted --add-source=192.168.0.198
firewall-cmd --permanent --zone=drop --add-interface=ens33
firewall-cmd --permanent --zone=drop --add-protocol=icmp
firewall-cmd --reload
上面就是使用–permanent参数添加了3条防火墙的规则,最后使用firewall-cmd --reload命令来让配置立即生效,并且上面配置的规则在服务器重启以后,还会继续生效