文章目录
- Linux云计算架构-四大防火墙详细解说(iptables | firewall-cmd | firewall-config |TCP Wrappers)
-
- 1. 简介
- 2. 防火墙管理工具
-
- 2.1 iptables(不建议使用)
- 2.2 iptables实验及其验证
-
- 2.2.1 查看并清空规则链
- 2.2.2 设置INPUT规则链的默认规则为DROP,再设置INPUT规则链的默认规则为ACCEPT,看看本地主机是否能ping通虚拟机。
- 2.2.3 向INPUT链中添加允许ICMP流量进入的规则(是否禁ping)
- 2.2.4 删除INPUT链的第一条规则链,并设置默认规则为ACCEPT
- 2.2.5 设置INPUT规则链,只允许指定网段的主机去访问本机的22号端口,并且拒绝其他所有主机的流量
- 在这里插入图片描述2.2.6 拒绝所有人访问本机的22端口的规则
- 2.2.7 向INPUT规则链中添加允许192.168.10.20访问服务器的22号端口,拒绝其他主机访问。
- 2.2.8 添加拒绝所有主机访问本机的1000-1024号端口的规则
- 2.3 firewall-cmd(建议使用)
- 2.4 firewall-cmd实验及其验证
-
- 2.4.1 查看当前和指定网卡在firewalld服务中使用的区域
- 2.4.2 修改指定网卡在永久生效模式下使用的区域为external,并验证在runtime模式和permanent模式下使用的区域
- 2.4.3 修改当前使用的默认区域
- 2.4.4 开启和关闭firewalld服务的应急状况模式
- 2.4.5 查询public区域是否允许请求ssh协议和http协议的流量,并且将请求http协议的流量先设置为永久允许,再设置为永久拒绝。
- 2.4.6 设置允许访问端口8080-8081,仅限当前生效
- 2.4.7 设置允许端口转发,将访问8080号端口的流量转发到22号端口,并要求当前和永久都有效。
- 2.4.8 增加一条富规则,使其拒绝192.168.10.0/24网段内的所有用户使用ssh协议访问本机
- 2.5 firewall_config(建议考试使用,结合firewall-cmd理解)
- 2.6 实验及其验证
-
- 2.6.1 查看当前和指定网卡在firewalld服务中使用的区域
- 2.6.2 修改指定网卡在永久生效模式下使用的区域为external,并验证在runtime模式和permanent模式下使用的区域
- 2.6.3 修改当前使用的默认区域
- 2.6.4 开启和关闭firewalld服务的应急状况模式
- 2.6.5 查询public区域是否允许请求ssh协议和http协议的流量,并且将请求http协议的流量先设置为永久允许,再设置为永久拒绝。
- 2.6.6 设置允许访问端口8080-8081,仅限当前生效
- 2.6.7 设置允许端口转发,将访问8080号端口的流量转发到22号端口,并要求当前和永久都有效。
- 2.6.8 增加一条富规则,使其拒绝192.168.10.0/24网段内的所有用户使用ssh协议访问本机
- 2.6.9 firewall-cmd --reload
- 2.6.10 SNAT(Source Network Address Translation,源网络地址转换)技术
- 2.7 TCP Wrappers
Linux云计算架构-四大防火墙详细解说(iptables | firewall-cmd | firewall-config |TCP Wrappers)
1. 简介
- 为了保障数据的安全性,可以在外网和内网之间创建防火墙。常用的防火墙管理工具有:iptables、firewall-cmd、firewall-config、TCP Wrappers
- 防火墙的主要功能是依据规则对穿越防火墙的流量进行过滤,这样就能保证只有合法的流量在企业内网和外部网络之间进行流动了。
- RHEL7之前的版本使用iptables服务,从RHEL7开始换成了firewalld服务,而iptables服务在RHEL7的部分版本也可以用,如RHEL7.0两者都可用。
- iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理
- firewalld服务会把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理
- 防火墙过滤内容:源地址、目的地址、端口号、协议、应用等信息。
- 以上的4种防火墙管理工具,最好不要同时用,精通一种工具就好,但是要明白防火墙的真正含义。
2. 防火墙管理工具
防火墙一般在入口做限制,出口一般不做限制。即允许服务器主动访问外网的所有数据。【具体看生产环境而定】
2.1 iptables(不建议使用)
注意:不建议使用,有bug,在RHEL7.2之后会撤掉。【原理要懂,目前生产环境服务器主要集中在centos6和7版本。】
5链4表:
5链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
4表:raw表、mangle表、nat表、filter表
# 安装配置
# 默认安装了firewalld服务,不安装iptables。
# 禁用firewalld
[root@server ~]# systemctl stop firewalld.service
[root@server ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# 安装iptables
[root@server ~]# yum install iptables-services -y
[root@server ~]# which iptables
/usr/sbin/iptables
[root@server ~]# ll /etc/sysconfig/iptables
-rw-------. 1 root root 550 11月 5 2018 /etc/sysconfig/iptables
# 启动iptables并设置开机自启
[root@server ~]# systemctl start iptables.service
[root@server ~]# systemctl enable iptables.service
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
iptables服务把用于过滤流量的策略称之为规则,多条规则可以组成一个规则链 ,而规则链根据数据包处理位置的不同分成5类:
动作分为:
iptables命令解析:
设置原则:
1、默认允许ACCEPT,设置何时拒绝REJECT
2、默认拒绝DROP,设置何时允许ACCEPT
iptables命令参数扩展:
-m multiport --dport 22,80 # 设置多个端口
-m state --state RELATED,ESTABLISHED # 允许已经建立tcp连接的包以及该连接相关的包通过。
2.2 iptables实验及其验证
2.2.1 查看并清空规则链
可以看到,所有的规则链已经被清空。类似只有表的结构,但没有表的数据。
2.2.2 设置INPUT规则链的默认规则为DROP,再设置INPUT规则链的默认规则为ACCEPT,看看本地主机是否能ping通虚拟机。
可以看到,若INPUT规则链的默认规则设置为DROP,物理机是无法访问虚拟机的,若默认规则设置为ACCEPT,物理机是可以访问虚拟机的。
在这里存在一个必须要注意的问题:如果把远程主机的INPUT规则链的默认规则设置为了DROP,这可能导致自己也连不上远程主机,故在为远程主机设置INPUT规则链默认规则为DROP之前,先配置如下定时任务:
[root@server ~]# crontab -e
*/15 * * * * iptables -P INPUT ACCEPT
*/15 * * * * iptables -F
2.2.3 向INPUT链中添加允许ICMP流量进入的规则(是否禁ping)
为了让效果较为明显,首先将INPUT规则链的默认规则设置为DROP,然后ping下虚拟机,会发现ping不通,然后允许ICMP流量,会发现可以ping通。
2.2.4 删除INPUT链的第一条规则链,并设置默认规则为ACCEPT
2.2.5 设置INPUT规则链,只允许指定网段的主机去访问本机的22号端口,并且拒绝其他所有主机的流量
服务器ip:
现在尝试用客户端192.168.10.20去使用ssh协议远程访问服务器192.168.10.10,可以看到是可以正常访问的。
2.2.6 拒绝所有人访问本机的22端口的规则
22号端口是ssh协议远程控制服务器所使用的端口,即远程主机是通过22号端口访问到服务器的。
下面用客户端访问下服务器:
已经连接不上了。
2.2.7 向INPUT规则链中添加允许192.168.10.20访问服务器的22号端口,拒绝其他主机访问。
在第6个实验中,可以看到客户端使用ssh协议是不能登录服务器的,现在在第一个规则设置下允许客户端使用ssh登录服务器。
2.2.8 添加拒绝所有主机访问本机的1000-1024号端口的规则
在设置好所有规则后,都是临时生效的。若要永久生效还要使用以下命令:
service iptables save
有时会出错:
这是因为service已经逐渐被systemctl取代了。
2.3 firewall-cmd(建议使用)
# 默认安装firewalld服务
[root@server ~]# yum install firewalld -y
# 查看状态
[root@server ~]# firewall-cmd --state
not running
# 开启防火墙
[root@server ~]# systemctl start firewalld.service
# 开机自启
[root@server ~]# systemctl enable firewalld.service
[root@server ~]# firewall-cmd --state
running
# 停止防火墙
[root@server ~]# systemctl stop firewalld.service
# 禁用防火墙
[root@server ~]# systemctl disable firewalld.service
# 配置文件
[root@server ~]# ll /etc/firewalld/
firewalld.conf lockdown-whitelist.xml
helpers/ services/
icmptypes/ zones/
ipsets/
[root@server ~]# which firewalld
/usr/sbin/firewalld
区域zone:防火墙策略模板
firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面),是在区域的基础上设置策略的防火墙工具。
# firewall-cmd参数扩展
--list-all # 列出当前允许的流量
--get-services # 列出所有支持的服务
--list-services # 列出当前zone加载的服务
--add-service # 添加服务,放行一个服务
--remove-service # 移除服务,禁止放行一个服务
--get-zones # 列出所有支持的zone
--get-default-zone # 列出当前默认的zone
--add-interface # 添加接口
--remove-interface # 移除一个接口
--query-interface # 查询一个接口
--list-ports # 列除当前支持的端口号
--add-port # 添加端口号
--get-active-zones # 获取活动的区域
# SNAT 源地址转换
# 由192.168.8.网段的主机发送的响应包的源IP地址,都会转换为公网IP
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s
192.168.8.0/24 -j SNAT --to-source 公网ip
# DNAT 目标地址转换
# 客户端向公网IP发送的请求包的目标IP,都会转换为内网IP:192.168.8.177:22
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -d
公网IP -p tcp--dport 2346 -j DNAT --to-destination 192.168.8.177:22
2.4 firewall-cmd实验及其验证
在日常使用中,长格式的参数较难敲,可以使用tab命令补全功能进行补全。
2.4.1 查看当前和指定网卡在firewalld服务中使用的区域
2.4.2 修改指定网卡在永久生效模式下使用的区域为external,并验证在runtime模式和permanent模式下使用的区域
2.4.3 修改当前使用的默认区域
2.4.4 开启和关闭firewalld服务的应急状况模式
2.4.5 查询public区域是否允许请求ssh协议和http协议的流量,并且将请求http协议的流量先设置为永久允许,再设置为永久拒绝。
2.4.6 设置允许访问端口8080-8081,仅限当前生效
2.4.7 设置允许端口转发,将访问8080号端口的流量转发到22号端口,并要求当前和永久都有效。
服务器:192.168.10.10
客户端:192.168.10.20
由于22号端口是ssh协议默认使用的端口,现在想要让客户端使用ssh协议,通过端口8080访问到服务器,可以使用firewalld服务的端口转发功能。
2.4.8 增加一条富规则,使其拒绝192.168.10.0/24网段内的所有用户使用ssh协议访问本机
可以看到,客户端已经不能使用ssh协议远程登录服务器了。
2.5 firewall_config(建议考试使用,结合firewall-cmd理解)
firewalld服务的图形化界面
直接在终端输入:firewall-config
也可进入。
2.6 实验及其验证
2.6.1 查看当前和指定网卡在firewalld服务中使用的区域
2.6.2 修改指定网卡在永久生效模式下使用的区域为external,并验证在runtime模式和permanent模式下使用的区域
2.6.3 修改当前使用的默认区域
2.6.4 开启和关闭firewalld服务的应急状况模式
2.6.5 查询public区域是否允许请求ssh协议和http协议的流量,并且将请求http协议的流量先设置为永久允许,再设置为永久拒绝。
2.6.6 设置允许访问端口8080-8081,仅限当前生效
2.6.7 设置允许端口转发,将访问8080号端口的流量转发到22号端口,并要求当前和永久都有效。
2.6.8 增加一条富规则,使其拒绝192.168.10.0/24网段内的所有用户使用ssh协议访问本机
2.6.9 firewall-cmd --reload
2.6.10 SNAT(Source Network Address Translation,源网络地址转换)技术
SNAT是一种为了解决IP地址匮乏而设计的技术,它可以使得多个内网中的用户通过同一个外网IP接入Internet(互联网)。用一个外网ip伪装多个内网用户。
2.7 TCP Wrappers
TCP Wrappers是RHEL7系统中默认的一款流量监控程序。也可以称之为服务的访问控制列表。可以用来控制本机的服务允许被哪些主机访问或者拒绝被哪些主机访问。
- /etc/hosts.allow 允许控制列表文件
- /etc/hosts.deny 拒绝控制列表文件
- 匹配规则:当修改好控制列表文件,立即生效,系统先匹配允许再匹配拒绝,匹配不上默认允许。