一、防火墙富规则
firewalld中的富规则更有针对性,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册
[root@ web01 ~]# man firewall-cmd
[root@ web01 ~]# man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|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" to-addr="address"
accept | reject [type="reject type"] | drop
#富语言规则相关命令
--add-rich-rule='<RULE>' #在指定的区域添加一条富语言规则
--remove-rich-rule='<RULE>' #在指定的区删除一条富语言规则
--query-rich-rule='<RULE>' #找到规则返回0,找不到返回1
--list-rich-rules #列出指定区里的所有富语言规则
# 查看防火墙配置
[root@web01 services]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: yes
forward-ports: port=6666:proto=tcp:toport=22:toaddr=172.16.1.5
source-ports:
icmp-blocks:
rich rules:
1.实例一
允许10.10.0.1主机能够访问http服务,允许172.16.1.0/24能访问111端口
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.10.0.1 service name=http accept'
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept'
success
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.10.0.1" service name="http" accept
rule family="ipv4" source address="172.16.1.0/24" port port="111" protocol="tcp" accept
#.测试连接
# 内网网段都可以访问 telnet 172.16.1.7 111
# 内网网段都可以访问 telnet 172.16.1.2 111
[D:\~]$ telnet 172.16.1.* 111 #只要在这个网段都可以
2.实例二
默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'
success
#drop和reject
drop # 直接丢弃,不返回任何内容
reject # 拒绝,会返回拒绝的内容
3.实例三
使用firewalld,允许所有人能访问http,https服务,但只有10.10.0.1主机可以访问ssh服务
[root@web01 ~]# firewall-cmd --add-service={http,https}
success
[root@web01 ~]# firewall-cmd --remove-service=ssh
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.10.0.1 service name=ssh accept'
4.实例四
当用户来源IP地址是10.10.0.1主机,则将用户请求的6666端口转发至后端172.16.1.5的22端口
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.10.0.1 forward-port port=6666 protocol=tcp to-port=22 to-addr=172.16.1.5'
[root@web01 ~]# firewall-cmd --add-masquerade
success
6.查看富规则
[root@web01 ~]# systemctl restart firewalld #启动防火墙
[root@web01 ~]# firewall-cmd --list-rich-rules #查看富规则1
[root@web01 ~]# firewall-cmd --list-all #查看富规则2
7.禁ping
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
二、防火墙备份
我们的防火墙规则,配置永久生效后,会保存在/etc/firewalld/zones/目录下, #名字随便写 只要在/zones/*.xml就行
我们如果要进行同样的防火墙配置,只需要讲该文件推送到新的服务器,并启动防火墙即可
如果要备份,备份的也是/etc/firewalld/zones/目录
[root@web01 ~]# systemctl restart firewalld #启动防火墙
[root@web01 services]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="http"/>
</zone>
九、防火墙内部共享上网
在指定的带有公网的IP的实例上启动firewalld防火墙的NAT地址转换,以此达到内部主机上网
# 1、防火墙备份
我们的防火墙规则,配置永久生效后,会保存在/etc/firewalld/zones/目录下,
我们如果要进行同样的防火墙配置,只需要讲该文件推送到新的服务器,并启动防火墙即可
如果要备份,备份的也是/etc/firewalld/zones/目录
# 2、防火墙内部共享上网
在指定的带有公网的IP的实例上启动firewalld防火墙的NAT地址转换,以此达到内部主机上网
1.开启IP伪装
[root@lb01 ~]# firewall-cmd --add-masquerade
[root@lb01 ~]# firewall-cmd --add-masquerade --permanent
2.开启内核转发
[root@lb01 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
#CentOS 6 系统需要手动开启,CentOS 7 默认就是开启的
[root@lb01 ~]# sysctl -p #生效启动
3.修改内网服务器的网卡
[root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.5 #增加一个网关
DNS1=114.114.114.114
#重启网卡
[root@web01 ~]# ifdown eth1 && ifup eth1
4.测试
[root@web01 ~]# ip a
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8e:6b:4b brd ff:ff:ff:ff:ff:ff
inet 172.16.1.7/24 brd 172.16.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8e:6b4b/64 scope link
valid_lft forever preferred_lft forever
[root@web01 ~]# ping www.baidu.com
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=127 time=11.7 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=127 time=9.53 ms