目录
1. 什么是firewalld,与iptables之间的关系
5. 简单实例,使用firewalld开启nginx 80端口
1. 什么是firewalld,与iptables之间的关系
- firewalld是iptables的前端控制器,firewalld提供一个daemon和service,底层使用iptables;
- firewalld是基于内核Netfilter的;
- firewalld是动态防火墙,策略变更时不需要重载所有配置,只需要将变更部分加载到iptables中,不丢失现有链接;
- iptables是静态防火墙,任何策略变更时都不要重载(reload)所有配置,会丢失现有链接;
2. 安装与启动firewalld
安装:
yum -y install firewalld firewall-config
管理:
systemctl enable firewalld //设置开机自启
systemctl start firewalld //启动firewalld
systemctl status firewalld //查看firewalld运行状态
安装完了后应该会有一个防火墙图形界面的管理工具:
3. firewalld功能介绍
我们来打开这个软件进去看看它的界面,以此来了解一下它的功能;
首先左边这块有一栏区域,这些区域定义了一些策略的模板。比如block,加入这个区域的端口或者服务,是被防火墙拦截的。
1. 具体区域的介绍
Zone 名称 | Zone 描述 |
---|---|
block | 所有进入的网络连接都会被拒绝。对于 IPV4,回复 icmp-host-prohibited 消息。对于 IPV6,回复 icmp6-adm-prohibited 消息。只有由内部发起的网络连接可以通行。 |
dmz | 对于在非军事区域的服务器,外部网络可以在受限制的情况下进入内网,只有特定的网络连接请求被接受。 |
drop | 所有的进入的网络包都会被丢掉,并且没有任何的回应。只有向发起的连接请求可以被放行。 |
external | 用于开始伪装的外部网络,特别是作为路由器。任务外部的网络会损坏你的计算机,只有特定的网络连接请求被接受。 |
home | 在家使用,信任网络上的大多数计算机。只有特定的网络连接请求被接受。 |
internal | 在内部网络使用,信任当前网络下其他的计算机。只有特定的网络连接请求被接受。 |
public | 在公共网络使用,不信任网络上的其他计算机。只有特定的网络连接请求被接受。 |
trusted | 所有的网络连接都会被接受。 |
work | 在工作网络中使用,信任网络上的其他计算机。只有特定的网络连接请求被接受 |
2. 策略制定的规则
如图,我们可以根据服务的类型,端口号,协议号,源端口,接口,来源等等来设定防火墙的规则;
3. 策略的有效期
运行时:本次运行有效,防火墙重启后失效;
永久:永久有效;
用命令怎么实现呢?我们假设现在要添加smtp服务到public区域中:
firewall-cmd -zone=public -add-service=smtp //运行时有效,重启失效
firewall-cmd -permanent -zone=public -add-service=stmp //永久有效,重启后开始生效
firewall-cmd -runtime-to-permanent //将运行时配置转为永久配置
4. firewalld常用命令
firewalld-cmd --version //查看firewalld版本
firewalld-cmd --help //查看firewalld用法
man firewalld-cmd //查看firewalld用法
systemctl status firewalld //查看firewalld状态
firewalld-cmd --reload //重载firewalld,当前已经生效的连接不中断
firewalld-cmd --compulete-reload //重载firewalld,当前连接中断
firewalld-cmd --get-services //列出所有预设服务,如上图的“3”
firewalld-cmd --list-services //列出当前正在生效的服务
firewalld-cmd --permanent --zone=public --add-service=smtp //在public区域中的永久配置中启用smtp服务
firewalld-cmd --permanent --zone=public --remove-service-smtp //在public区域中的永久配置中移除smtp服务
firewalld-cmd --zone=public --list-ports //列出public区域中已经启用的端口号
firewalld-cmd --permanent --zone=public --add-port=8080/tcp //在public区域中的永久配置中启用8080端口
firewalld-cmd --permanent --zone=public --remove-port=8080/tcp //在public区域中的永久配置中移除8080端口
firewalld-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=90 //将本机的80端口流量转发到90端口,区域为public
//将本机80端口的流量转发到192.168.1.1这台主机的8080端口上
firewall-cmd --zone=public --add-masquerade //不同服务器端口转发,要先开启 masquerade
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1
firewall-cmd --get-zones //查看所有可用区域
firewall-cmd --get-active-zones //查看当前活动的区域
firewall-cmd --list-all-zones //列出所有区域的所有配置
firewall-cmd --zone=work --list-all //列出指定区域(如:work区域)的所有配置
firewall-cmd --get-default-zone //查看默认区域
firewall-cmd --set-default-zone=public //设定默认区域
//设定某一网段为内网段(然后可以创建策略为只允许内网访问呀)
firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24
firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24 //移除
富规则:
firewall-cmd –list-rich-rules //列出所有规则
复杂规则配置案例:
//允许来自主机 192.168.0.14 的所有 IPv4 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
//拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
//允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'
//将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'
//允许192.168.122.0/24主机所有连接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'
//每分钟允许2个新连接访问ftp服务
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
//同意新的IPv4和IPv6连接FTP ,并使用审核每分钟登录一次
firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept'
//允许来自1192.168.122.0/24地址的新IPv4连接连接TFTP服务,并且每分钟记录一次
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
//丢弃所有icmp包
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
//当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10
//拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志
firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300
//允许192.168.122.0/24网段中的主机访问ftp服务
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept'
//转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"'
5. 简单实例,使用firewalld开启nginx 80端口
说了那么多理论和命令,我们小小的实验一下:
1. 现在我没有在防火墙上开启任何端口,到另外一台电脑上访问nginx试试
2. 我们到防火墙上开启80端口,区域呢,直接放到public区域,永久开启
开启后别忘了重载防火墙使其生效
3. 我们在用另一台电脑浏览器访问一下试试
4. 我们再打开图形界面的防火墙看看
欧了,以后有什么使用感受再更。
命令参考文章:https://blog.csdn.net/xiazichenxi/article/details/80169927