实验环境:两台虚拟机,一台双网卡主机可以上外网,可以连接内网,一台单网卡主机可以连接内网
1.火墙介绍
linux防火墙简单来说是内核上数据包过滤的插件,主要工作在网络层,属于典型的包过滤防火墙。常用的有两种火墙工具iptables和firewalld,但软件本身其实并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,真正利用规则进行过滤是由内核netfilter完成的。netfilter IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。
1.netfilter
2.iptables
3.iptables|firewalld
2.火墙管理工具切换
在rhel8中默认使用的是firewalld
从firewalld切换到iptables的过程,先搭建好软件仓库,安装iptables
dnf install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
systemctl enable --now iptables

从iptales切换到fiewalld的过程
dnf install firewalld -y
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld

3. iptables 的使用
火墙策略的永久保存
/etc/sysconfig/iptables 是iptables 策略记录文件
永久保存策略
iptales-save > /etc/sysconfig/iptables
service iptables save(建议使用)

4.火墙默认策略
默认策略中的5条链
input |
输入 |
output |
输出 |
forward |
转发 |
postrouting |
路由之后 |
prerouting |
路由之前 |
默认的3张表
Filter |
经过本机内核的数据(input output forward) |
nat |
不经过内核的数据(postrouting,prerouting,input,output) |
mangle |
当filter和nat表不够用时使用(input output forward postrouting,prerouting,) |

iptables命令
iptables -t nat -nL (-t指定表名)
iptables -t mangel –nL
-n 不做解析
-L 查看

-A 添加策略
-p 协议
--dport 目的地端口
-s 来源
-j 动作
ACCEPT 允许
DROP 丢弃
REJECT 拒绝
SNAT 源地址转换
DNAT 目的地地址转换
-N 新建链
-E 更改链名称
-X 删除链
-D 删除规则
-I 插入规则
-R 更改规则
-P 更改默认规则
数据包状态
RELATED 建立过连接的
ESTABLISHED 正在连接的
NEW 新的
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
任何访问本机80 端口的数据都让他通过

iptables -I INPUT 1 -s 192.168.155.178 -p tcp --dport 80 -j REJECT
不允许192.1268.155.178访问本机80端口

测试:用192.168.155.178主机

iptables -R INPUT 1 -s 192.168.155.178 -p tcp --dport 80 -j ACCEPT
更改第一条使其允许192.168.155.178访问本机80端口

策略优化
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
ptables -A INPUT -m state --state NEW -j REJECT

原地址转换
在双网卡主机中设置
snat
iptable -t nat -A POSTROUTING -o ens192 -j SNAT --to-source 192.168.43.201

在单网卡主机中连接双网卡主机

在双卡主机中显示是双网卡主机的另一个ip

目的地地址转换
dnat
iptables -t nat -A PREROUTING -i ens192 -j DNAT --to-dest 192.168.155.178

firewalld
1 firewalld的开启
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld

2.关于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
3.关于firewalld的设定原理及数据存储
/etc/firewalld 火墙配置目录
/lib/firewalld 火墙模块目
4. firewalld的管理命令
firewall-cmd --state 查看火墙状态
firewall-cmd --get-active-zones 查看当前火墙中生效的域
firewall-cmd --get-default-zone 查看默认域
firewall-cmd --list-all 查看默认域中的火墙策略

firewall-cmd --set-default-zone=trusted 设定默认域
firewall-cmd --list-all --zone=work 查看指定域的火墙策略

firewall-cmd --get-services 查看所有可以设定的服务
firewall-cmd --permanent --remove-service=cockpit 移除服务
firewall-cmd --reload
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block
指定数据来源访问指定域
firewall-cmd --reload firewall-cmd --permanent --remove-source=192.168.155.178/24 --zone=block 删除自定域中的数据来源

firewall-cmd --permanent --remove-interface=ens192 --zone=public
删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens192 --zone=block 添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens192 --zone=public
更改网络接口到指定的域

5. firewalld的高级规则
服务器端
firewall-cmd --direct --get-all-rules 查看高级规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 172.25.254.250 -p tcp --dport 22 -j REJECT (拒绝192.168.155.178连接)

测试端

服务器端删除后

测试端即可登录

6.firewalld中的NAT
SNAT
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

DNAT
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toaddr=192.168.155.178 firewall-cmd –reload
