1、简介
Centos7以上的发行版都自带了firewalld防火墙的,firewalld自带了iptables防火墙。其原因是iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
2、服务操作
# 启动服务
[root@elasticsearch-04 ~]# systemctl start firewalld # 这里不用担心启用了防火墙以后无法通过ssh远程,22端口默认加入了允许规则
# 停止服务
[root@elasticsearch-04 ~]# systemctl stop firewalld
# 重启服务
[root@elasticsearch-04 ~]# systemctl restart firewalld
3、重载防火墙配置
[root@elasticsearch-04 ~]# firewall-cmd --reload
success
4、查看版本
[root@elasticsearch-04 ~]# firewall-cmd --version
0.5.3
5、查看防火墙运行状态
[root@elasticsearch-04 ~]# firewall-cmd --state
running
6、查看默认区域的设置
[root@elasticsearch-04 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: sshdhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
7、设置常规端口放行
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --add-port=21/tcp
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --add-port=22/tcp
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --add-port=8888/tcp
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --add-port=888/tcp
8、一个服务对应一个端口,每个服务对应/usr/lib/firewalld/services下面一个xml文件
[root@elasticsearch-04 ~]# cd /usr/lib/firewalld/services
[root@elasticsearch-04 services]# ls
amanda-client.xml jenkins.xml puppetmaster.xml
amanda-k5-client.xml kadmin.xml quassel.xml
bacula-client.xml kerberos.xml radius.xml
bacula.xml kibana.xml redis.xml
bgp.xml klogin.xml RH-Satellite-6.xml
bitcoin-rpc.xml kpasswd.xml rpc-bind.xml
bitcoin-testnet-rpc.xml kprop.xml rsh.xml
bitcoin-testnet.xml kshell.xml rsyncd.xml
bitcoin.xml ldaps.xml samba-client.xml
9、查看还有哪些服务可以打开
[root@elasticsearch-04 services]# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry docker-swarm dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master gitgre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls managesieve mdns minidlna mongodb mosh mountd ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid sshsyncthing syncthing-gui synergy syslog syslog-tls telnettftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
10、查看所有打开的端口
[root@elasticsearch-04 services]# firewall-cmd --zone=public --list-ports
11、允许某范围的 udp 端口至 public 级别,并永久生效
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --add-port=5060-5059/udp --permanent
12、开启一个端口
1.添加
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent # --permanent永久生效,没有此参数重启后失效
2.重新载入
[root@elasticsearch-04 ~]# firewall-cmd --reload
3.查看
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --query-port=80/tcp
4.删除
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent
13、管理端口
1.列出 dmz 级别的被允许的进入端口
[root@elasticsearch-04 ~]# firewall-cmd --zone=dmz --list-ports
2.允许 tcp 端口 8080 至 dmz 级别
[root@elasticsearch-04 ~]# firewall-cmd --zone=dmz --add-port=8080/tcp
14、网卡接口
1.列出 public zone 所有网卡
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --list-interfaces
2.将 eth0 永久添加至 public zone
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --permanent --add-interface=eth0
3.eth0 存在 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
[root@elasticsearch-04 ~]# firewall-cmd --zone=work --permanent --change-interface=eth0
4.永久删除 public zone 中的 eth0
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --permanent --remove-interface=eth0
15、管理服务
1.添加 smtp 服务至 work zone
[root@elasticsearch-04 ~]# firewall-cmd --zone=work --add-service=smtp
2.移除 work zone 中的 smtp 服务
[root@elasticsearch-04 ~]# firewall-cmd --zone=work --remove-service=smtp
16、配置 external zone 中的 ip 地址伪装
1.查看
[root@elasticsearch-04 ~]# firewall-cmd --zone=external --query-masquerade
2.打开伪装
[root@elasticsearch-04 ~]# firewall-cmd --zone=external --add-masquerade
3.关闭伪装
[root@elasticsearch-04 ~]# firewall-cmd --zone=external --remove-masquerade
17、配置 public zone 的端口转发
1.要打开端口转发,则需要先设置公共的zone
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --add-masquerade
2.然后转发 tcp 8080 端口至 3753
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=3753
3.转发 8080 端口数据至另一个 ip 的相同端口上
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.100
4.转发 8080 端口数据至另一 ip 的 2055 端口上
[root@elasticsearch-04 ~]# firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=2055:toaddr=192.168.1.100
18、IP 封禁
1.封禁ip
# 方案一
[root@elasticsearch-04 ~]# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject"
# 方案二:通过 ipset 来封禁 ip
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.222
2.封禁网段
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net
[root@elasticsearch-04 ~]# firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.0/24
19、应急命令
[root@elasticsearch-04 ~]# firewall-cmd --panic-on # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
[root@elasticsearch-04 ~]# firewall-cmd --panic-off # 取消应急模式,但需要重启firewalld后才可以远程ssh
[root@elasticsearch-04 ~]# firewall-cmd --query-panic # 查看是否开启应急模式
如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。群主还经营一家Orchis饰品店,喜欢的小伙伴欢迎????前来下单。
扫描二维码
获取更多精彩
运维猫公众号
有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:
扫描二维码
添加私人微信
运维猫博主
扫码加微信
最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。
点击阅读原文 查看更多精彩内容!!!