Centos7以上的发行版都试自带了firewalld防火墙的,firewalld去带了iptables防火墙。其缘由是iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。 相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来讲,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户能够根据生产场景的不一样而选择合适的策略集合,从而实现防火墙策略之间的快速切换。shell
区域对于 firewalld 来讲是一大特点,可是对于咱们使用Centos7通常是在服务器上,须要切换zone的需求比较少,因此本文不作介绍了,网上资料也比较多,你们能够去百度找找资料。服务器
启动服务:网络
systemctl start firewalld
这里不用担忧启用了防火墙之后没法经过ssh远程,22端口默认加入了容许规则框架
中止服务:ssh
systemctl stop firewalld
重启服务:tcp
systemctl restart firewalld
查看服务状态:rest
systemctl status firewalld
firewalld 存放配置文件有两个目录,/usr/lib/firewalld
和 /etc/firewalld
,前者存放了一些默认的文件,后者主要是存放用户自定义的数据,因此咱们添加的service或者rule都在后者下面进行。code
server
文件夹存储服务数据,就是一组定义好的规则。server
zones
存储区域规则xml
firewalld.conf
默认配置文件,能够设置默认使用的区域,默认区域为 public,对应 zones目录下的 public.xml
这里须要首先说明的是,在执行命令时,若是没有带 --permanent
参数表示配置当即生效,可是不会对该配置进行存储,至关于重启服务器就会丢失。若是带上则会将配置存储到配置文件,,可是这种仅仅是将配置存储到文件,却并不会实时生效,须要执行 firewall-cmd --reload
命令重载配置才会生效。
firewall-cmd --reload
firewall-cmd --state
firewall-cmd --list-all
firewall-cmd --panic-on # 拒绝全部流量,远程链接会当即断开,只有本地能登录 firewall-cmd --panic-off # 取消应急模式,但须要重启firewalld后才能够远程ssh firewall-cmd --query-panic # 查看是否为应急模式
firewall-cmd --add-service=<service name> #添加服务 firewall-cmd --remove-service=<service name> #移除服务
firewall-cmd --add-port=<port>/<protocol> #添加端口/协议(TCP/UDP) firewall-cmd --remove-port=<port>/<protocol> #移除端口/协议(TCP/UDP) firewall-cmd --list-ports #查看开放的端口
firewall-cmd --add-protocol=<protocol> # 容许协议 (例:icmp,即容许ping) firewall-cmd --remove-protocol=<protocol> # 取消协议 firewall-cmd --list-protocols # 查看容许的协议
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" accept" # 表示容许来自192.168.2.1的全部流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" protocol value="<protocol>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept" # 容许192.168.2.208主机的icmp协议,即容许192.168.2.208主机ping
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" # 容许192.168.2.208主机访问ssh服务
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" # 容许192.168.2.1主机访问22端口
8-11 的各个命令都支持 source address
设置为网段,即这个网段的ip都是适配这个规则:
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
表示容许192.168.2.0/24网段的主机访问22端口 。
8-12 各个命令中,将 accept
设置为 reject
表示拒绝,设置为 drop
表示直接丢弃(会返回timeout链接超时)
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" reject"
表示禁止192.168.2.0/24网段的主机访问22端口 。
firewalld防火墙详解 by xuad88.