*firewalld默认规则是全部拒绝,iptable则是默认全部允许。
*firewalld 只能做和ip/port相关的限制,web相关的限制无法实现。
1.防火墙使用区域管理
常用区域:
trusted区域 #白名单
public区域 #默认
drop区域 #黑名单
2.
runtime运行时: 修改规则马上生效,但如果重启服务则马上失效,测试建议。
permanent持久配置: 修改规则后需要reload重载服务才会生效,生产建议。
3.
[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.
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.
[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伪装。
原文:https://www.cnblogs.com/wzj-qwerty/p/14226002.html