*firewalld默认规则是全部拒绝,iptable则是默认全部允许。
*firewalld 只能做和ip/port相关的限制,web相关的限制无法实现。

 

1.防火墙使用区域管理

Linux firewalld 放行samba服务 firewalld放行ip_内网

 

 

常用区域:

trusted区域           #白名单
public区域             #默认
drop区域               #黑名单

2.防火墙基本指令参数

Linux firewalld 放行samba服务 firewalld放行ip_端口转发_02

 

runtime运行时: 修改规则马上生效,但如果重启服务则马上失效,测试建议。
permanent持久配置: 修改规则后需要reload重载服务才会生效,生产建议。

 

3.防火墙配置放行策略

a:放行服务

[root@web01 ~]# firewall-cmd --add-service=http
success

**补充:可放行服务都存放在/usr/lib/firewalld/services/这个目录下

[root@backup ~]# firewall-cmd --add-service=nginx
Error: INVALID_SERVICE: nginx

当放行某个服务时出现此类报错说明/usr/lib/firewalld/services目录下没有nginx的放行配置文件,此时我们需要手动添加nginx.xml配置文件。

 

 

#放行多个服务
[root@web01 ~]# firewall-cmd --add-service={https,mysql,redis}
success

 

b:放行端口   注意:放行端口一定要加上协议

[root@web01 ~]# firewall-cmd  --add-port=873/tcp
#放行多个端口
[root@web01~]# firewall-cmd  --add-port={443/tcp,80/udp}
success

 

c:放行ip    #允许一个IP所有的操作,加入白名单

[root@web01 ~]# firewall-cmd  --add-source=10.0.0.1  --zone=trusted
success

 

4.防火墙端口转发

*端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发命令格式为:
firewalld-cmd --permanent --zone=<区域> --add-forward-port= port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

--permanent          #永久生效,根据实际情况确定是否添加

--zone=<区域>     #指定区域

注意:配置端口转发一定要开启ip伪装~~

示例:将本地的10.0.0.8:5555端口映射到172.16.1.7:22端口

第一步:

[root@web02 ~]# firewall-cmd  --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=172.16.1.7
success

第二步:

[root@web02 ~]# firewall-cmd  --add-masquerade 
success

第三步:终端测试

[c:\~]$ ssh 10.0.0.8 5555
Connecting to 10.0.0.8:5555...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.Last login: Mon Sep 14 09:04:43 2020 from 10.0.0.1
[root@web01 ~]#

 

5.firewall富规则

*富规则语法*

[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 [not] address="address[/mask]"|mac="mac-address"|ipset="ipset"
destination [not] address="address[/mask]"
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="addr
ess"
	source-port port="port value" protocol="tcp|udp"
[accept|reject|drop|mark]

*accept     #接受,允许 

*reject  与*drop 都有拒绝之意,区别在于reject是直接拒绝,返回拒绝;drop是丢弃,不显示直到超时。

 

#富语言规则相关命令
--add-rich-rule='<RULE>'              #在指定的区域添加一条富语言规则
--remove-rich-rule='<RULE>'        #在指定的区删除一条富语言规则
--query-rich-rule='<RULE>'           #找到规则返回0,找不到返回1
--list-rich-rules                                 #列出指定区里的所有富语言规则

 

示例:

1.允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问111端口

[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.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

 

2.默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器

[root@web01~]# firewall-cmd --add-service=ssh
success
 
[root@web01~]# firewall-cmd  --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'
success

 

3.当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口

[root@web01~]# firewall-cmd  --add-rich-rule='rule family=ipv4 source address=10.0.0.1 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.7'
success

4.防火墙配置网站禁ping

[root@web01~]#firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'        #ping的协议=icmp
success

5.防火墙规则备份

[root@web021~]# ll  /etc/firewalld/zones/

防火墙规则设置永久生效后会写入/etc/firewalld/zones/ 目录下对应的配置文件中,当执行firewall-cmd --reload后服务会重新去读配置文件,只有在配置文件中存在的规则才会继续保留。

--permanent       #永久生效参数,需要重启后生效。

 

 

6.防火墙内部共享上网

*在指定的带有公网IP的实例上启动Firewalld防火墙的NAT地址转换,以此达到内部主机上网。

[root@m01 ~]# firewall-cmd --add-masquerade        #开启ip伪装
success 
 
[root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1     #配置内网机器的网关地址
#添加以下两行
GATEWAY=172.16.1.61
DNS1=223.5.5.5 
#重启网卡
[root@web01 ~]# ifdown eth1 && ifup eth1

内部共享上网原理:

没有外网和不能上网是两个不同的概念,当处于内网环境需要上网的时候我们可以借助防火墙共享上网。外网关闭后在给他配置防火墙的内网(内网之间可以互联),然后再通过防火墙机器的外网到达上网目的。

注意:内网外不能互联,所以需要开启ip伪装。

Linux firewalld 放行samba服务 firewalld放行ip_配置文件_03