CentOS7 firewalld
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS7 firewalld相关的知识,希望对你有一定的参考价值。
CentOS 7 默认使用的是firewalld来管理主机的网络连接,当然,如果对firewalld不熟悉的话,安装iptables-services 就可以像管理之前的版本一样使用iptables对网络进行配置。这里分别对两种方式进行简单的介绍。
Firewalld介绍
Firewalld使用firewalld-cmd工具来对防火墙进行配置。firewalld使用“区域”的概念将不同的网络安全级别区分开,从不安全区到安全区的顺序如下:
drop: 最低的安全级别区域, 所有从这个区域进来的连接请求都会被丢弃,只有到此区域的流量才会被允许。
block: 与drop策略类似, 不同的是进入的连接请求会返回
icmp-host-prohibited
或者icmp6-adm-prohibited
的消息.public: 相当于公共网络,不信任的网络区域,一般的连接请求会被拒绝,只有少数自定义的连接请求会被允许.
external: 如果firewall被当做网关的时候外部请求所在的区域, 通过配置NAT转换的方式来保证私密性,与内部信任的网络进行通信。
internal: 以网关为边界,在external区的另外一端, 网关的安全策略,这个区域的连接被认为是安全的,并允许一些附加的服务连接。
dmz: 用于主机对DMZ区域的识别。只有少数确定的连接请求会被接受 (DMZ: 一些被内部隔离的主机,可能有不安全的连接行为,如对外的代理服务器等).
work: 用于工作的主机区域. 大多数的连接请求被认为是安全的. 更多一些的服务请求会被允许.
home: 家庭网络。它通常意味着信任大多数其他计算机,并且将接受更多的服务。
trusted: 信任网络中的所有机器。最开放的可用选项,应谨慎使用。
要使用firewalld ,我们可以创建规则并更改我们区域的属性,然后将网络接口分配到最合适的区域。
与iptables的设置类似,在防火墙中,规则可以被指定为永久生效或仅当前生效。如果添加或修改规则,则默认情况下,会修改当前运行的防火墙的行为。在下次启动时,旧的规则将被恢复。如果要使配置永久生效,可以使用--permanent参数。当然,也可以使用--permanent构建一整套随着时间变化的规则,这些规则将在发出reload命令时立即被应用。
Firewalld配置
查看规则
在配置防火墙时,不要急使用systemctl enable firewalld命令使firewalld开机自启动,我们应该等到我们创建了防火墙规则,并有机会在配置此行为之前进行测试。如果出现问题,这可以帮助我们避免被锁定在机器外面。
通过下面的命令可以启动并查看系统firewalld状态:
# systemctl start firewalld # firewall-cmd --state running
查看当前默认的区域:
# firewall-cmd --get-default-zone public
查看区域应用的接口:
# firewall-cmd --get-active-zones public interfaces: eth0
查看区域规则:
# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
这里可以看到处于public区的eth0与dhcp和ssh服务相关联。
列出所有可用的区域:
# firewall-cmd --get-zones block dmz drop external home internal public trusted work
可以通过--zone和--list-all 选项来查看相关区域的默认规则:
# firewall-cmd --zone=home --list-all home interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
也可以使用--list-all-zones选项来查看所有规则:
firewall-cmd --list-all-zones
zone规则配置
默认情况下,主机的网络接口都会在默认区域,如果要修改接口配置区域使用如下命令:
# firewall-cmd --zone=home --change-interface=eth0 success
查看是否修改成功(服务重启后失效):
# firewall-cmd --get-active-zones home interfaces: eth0 public interfaces: eth1
如果要永久生效,可以修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,添加一行:
ZONE=home
重启网络服务和防火墙即可生效。
修改默认zone,这将使所有在原默认zone的网络接口变更到新的默认zone中:
# firewall-cmd --set-default-zone=home success # firewall-cmd --get-default-zone home
服务规则配置
Firewalld默认可以对系统的一些应用进行管理,通过如下命令可以查看当前默认可以管理的应用服务类型:
# 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
系统默认的服务属性存放在/usr/lib/firewalld/services目录下,可以查看对应的xml文件:
# cat ssh.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/> </service>
对某个zone添加服务应用:
# firewall-cmd --zone=public --add-service=http success
查看是否添加成功:
# firewall-cmd --zone=public --list-all public interfaces: sources: services: dhcpv6-client http ssh
或者直接查看对应zone的允许的服务:
# firewall-cmd --zone=public --list-services dhcpv6-client http ssh
如果要查看或者配置永久生效的内容,可以使用--permanent参数,上面的两个命令就可以用如下格式:
firewall-cmd --zone=public --permanent --add-service=http firewall-cmd --zone=public --permanent --list-services
自定义服务规则
firewalld默认定义了一些常见的服务应用,但是如果需要使用的服务系统中并没有符合的应用就需要我们自定规则。
自定义规则有两种方式:
zone中添加协议端口
配置xml文件,定义一个新的服务
zone中添加协议端口
如,我们要添加一个5000端口的TCP协议在public zone中:
# firewall-cmd --zone=public --add-port=5000/tcp
查看端口列表:
# firewall-cmd --zone=public --list-ports 5000/tcp
也可以指定端口范围:
firewall-cmd --zone=public --add-port=4990-4999/udp
增加永久生效选项:
firewall-cmd --zone=public --permanent --add-port=5000/tcp firewall-cmd --zone=public --permanent --add-port=4990-4999/udp firewall-cmd --zone=public --permanent --list-ports
自定义服务
通过直接添加协议端口的方式虽然简单直接,但是不方便规范化的管理,尤其是在有频繁服务变更的场景中,这种方式会增加管理员的维护负担。通过自定义服务的方式,可以清晰的说明服务的应用细节和信息,可以和管理系统自带的服务一样进行管理。
为了区分系统自带的服务和我们自定义的服务,我们一般将自定义的服务文件存放在/etc/firewalld/services 目录下:
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ cd /etc/firewalld/services/ mv ssh.xml trying.xml
修改自定义文件:
vim trying.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>trying stuff</short> <description>this is test firewalld</description> <port protocol="tcp" port="8888"/> <port protocol="udp" port="9999"/> </service>
使用reload命令使配置生效:
firewall-cmd --reload
查看系统应用:
firewall-cmd --get-services|grep trying
自定义zone
可以通过自定义新的zone来创建我们需要的规则:
firewall-cmd --permanent --new-zone=publicweb
查看创建的zone:
firewall-cmd --permanent --get-zones|grep publicweb
执行reload命令之后才能生效。可以根据需求对定义的zone添加服务和网络接口。
参考链接:
本文出自 “Trying” 博客,请务必保留此出处http://tryingstuff.blog.51cto.com/4603492/1943993
以上是关于CentOS7 firewalld的主要内容,如果未能解决你的问题,请参考以下文章