Linux修炼之旅第七章!
今天来介绍火墙的管理策略firewalld和iptables,介绍两者的基础命令和高级规则。下面我们就开始吧
文章目录
实验开始前先配置好实验环境
配置两台主机
一台为双网卡主机
同时拥有172.25.254网段和1.1.1网段
一、火墙管理及工具切换
本章主要介绍两种比较主流的火墙管理方式
iptables和firewalld
相较于firealld,iptables使用起来更复杂,但是管理起来更精确。
两者的使用需要切换
如何切换呢
首先介绍firewalld转换到iptables
dnf install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld #冻结火墙服务,如果想重启必须解锁,unmask
systemctl enable --now iptables
然后是iptables转firewalld
dnf install firewalld -y
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld
二、firewalld
1.firewalld的开启
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld
2.firewall的图形管理界面
安装
dnf install firewall-config-0.8.0-4.el8.noarch -y
如果没有启用服务清参照上面的开启步骤开启firewall服务
使用指令
firewall-config
firewall的模块在
/usr/lib/firewalld/
firewall的配置在
/etc/firewalld/
3.关于firewalld的域
关于firewall中的域的解释
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
4.firewalld的管理命令
firewall-cmd --state
##查看火墙状态
firewall-cmd --get-active-zones ##查看当前火墙中生效的域
firewall-cmd --get-default-zone ##查看默认域
firewall-cmd --list-all
##查看默认域中的火墙策略
firewall-cmd --list-all --zone=work ##查看指定域的火墙策略
命令效果
关于trusted,block和drop
全信任域
firewall-cmd --set-default-zone=trusted
block拒绝所有
firewall-cmd --set-default-zone=block
drop丢弃
firewall-cmd --set-default-zone=drop
查看所有可以设定的服务
firewall-cmd --get-services
指定数据来源访问指定域
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block
指定只有172.25.254网段的主机可以访问
命令中是block,看到的效果与上一布中的bolck效果相同
如果想要解除,直接用命令删除即可
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block
移除后又回到了drop状态
关于网卡的指令
firewall-cmd --permanent --remove-interface=ens10 --zone=public #删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens10 --zone=drop
#添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens10 --zone=public #更改网络接口到指定域
如果以上面的代码为实验的话,就不可以通过ssh服务来实验,会导致连接直接断开。
5.firewalld的高级规则
高级规则的效果,下面通过一个实验来进行说明
首先在服务主机中开启高级规则,限制除了172网段的80主机以外的主机,任何服务都被拒绝
现在设定高级规则,满足上述要求
1网段的主机本来可以访问,设定完毕后不被允许
172网段的80主机没问题
6.firewalld中的NAT
SNAT
简单来说,就是通过开启地址伪装策略来对访问的用户进行控制,比如1网段的主机通过172网段的服务主机来连接别的172网段主机,那么在172的测试主机上就会显示服务主机的172网段ip,具体实验效果如下:
首先设置1网段的客户主机的网关为服务主机的1网段ip地址为网关
在服务主机中开启地址伪装策略
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
然后用1网段的主机来连接172网段的测试机
可以看到记录中连接的主机使服务主机的ip而非真正连接主机的1网段主机
DNAT
DNAT的效果则是可以让服务主机变成一个中继站,使连接到服务主机的地址直接跳转到设置好的另一个ip中,下面看看实验效果
设定跳转的地址为1.1.1.200
firewall-cmd --pernament --add-forword-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.200
firewall-cmd --reload
可以看到原本访问服务主机,但是自动转到了1.1.1.200主机上
三、iptables
实验开始之前先从firewalld切换至iptables,具体步骤见第一节中。
开启iptables服务
1.iptables命令
iptables
-t #指定表名称
-n #不做解析
-L #查看
-A #添加策略
-p #协议
--dport #目的地端口
-s #来源
-j #动作
ACCEPT #允许
DROP #丢弃
REJECT #拒绝
SNAT #源地址转换
DNAT #目的地地址转换
-N #新建链
-E #更改链名称
-X #删除链
-D #删除规则
-I #插入规则
-R #更改规则
-P #更改默认规则
iptables -nL
上面这个指令可以对状态进行查看,利用这个指令并开启监视,对其他命令进行测试
iptables -D INPUT 2
删除INPUT中的第二条规则
iptables -I -s 172.25.254.80 -j REJECT
插入规则
iptables -N shy
新建链
iptables -E shy SHY
链更名
iptables -X SHY
删除链
iptables -P INPUT DROP
更改默认规则为丢弃
iptables -P INPUT ACCEPT
更改默认规则为通过
2.iptables对于读取规则的优化策略
3.iptables的nat模式
第二部分的内容中firewall的nat功能相同,介绍iptables下的nat功能
snat
iptables -t nat POSTROUTING -o ens3 -j SNAT --to-source 172.25.254.100
sysctl -a | grep ip_forword
看看开启时候成功
net.ipv4.ipforward=1表示 成功
如果不是1
则编辑文件
vim /etc/sysctl.conf
在最后写入
net.ipv4.ipforward=1
这样就配置好了snat,效果类似于内网可以访问外网了
dnat
dnat与snat刚好相反,让外网访问内网,只需访问双网卡服务器
配置双网卡服务器
iptables -t nat -A PREROUTING -i ens3 -j DNAT --to-dest 1.1.1.200
查看
iptables -t nat -nL
实验效果
用172网段的80主机访问双网卡服务器,查看到的是1网段的ip