[toc]
防火墙安全概述 在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管
防火墙的规则 
如果开启防火墙工具,并且没有配置任何允许的规则,那么从外部访问防火墙设备默认会被阻止,但是如果直接从防火墙内部往外部流出的流量默认会被允许。
firewalld 只能做和IP/Port相关的限制,web相关的限制无法实现。
区域选项策略 区域选项策略概述 那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念
Windows防火墙安全策略 
区域规则示意图 
需要注意的是Firewalld中的区域与接口
区域选项 
默认规则策略 
 
 
trusted 允许所有的数据包流入流出 
 
home 
拒绝流入的流量,除非与流出的流量相关; 
 
internal 
等同于home区域 
 
work 
拒绝流入的流量,除非与流出的流量相关; 
 
public 拒绝流入的流量,除非与流出的流量相关; 
 
external 
拒绝流入的流量,除非与流出的流量相关; 
 
dmz 
拒绝流入的流量,除非与流出的流量相关; 
 
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 
防火墙端口转发策略 概述 端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式为:
如果需要将本地的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中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地
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'