Fork me on GitHub

firealld 定义防火墙配置

firewalld zone分类

 dmz  非军事区(Demilitarized Zone)

两道防火墙,可以被外部用户访问的主机放在第一道防火墙里,其他不能被外部访问的主机放到第二道防火墙里,如果是一道防火墙的话,可以被外部访问的主机,和不能被外部访问的主机放在了同一个局域网中,可能会带来安全风险,万一可以被外部访问的主机被黑客攻击,这些主机就可能被当做跳板机访问内部的其他主机,中间的区域就叫DMZ,

firewalld配置

  firewall-cmd --get-services 查看预定义服务列表
  /usr/lib/firewalld/services/*.xml预定义服务的配置
三种配置方法
  firewall-config (firewall-config包)图形工具
  firewall-cmd (firewalld包)命令行工具
  /etc/firewalld 配置文件,一般不建议
一、firewall-config (firewall-config包)图形工具

前提要求,firewalld 服务是开启状态

 

 

 

 

默认区域是public ,当开启firewalld这个服务没有明确允许的都默认拒绝,有打钩的可以访问,没打勾的默认拒绝,打钩及时生效,但只是在内存里生效,没有保存,需要永久生效的话,将Configuration后面的Runtime 改为Permanent

Runtime:能生效不保存

Permanent:能保存不生效

Permanent上点击了对应的服务如果不生效的话,还可以点击Options里的Reload Firewalld重新生效,或者换到字符界面重启防火墙或systemctl reload firewalld重读使其生效

  默认的是服务固定的端口,例如http对应80,

 

 

   通过直接搜索到对应的name,如我这是http8080,点击Add添加端口,点击Options里的Reload Firewalld重新生效

 

 二、firewall-cmd (firewalld包)命令行工具

1、列出所有可用区域

firewall-cmd --get-zones 

2、查询默认区域

firewall-cmd --get-default-zone

3、设置默认区域trusted(trusted允许所有流量)

firewall-cmd --set-default-zone=trusted

4、列出当前正使用的区域

firewall-cmd --get-active-zones 

5、允许服务的流量通过,如果无--zone= 选项,使用默认区域(如ftp)

firewall-cmd --add-service=ftp

6、列出允许访问的服务

firewall-cmd --list-services

7、查看开放的端口

firewall-cmd --list-ports 

8、在internal zone中增加源地址192.168.0.0/24的永久规则

firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24

9、在internal zone(internal 区域)中增加协议mysql的永久规则

firewall-cmd --permanent –zone=internal --add-service=mysql

10、添加非标端口如tcp8080

firewall-cmd --permanent --zone=public --add-port=8080/tcp

以上不加 --Permanent均为临时生效,重启服务后会自动丢失,永久保存在服务后面添加 --Permanent(注意是保存,不会生效,)(Tab键可以自动补全)

firewall-cmd --add-service=ftp --permanent 

加载新规则,重新生效, --Permanent不会立即生效,通过这个命令可以立即生效

 

firewall-cmd --reload

禁用iptables,手动起不来

 

systemctl mask iptables

 

针对上面禁用iptables服务,通过unmask可以关闭mask,可以通过正常启动服务开启

systemctl unmask firewalld

三、配置文件

/etc/firewalld/zones/public.xml

 Permanent里面打钩的会自动保存在这个里面,取消打钩会自动删除里面的对应行

 其它规则

 

当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
  rich-rules 富规则,功能强,表达性语言
  Direct configuration rules 直接规则,灵活性差
帮助:man 5 firewalld.direct

1、拒绝从192.168.0.11的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 |ipv6

firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'

2、限制每分钟只有两个连接到ftp服务

firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m accept’

3、抛弃esp( IPsec 体系中的一种主要协议)协议的所有数据包

firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'

4、接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量

firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept'

rich日志规则

log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]
  <LOGLEVEL> 可以是emerg,alert, crit, error, warning, notice, info, debug.
  <DURATION> s:秒, m:分钟, h:小时, d:天
  audit [limit value="<RATE/DURATION>"]

rich日志规则实例

接受ssh新连接,记录日志到syslog的notice级别,每分钟最多三条信息

firewall-cmd --permanent --zone=work --add-rich-rule='rule service name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept

从2001:db8::/64子网的DNS连接在5分钟内被拒绝,并记录到日志到audit,每小时最大记录一条信息

firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300

 

 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0 service name="http" log level=notice prefix="NEW HTTP " limit value="3/s" accept'

伪装和端口转发

NAT网络地址转换,firewalld支持伪装和端口转发两种NAT方式

  伪装NAT
firewall-cmd --permanent --zone=<ZONE> --add-masquerade

 检查是否允许伪装

firewall-cmd --query-masquerade

允许防火墙伪装IP

firewall-cmd --add-masquerade 

禁止防火墙伪装IP

firewall-cmd --remove-masquerade 

示例:从192.168.0.0这个网段过来的数据,就允许伪装,通过本机的某一个网卡连接到互联网上去

firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'

端口转发
端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口。通常要配合地址伪装才能实现

firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>]

说明:toport= 和toaddr= 至少要指定一个

示例:
转发传入的连接9527/TCP,到防火墙的80/TCP到public zone 的192.168.0.254

1 firewall-cmd --add-masquerade 启用伪装
2 firewall-cmd --zone=public --add-forward-port=port=9527:proto=tcp:toport=80:toaddr=192.168.0.254

示例:将访问192.168.1.7:80的转发给192.168.1.15的80端口

1、在192.168.1.7机器上,启用伪装

firewall-cmd --add-masquerade 

2、将访问本机的80端口转发到192.168.1.15的80端口上

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.15

 


 

posted @ 2021-05-11 09:18  Alex-Lzy  阅读(244)  评论(0编辑  收藏  举报