[toc]
防火墙安全概述 在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管 理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。 对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定 要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不 少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。
防火墙的规则
如果开启防火墙工具,并且没有配置任何允许的规则,那么从外部访问防火墙设备默认会被阻止,但是如果直接从防火墙内部往外部流出的流量默认会被允许。
firewalld 只能做和IP/Port相关的限制,web相关的限制无法实现。
区域选项策略 区域选项策略概述 那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念 简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换
Windows防火墙安全策略
区域规则示意图
需要注意的是Firewalld中的区域与接口 一个网卡仅能绑定一个区域, eth0 –>A区域 A区域–>eth0 eth1 eth2 但一个区域可以绑定多个网卡。 还可以根据来源的地址设定不同的规则。 比如:所有人能访问80端口,但只有公司的IP才允许访问22端口。
区域选项
默认规则策略
trusted
允许所有的数据包流入流出
home
拒绝流入的流量,除非与流出的流量相关; 如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal
等同于home区域
work
拒绝流入的流量,除非与流出的流量相关; 如果流量与ssh、ipp-client、dhcpv6-client服务相关,则允许流量
public
拒绝流入的流量,除非与流出的流量相关; 如果流量与ssh、dhcpv6-client服务相关,则允许流量
external
拒绝流入的流量,除非与流出的流量相关; 如果流量与ssh服务相关,则允许流量
dmz
拒绝流入的流量,除非与流出的流量相关; 如果流量与ssh服务相关,则允许流量
block
拒绝流入的流量,除非与流出的流量相关
drop
拒绝流入的流量,除非与流出的流量相关
trusted:允许所有的数据包流入流出,允许任何流量进入可以访问我的任何服务,任何端口
puiblic:下载默认的防火墙
drop:无论什么端口加到drop都会被拒绝
防火墙命令 命令合集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 --get-default-zone --set-default-zone=<区域名称> --get-active-zones --get-zones --new-zone=<区域名称> --get-services --add-service=<服务名称> --remove-service=<服务名称> --add-port=<端口号/协议> --remove-port=<端口号/协议> --add-interface=<网卡名称> --zone=<区域名称> --change-interface=<网卡名称> --zone=<区域名称> --list-all --reload --queryservice=<服务名称> runtime运行时: 修改规则马上生效,但如果重启服务则马上失效,测试建议。 permanent持久配置: 修改规则后需要reload重载服务才会生效,生产建议。
解析 –list-all 1 2 3 4 5 6 7 8 9 10 11 12 13 public (active) target: default icmp-block-inversion: no interfaces: eth1 eth0 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
防火墙配置示例 需求 使用firewall配置,调整默认public区域拒绝所有的流量,如果来源是10.0.0.0/24网段则允许
1 2 3 4 5 6 7 8 9 10 11 12 firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client firewall-cmd --add-source=10.0.0.0/24 --zone=trusted firewall-cmd --get-active-zone public interfaces: eth1 eth0 trusted sources: 10.0.0.0/24
防火墙配置放行策略 firewalld放行服务 1 2 3 4 5 6 7 8 9 10 11 12 yum install -y httpd systemctl start httpd firewall-cmd --add-service=http success firewall-cmd --remove-service=http
firewalld放行端口 1 2 3 4 5 firewall-cmd --add-port=80/tcp firewall-cmd --remove-port=80/tcp
firewalld放行自定义服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 firewall-cmd --get-services firewall-cmd --add-services=sersync cp /usr/lib/firewalld/services/{ssh,sersync}.xmlvim /usr/lib/firewalld/services/sersync.xml <?xml version="1.0" encoding="utf-8" ?> <service> <short>sersync</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 thisoption to be useful.</description> <port protocol="tcp" port="874" /> firewall-cmd --reload firewall-cmd --add-services=sersync
防火墙端口转发策略 概述 端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式为: firewalld-cmd –permanent –zone=<区域> –add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
如果需要将本地的10.0.0.61:5555端口转发至后端172.16.1.9:22端口
firewalld实现端口转发(端口映射)只能转发tcp相关的服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协 议>:toport=<目标端口号>:toaddr=<目标IP地址> firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80:toaddr=10.0.0.7 firewall-cmd --reload firewall-cmd --add-masquerade firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth1 eth0 sources: services: ssh dhcpv6-client ports: protocols: masquerade: yes forward-ports: port=2222:proto=tcp:toport=22:toaddr=172.16.1.7 source-ports: icmp-blocks: rich rules: 10.0.0.8:8888
防火墙富语言规则策略 规则策略概述 firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地 址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面 为firewalld富语言规则帮助手册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 man firewall-cmd man firewalld.richlanguage rule [source ] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forwardport| source-port [log ] [audit] [accept|reject|drop|mark] rule [family="ipv4|ipv6" ] source address="address[/mask]" [invert="True" ]service name="service name" port port="port value" protocol="tcp|udp" protocol value="protocol value" forward-port port="port value" protocol="tcp|udp" to-port="port value" toaddr="address" accept | reject [type ="reject type" ] | drop --add-rich-rule='<RULE>' --remove-rich-rule='<RULE>' --query-rich-rule='<RULE>' --list-rich-rules
示例 需求: 允许10.0.0.7主机能够访问http服务,允许172.16.1.0/24能够访问ssh/22端口
1 2 3 xshell连接不上服务器,但是我的172.16.1.0/24网段可以访问22 firewall-cmd --add-rich-rule='rule family=ipv4 source address="10.0.0.7" service name="http" accept' firewall-cmd --add-rich-rule='rule family=ipv4 source address="172.16.1.0/24" port port="22" protocol="ssh" accept'