CentOS7 Firewall超详细使用方法
CentOs7改变的最大处就是防火墙了,下面列用了常用的防火墙规则,端口转发和伪装
一、Firewalld基础规则
--get-default-zone 打印已设置为默认区域的当前区域,默认情况下默认区域为公共区域。
[root@centos7 ~]# firewall-cmd --get-default-zone
public
--new-zone=ZONE_NAME 创建自己的自定义区域
[root@centos7 ~]# firewall-cmd --permanent --new-zone=testing
success
--set-default 修改默认区域
[root@centos7 ~]# firewall-cmd --permanent --set-default-zone=testing
--get-zones 打印所有可用区域的列表
[root@centos7 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
--list-all-zones 显示每个区域的详细信息,为了简单起见,这里只显示一个区域的结果
[root@centos7 ~]# firewall-cmd --list-all-zones public (default, active) interfaces: eth0 sources: services: dhcpv6-client dns http https ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
--get-active-zones 仅列出当前使用的区域,并具有绑定到接口的功能
[root@centos7 ~]# firewall-cmd --get-active-zones
public
interfaces: eth0
--get-services 列出可用于防火墙规则的预定义服务,这些服务与端口绑定
[root@centos7 ~]# firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https
--list-services 列出在区域中允许的服务,下面列出的是默认的公共区域
[root@centos7 ~]# firewall-cmd --list-services dhcpv6-client dns http https ssh
--add-service 在指定区域中添加附加服务,在本示例中,将添加Kerberos服务到公共区域
[root@centos7 ~]# firewall-cmd --add-service=kerberos success [root@centos7 ~]# firewall-cmd --list-services dhcpv6-client dns http https kerberos ssh
--remove-service 移除服务进入区域的访问
[root@centos7 ~]# firewall-cmd --remove-service=kerberos success [root@centos7 ~]# firewall-cmd --list-services dhcpv6-client dns http https ssh
--add-source=IP 向区域添加IP地址或地址范围
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-source=10.10.10.0/24 success
--list-sources 列出已应用于区域的源地址
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --list-sources 10.10.10.0/24
--remove-source=IP 移除已添加到区域的源IP地址或地址范围
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --remove-source=10.10.10.0/24 success
可以将多个IP地址或范围添加为单个区域的源
[root@centos7 ~]# firewall-cmd --add-port=9000/tcp success
--list-ports 列出默认区域允许的端口
[root@centos7 ~]# firewall-cmd --list-ports 9000/tcp
--remove-port 移除已添加过的端口
[root@centos7 ~]# firewall-cmd --remove-port=9000/tcp success
下面的示例将创建一个新的“测试”区域,并将其应用于192.168.1.0/24,然后允许SSH服务和TCP端口9000进入该区域
[root@centos7 ~]# firewall-cmd --permanent --new-zone=test success [root@centos7 ~]# firewall-cmd --permanent --zone=test --add-source=192.168.1.0/24 success [root@centos7 ~]# firewall-cmd --permanent --zone=test --add-service=ssh success [root@centos7 ~]# firewall-cmd --permanent --add-port=9000/tcp --zone=test success [root@centos7 ~]# firewall-cmd --reload success
列出测试区域的信息
[root@centos7 ~]# firewall-cmd --list-all --zone=test test interfaces: sources: 192.168.1.0/24 services: ssh ports: 9000/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
这些类型的规则是相当基本的,接下来我们深入到丰富的规则,提供更大的灵活性
二、Firewalld Rich Rules
富规则通过更大的自定义选项提供了更大的控制级别,富规则也可以用来配置日志记录、伪装、端口转发和速率限制
一旦多个规则到位,它们将按照一定的顺序进行处理,端口转发和伪装规则将首先应用,接着是任何日志规则,然后是任何允许的规则,最后是任何拒绝规则;一个包将使用它所适用的第一条规则,如果它不符合一条规则,它将默认的拒绝
--add-rich-rule=’RULE’ 用来添加指定的规则,在这里,我们允许通过从10.0.0.0/24范围内进入192.168.0.10/32的TCP端口8080到8090
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 destination address=192.168.0.10/32 port port=8080-8090 protocol=tcp accept' success
--list-rich-rules 列出指定区域的所有富规则
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --list-rich-rules rule family="ipv4" source address="10.0.0.0/24" destination address="192.168.0.10/32" port port="8080-8090" protocol="tcp" accept
--remove-rich-rule 移除现有的规则
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --remove-rich-rule='rule family=ipv4 source address=10.0.0.0/24 destination address=192.168.0.10/32 port port=8080-8090 protocol=tcp accept' success
在这里,我们创建了一个富规则来拒绝来自192.168.0.10/24的任何访问
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.0.10/24 reject' success
富规则也可以用来限制速率,在这里,我们将传入SSH连接限制为10次每分钟
[root@centos7 ~]# firewall-cmd --permanent --add-rich-rule='rule service name=ssh limit value=10/m accept' success
富规则也可以用来将消息发送到日志文件,并且日志记录也可以受速率限制,这里,我们记录从192.168.0.0/24的SSH连接,以每分钟不超过50个日志条目的速率记录。只记录级别“info”或更重要的日志。
[root@centos7 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" limit value="50/m" accept' success
三、网络地址转换
NAT可以用Firewalld进行伪装或端口转发,这两种都可以用firewall-cmd来配置,值得注意的是,伪装只能用IPv4而不是IPv6来完成
3.1 用firewalld进行地址伪装
--add-masquerade 在区域内添加伪装
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-masquerade
success
--query-masquerade 查询是否伪装成功
[root@centos7 ~]# firewall-cmd --permanent --query-masquerade
yes
在这个示例中,发送到区域“testing”中定义的地址的任何包都将被伪装
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade' success
在这个例子中,来自192.1681.0/24的任何内容都将被伪装
3.2 用firewalld进行端口转发
在下面的示例中,本地系统将发送到端口22的所有业务转发到10.0.0.10:2222,因此在端口22上发送到该服务器的任何业务将在TCP 2222上转发到外部系统10.0.0.10,在这种情况下,端口转发规则只适用于在“test”区域中指定的源
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-forward-port=port=22:proto=tcp:toport=2222:toaddr=10.0.0.10 success
查询是否成功转发
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --query-forward-port=port=22:proto=tcp:toport=2222:toaddr=10.0.0.10 yes
另一种查看伪装是否已启用的方法
[root@centos7 ~]# firewall-cmd --permanent --list-all --zone=testing testing interfaces: sources: services: ports: masquerade: yes forward-ports: port=22:proto=tcp:toport=2222:toaddr=10.0.0.10 icmp-blocks: rich rules: rule family="ipv4" source address="192.168.1.0/24" masquerad
富规则可以用于更详细的控制,我们可以在test区域内指定一个特定的源地址,而不是整个区域
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 forward-port port=22 protocol=tcp to-port=2222 to-addr=10.0.0.10' success
我们不能使用“to-addr”参数,如果这样,端口转发将完全在本地主机上进行;
我们可以使用“--list-rich-rules”查看指定区域的富规则
[root@centos7 ~]# firewall-cmd --permanent --zone=testing --list-rich-rules rule family="ipv4" source address="192.168.1.0/24" masquerade rule family="ipv4" source address="192.168.1.0/24" forward-port port="22" protocol="tcp" to-port="2222" to-addr="10.0.0.10"