快速云:系统防火墙认识之firewall使用实例

本文介绍了firewalld作为CentOS系统中替代iptables的防火墙管理工具,它的优势在于规则管理更加人性化,支持设置timeout和永久生效。文章详细讲解了如何使用firewalld创建和管理zone,开放端口和服务,进行NAT操作,以及封禁和允许特定IP的访问。firewalld简化了防火墙配置,提高了系统的安全性与易用性。
摘要由CSDN通过智能技术生成

firewalld使用案例

在CentOS 6和以前的时代,使用Linux自带的防火墙管理一般都是用iptables来实现,iptables实现是一个很好的方案,内核原生支持,规则灵活准确。唯一不方便的是规则的保存和恢复比较费事,要么把iptables命令写入到rc.local,要么就得使用iptables-save和iptables-restore命令来恢复,不是很方便。另外如果一条命令如果配错,可能会导致连不上服务器了,需要使用显示器或者远程重启,调试起来也不方便。

 

firewalld就很好的解决了上面的问题,一方面firewalld可以做到像iptables一样灵活,语法更易读,而且可以设置timeout选项,让一条规格有一个失效时间,就像更改显示器分辨率设置后有个超时自动回退一样,非常人性化。下面就介绍一些常用的firewalld命令。

很多人对这个功能都是一关了之,这样一是不利于网络安全,另一方面也体会不到firewalld的优秀体验了。

首先要介绍一下zone的概念,一个zone会绑定一张或多张网卡,也就是eth0这样的。zone有active和非活动之分。需要设置一个default zone,这个default zone的规则会发挥作用,其他zone不发挥作用。每添加一条rule的时候,如果不指定zone那么就应用到default zone上去。系统默认的default zone是public,并且在使用光盘最小化安装的时候会安装上firewalld并且默认public zone。可以从外部访问SSH服务(也就是22端口),其他端口不允许连入,禁ping。对于出站流量没有限制。

关闭firewalld并使其开机不自启

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

注意下面的命令,要使其生效执行的话一定要执行reload,不然跟没做一样

firewall-cmd --reload

如果命令之间添加了—permanent参数,那么当前的命令会永久生效,即使重启也不会失效,这一点比iptables要方便如果命令之间添加了—timeout=时间长度 参数,那么该命令只会在这个时间长度内生效,超时失效,但是不可以与—permanent参数共用。

基本操作:

创建一个新zone并设置为默认

firewall-cmd --permanent --new-zone=testing
firewall-cmd --permanent --set-default-zone=testing

永久放通一个端口

firewall-cmd --permanent --zone=public --add-port=8080/tcp

查看某个zone下放通的全部端口和协议

firewall-cmd --permanent --list-ports

永久放通一个服务(服务会对应着一个或者多个端口)

firewall-cmd --permanent --add-service=http

查看所有可用的服务名称

firewall-cmd --permanent --get-services

RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

查看当前zone开放的服务

firewall-cmd --permanent --list-services

ssh dhcpv6-client

查看所有zone

firewall-cmd --get-zones
firewall-cmd --list-all-zones

查看某个zone下面所有的规则

firewall-cmd --permanent --list-all --zone=public


NAT操作:

打开NAT功能,有两种方式,—add-masquerade或使用—add-rich-rule添加自定义规则

firewall-cmd --permanent --zone=testing --add-masquerade
firewall-cmd --permanent --query-masquerade
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'

添加端口转发,有多种方式,既可以直接使用—add-forward-port命令直接添加,也可以通过—add-rich-rule添加自定义规则

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'
firewall-cmd --permanent --zone=testing --list-rich-rules
firewall-cmd --permanent --zone=public --add-forward-port=port=9080:proto=tcp:toport=88:toaddr=192.166.1.187
firewall-cmd --permanent --zone=public --add-forward-port=port=9080:proto=tcp:toport=88
firewall-cmd --permanent --zone=public --remove-forward-port=port=9080

注意:如果添加了:toaddr参数,后面跟的IP可以使本地IP(本地主机不同网络接口的)或者是远程主机的IP,如果是本地主机那么访问被转发端口如同访问源端口,如果是远程主机的IP,需要打开当前主机的NAT转发功能,如上面提到的,否则端口转发做了也不通。

封禁入站IP:

封禁IP既可以通过—add-rich-rule来使用firewalld的语法,也可以使用 —add-rule来使用iptables的语法,让习惯iptables的运维人员无缝迁移

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.0.11' reject"
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.0.10/24 reject'
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'

删除上面建立的某条规则

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'

允许某个IP连接本地某接口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.31.100" port protocol="tcp" port="8080" accept"

查看上面建立的规则

firewall-cmd --permanent --list-all --zone=test

允许某个IP或地址段连接本机任意端口

firewall-cmd --permanent --zone=test --remove-rich-rule='rule family="ipv4" source address="192.168.1.1" accept'
firewall-cmd --permanent --zone=test --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'


限制出站流量:

(通过主动请求到服务器的反向流量不受影响),下面介绍使用—add-rule命令,模仿iptables的语法

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -d 192.168.1.1 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP
firewall-cmd --permanent --direct --get-all-rules

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值