在rhel7中有两种防火墙,与iptables不同的是firewalld防火墙
比起iptables来firewalld有两个好处
1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
但是firewalld支持的服务得自己一个一个去配置
在firewalld中也有zone的这个概念来提供一些默认的配置服务
- trusted 可以接受所有的服务
- home 用于内网,仅接受ssh,mdns,ip-client,samba-client.dhcpv6-client服务
- work 适用于工作区,仅接受ssh,ip-client或dhcpv6-client 服务
- public 试用于公网,仅接受ssh与dhcpc6-client服务连接(是firewalld的默认)
- external 出去的ipv4网络连接通过此去区域伪装和转发,仅接受ssh服务
- block 拒绝所有的服务
firewalld的基本使用
首先我们需要关闭iptables服务,以免引起冲突,然后确保firewalld处于开启的状态
systemctl stop iptables
systemctl mask iptables.service
systemctl status firewalld
systemctl enable firewalld
然后对于firewalld的操作我们可以使用
firewall-cmd命令来进行操作firewall防火墙
firewall-cmd --state #查看防火墙当前状态
firewall-cmd --get-active-zones #查看当前活动的区域
firewall-cmd --get-zones #查看所有可用的zones
firewall-cmd --zone=public --list-all #列出指定域的所有设置
firewalld的基本配置
我们可以首先查看一下默认的区域是什么
firewall-cmd --get-default-zone
如果是不适合的区域可以进行修改,来适应你所需要的服务
firewall-cmd --set-default-zone=trusted #修改区域为你所指定的区域
例:指定为trusted
加上 --permanent 为永久设定
--zone 指定修改的区域
--add-interface= 增加网络接口
--remove-interface= 删去接口
如果需要增加删除服务只需要把 interface改成service就可以了
然后写上需要的服务
--add-source='IP地址'
增加指定区域中的网路地址
删除的话与之前类似
关于firewalld的刷新
firewall-cmd --reload
firewall-cmd --complete-reload
两种刷新的方法的区别在于
complete方法会直接断开所有当前正在进行的连接,而reload不会,比如正在进行ssh远程连接主机,如果修改了不允许ssh,使用complete此时ssh的连接将马上中断。
Direct Rules进行firewalld的访问控制
firewall-cmd命令中,–direct选项可以在运行时增加或者移除链,这种方法比较适合于服务或者程序在运行时间内增加特定的防火墙规则。
直接方式添加的规则优先。
这种方式的缺点在于,很容易无意间导致防火墙被入侵。
大致的添加删除规则与之前的iptables类似
firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT #添加
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT #删除
firewall-cmd --direct --get-all-rules #列出所有的规则
firewall的转发与伪装
端口的转发
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.120
通过22端口转发至172.25.254.120主机上
测试时,使用ssh访问自己的主机IP时 会转移到172.25.254.120主机之上
伪装
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=172.25.254.120 masquerade'
当然如果需要开启伪装服务,需要设置masquerade为yes
firewall-cmd --add-masquerade