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添加服务和网络接口。
参考链接:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com