目录
一、火墙介绍
什么是火墙?
火墙是管理计算机从网络中的服务或端口开放与否的一个“名单”,这个名单叫“netfilter”;计算机中一般存在多个名单,多个名单共同管理计算机的网络访问,多个名单就叫“iptables”;管理这些名单的有两个工具,一个是<iptables>,另一个是已经熟悉的<firewall>。
火墙示意图:
二、火墙管理工具切换
注意:火墙管理工具不能兼容,开启一个就必须先关闭另一个。rhel8中默认的管理工具是firewalld
1、firewalld切换到iptables
dnf install iptables-services -y #安装iptables
systemctl stop firewalld #停止firewalld
systemctl disable --now firewalld #禁用firewalld
systemctl mask firewalld #冻结firewalld服务
systemctl enable --now iptables #启用iptables
2、iptables切换到firewalld
dnf install firewalld -y #安装firewalld
systemctl stop iptables #停止iptables
systemctl disable --now iptables #禁用iptables
systemctl mask iptables #冻结iptables服务
systemctl enable --now firewalld #启用firewalld
三、iptables 的使用
1、火墙策略的永久保存
/etc/sysconfig/iptables #iptables策略记录文件
2、永久保存策略
永久保存更改指的是:在iptables中临时更改后,就会立即生效,但是并不影响iptables的策略记录文件,在重新启动iptables服务后,会重新读取策略记录文件,恢复到未更改之前的状态;如果要保存更改的话,就需要将临时更改写入到策略记录文件中。
service iptables save #保存更改
四、火墙默认策略
1、默认策略中的5条链
input | 输入 |
output | 输出 |
forward | 转发 |
prerouting | 路由之前 |
postrouting | 路由之后 |
2、默认的3张表
filter | 经过本机内核的数据(input output forwarf) |
nat | 不经过本机内核的数据( input prerouting postrouting output) |
mangle | 当filter和nat表不够用时才使用( input prerouting forward postrouting output) |
3、iptables命令
-t | 指定表名称 | -n | 不做解析 |
-L | 查看 | -A | 添加策略 |
-p | 协议 | -s | 来源 |
--dport | 目的地端口 | -F | 清空策略 |
-j 动作 | ACCEPT #允许 DROP #丢弃 REJECT #拒绝 SNAT #源地址转换 DNAT #目的地地址转换 |
<iptables -t nat -nL>:查看nat表,不指定参数<-t>时默认查看的是filter表。
<iptables -F >:清空策略
清空策略后,保存策略到配置文件,重启iptables服务后就不会恢复原来的iptables表了。
<iptables -A -s -j>:添加策略、设置来源与动作
iptables -t filter -A INPUT 1 ****
#在filter表的INPUT链的第一行添加规则
#不写行号默认添加到链的最后
<iptables -p --dropt>:设置协议及端口
-N | 新建链 | -D | 删除规则 |
-E | 更改链名称 | -I | 插入规则 |
-X | 删除链 | -R | 更改规则 |
-P | 更改默认规则 |
<iptables -D>:删除规则
iptables -D INPUT 1 #删除默认表的INPUT链的第三条规则
<iptables -I>:插入规则
iptables -I INPUT 2 -p tcp --dport 22 -j DROP
#在filter表的INPOUT链的di2行插入规则
<iptables -R>:更改规则
<iptables -N>:新建链
<iptables -E>:更改链的名称
iptables -t filter -E westos WESTOS #更改链的名称
原名称 新名称
<iptables -X>:删除链
iptables -t filter -X WESTOS #删除filter表中的WESTOS链
<iptables -P>:更改链的默认规则
iptables -t filter -P INPUT DROP #更改filter表的INPUT链的默认规则为DROP
4、iptables火墙优化策略
(1)数据包状态:
RELATED | 建立过连接的数据包 |
ESTABLISHED | 正在连接的数据包 |
NEW | 新的数据包 |
优化的基本思路是:对建立过连接的和正在连接的数据包,只用验证这串数据的第一个数据包是否符合规则,不用对这串数据中的每个数据包都进行验证,从而减少数据通过火墙的时间。
(2)对数据包访问进行优化
iptable -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#允许建立过连接的和正在连接的数据通过
iptable -A INPUT -m state --state NEW -i lo -j ACCEPT
#允许本机内部的新数据通过
iptable -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
#允许使用80端口的新数据通过
iptable -A INPUT -m state --state NEW -s 172.25.254.199 -p tcp --dport 22 -j ACCEPT
#允许来自199号机使用22端口的新数据通过
iptable -A INPUT -m state --state NEW -j REJECT
#不允许其他来源的新数据通过
service iptables save #保存更改到iptables管理文件
(3)测试
在150号主机中ssh连接199号机,由于火墙策略只允许199号机的数据使用22端口,所以150号机连接会被拒绝。重新更改火墙策略后,允许150号机的数据使用22端口,ssh服务就可以连接上了。
5、nat表中的DNAT和SNAT
实验环境,在交换机中设置两个网卡,不同网卡设置不同网段的IP,其中一个网段和真机一样,另一个网段和测试机一样,所以总共需要三台主机。
(1)SNAT
SNAT是把内网的数据地址伪装成可以发送给外网的IP,这里意思是把通过本机的所有数据在发送出去的时候都把地址换成<172.25.254.199>网段的。
但是在交换机里边添加上这个设置后,在测试端需要添加同一网段的路由器IP作为其网关。在测试端仍然无法连接通,但是却可以连接同一网段的IP,这意味着在交换机里边两个不同网段的IP之间没有开启路由功能。解决方法在下一步。
开启路由功能还需要对交换机进行以下设置,因为系统中默认是禁止路由“forward”功能的,所以一将其参数设置为1,表示允许。<sysctl -p>表示重新载入配置文件。
设置好网关后,ssh连接路由器的两个IP就都可以连上了。
连接上外网的主机后,外网的主机看到的实际是路由器的IP访问的,这就表明,内网的主机数据已经通过路由器把地址伪装成路由器的IP了。
(2)DNAT
路由器这样设置完以后,会将外部数据的地址全部转换成<1.1.1.150>号主机的IP。
所以外网的主机通过ssh连接内网时,只能连接路由器的IP<172.25.254.199>,但是路由器会将数据直接传送给内网主机<1.1.1.150>。所以外网客户机ssh连接路由器时实际访问的是内网的<1.1.1.150>号主机。
五、firewalld
1、关于firewalld的域
trusted | 接受所有的网络连接 |
home | 用于家庭网络,允许接受ssh mdns ipp-client samba-client dhcp-client |
work | 工作网络 ssh ipp-client dhcp-client |
public | 公共网络 ssh dhcp-client |
dmz | 军级网络 ssh |
block | 拒绝所有 |
drop | 丢弃,所有数据全部丢弃无任何回复 |
internal | 内部网络 ssh mdns ipp-client samba-client dhcp-client |
external | ipv4网络地址伪装转发 sshd |
对应的火墙数据文件在</lib/firewalld/zones>目录下:
2、关于firewalld的设定原理及数据存储
/etc/firewalld | 火墙配置目录 |
/lib/firewalld | 火墙数据模块目录 |
3、firewalld的管理命令
(1)火墙状态查看命令
firewall-cmd --state #查看火墙状态
firewall-cmd --get-active-zones #查看当前火墙中生效的域
firewall-cmd --get-default-zone #查看默认域
firewall-cmd --list-all #查看默认域中的火墙策略
firewall-cmd --list-all --zone=work #查看指定域的火墙策略
firewall-cmd --set-default-zone=trusted #设定默认域
(2)火墙服务设置<service>
firewall-cmd --get-services #查看所有可以设定的服务
firewall-cmd --permanent --remove-service=cockpit #移除服务
firewall-cmd --reload #重新载入火墙配置
(3)火墙数据源设置<source>
irewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block
#指定数据来源访问指定域
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block
#删除自定域中的数据来源
(4)火墙域设定<interface>
firewall-cmd --permanent --remove-interface=ens3 --zone=public
#删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens3 --zone=block
#添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens3 --zone=public
#更改网络接口到指定域
4、firewalld的高级规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 50.50.50.0/24 -p tcp --dport 22 -j REJECT
路由器端:
测试:
注意:以上是临时添加,reload以后会恢复原样。永久添加需要加上参数<--permanent>会保存更改火墙的配置文件。
6、firewalld中的NAT
SNAT:也就是开启路由器功能,让内网网段的主机可以通过路由器访问到外网。
测试:
DNAT:把路由器的指向IP变为内网主机IP。也就是说外网主机连接路由器时实际上访问的是内网的主机。
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=50.50.50.200
端口 协议 目的地端口 目的地IP
测试:
六、本章总结
1、SNAT和DNAT实验中,内网如果访问外网,那么内网客户机的网关要设置成路由器同一网段的IP。除此之外用iptables管理火墙时,还要开启路由器的“ip_forward”功能,否则也无法访问。
2、外网通过路由器的DNAT功能访问内网主机时,需要输入的密码是内网的主机密码,而不是路由器的主机密码。
3、firewall在添加或删除策略时,临时添加不用参数<--permanent>,添加完成后立即生效,<--reload>恢复原样;永久添加需要参数<--permanent>,添加完成后不会生效,必须<--reload>后才能生效。