CentOS 7 firewalld防火墙配置详解

CentOS 7 firewalld防火墙配置详解 搭建firewalld防火墙一、任务目标在 CentOS 7 下搭建并配置 firewalld 防火墙掌握 firewalld 的基本使用方法和规则配置。二、主要内容firewalld 简介与安装firewalld 区域概念与配置防火墙规则管理端口与服务管理常见配置案例三、相关知识firewalld 是 CentOS 7 默认的防火墙管理工具提供动态管理的防火墙功能支持网络区域zone概念来定义网络连接的可信等级。与 iptables 的区别iptables 每条规则修改后需要清空所有规则重新加载firewalld 则不需要重新加载动态添加规则firewalld 使用区域和服务来管理规则更加直观常用区域drop丢弃所有进入的数据包block拒绝所有进入的数据包public公共区域默认配置work工作区域home家庭区域internal内部区域trusted信任所有流量四、实验环境系统版本[rootlocalhost ~]# uname -aLinux localhost.localdomain3.10.0-693.el7.x86_64#1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux软件版本firewalld-0.5.0五、实验步骤1. 安装与启动 firewalld# 检查 firewalld 是否已安装[rootlocalhost ~]# rpm -qa | grep firewalld# 安装 firewalld[rootlocalhost ~]# yum -y install firewalld# 启动 firewalld[rootlocalhost ~]# systemctl start firewalld# 设置开机自启[rootlocalhost ~]# systemctl enable firewalld# 查看 firewalld 状态[rootlocalhost ~]# systemctl status firewalld2. 查看 firewalld 状态与区域# 查看 firewalld 运行状态[rootlocalhost ~]# firewall-cmd --staterunning# 查看默认区域[rootlocalhost ~]# firewall-cmd --get-default-zonepublic# 查看所有可用区域[rootlocalhost ~]# firewall-cmd --get-zonesblock drop work internal external trusted home dmz public# 查看当前激活的区域[rootlocalhost ~]# firewall-cmd --get-active-zonespublic3. 配置区域# 设置默认区域为 work[rootlocalhost ~]# firewall-cmd --set-default-zonework# 查看指定区域的详细信息[rootlocalhost ~]# firewall-cmd --zonepublic --list-allpublic(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:4. 端口管理# 开放 80 端口临时重启失效[rootlocalhost ~]# firewall-cmd --zonepublic --add-port80/tcp# 开放 80 端口永久[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-port80/tcp# 关闭 80 端口[rootlocalhost ~]# firewall-cmd --zonepublic --remove-port80/tcp# 查看已开放的端口[rootlocalhost ~]# firewall-cmd --zonepublic --list-ports80/tcp443/tcp# 批量开放端口[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-port8000-9000/tcp5. 服务管理# 查看预定义的服务[rootlocalhost ~]# firewall-cmd --get-servicesRH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replicationftpganglia-client hadoop headlamp...# 开放 http 服务[rootlocalhost ~]# firewall-cmd --zonepublic --add-servicehttp# 开放 https 服务[rootlocalhost ~]# firewall-cmd --zonepublic --add-servicehttps# 关闭 http 服务[rootlocalhost ~]# firewall-cmd --zonepublic --remove-servicehttp# 查看已开放的服务[rootlocalhost ~]# firewall-cmd --zonepublic --list-servicessshdhcpv6-client http https6. 配置富规则Rich Rules# 允许特定 IP 访问 3306 端口[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.1.100 port port3306 protocoltcp accept# 拒绝特定 IP 访问 22 端口[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.1.50 port port22 protocoltcp reject# 允许 192.168.1.0/24 网段访问 8080 端口[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port8080 protocoltcp accept# 查看富规则[rootlocalhost ~]# firewall-cmd --zonepublic --list-rich-rules# 删除富规则[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --remove-rich-rulerule familyipv4 source address192.168.1.100 port port3306 protocoltcp accept7. 端口转发# 启用伪装NAT[rootlocalhost ~]# firewall-cmd --permanent --zoneexternal --add-masquerade# 将外部访问本机 80 端口的流量转发到 8080 端口[rootlocalhost ~]# firewall-cmd --permanent --zoneexternal --add-forward-portport80:prototcp:toport8080# 将外部访问本机 80 端口的流量转发到另一台主机的 80 端口[rootlocalhost ~]# firewall-cmd --permanent --zoneexternal --add-forward-portport80:prototcp:toaddr192.168.1.200# 查看端口转发规则[rootlocalhost ~]# firewall-cmd --zoneexternal --list-forward-ports8. IP 伪装与 NAT# 启用 IP 伪装[rootlocalhost ~]# firewall-cmd --zoneexternal --add-masquerade# 禁用 IP 伪装[rootlocalhost ~]# firewall-cmd --zoneexternal --remove-masquerade# 查看是否启用伪装[rootlocalhost ~]# firewall-cmd --zoneexternal --query-masquerade9. 重新加载防火墙配置# 重新加载防火墙重新加载时会清空临时规则[rootlocalhost ~]# firewall-cmd --reload# 完全重新加载会断开所有连接[rootlocalhost ~]# firewall-cmd --complete-reload# 查看运行时配置与 permanent 区分[rootlocalhost ~]# firewall-cmd --list-all10. 常用命令汇总# 查看状态firewall-cmd--state# 查看版本firewall-cmd--version# 查看帮助firewall-cmd--help# 查看所有区域firewall-cmd --get-zones# 查看所有服务firewall-cmd --get-services# 查看所有 ICMP 类型firewall-cmd --get-icmptypes# 查看当前激活区域firewall-cmd --get-active-zones# 查看默认区域firewall-cmd --get-default-zone# 列出当前区域的所有配置firewall-cmd --list-all六、验证与测试测试端口开放# 从本机测试[rootlocalhost ~]# telnet localhost 80# 从另一台主机测试[client]$ telnet10.1.100.10180# 使用 nc 测试[client]$nc-zv10.1.100.10180查看防火墙日志# 查看 iptables 规则firewalld 底层使用 iptables[rootlocalhost ~]# iptables -L -n -v# 查看 firewalld 日志[rootlocalhost ~]# cat /var/log/firewalld七、注意事项修改配置后要及时测试确保规则正确远程操作时注意不要把自己锁在外面生产环境建议使用 permanent 规则测试通过后再 reload默认情况下 SSH 端口22应该是开放的如果误将自己锁住可以通过控制台进入恢复模式处理