文章目录
1. 火墙介绍
防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的边界上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。
1.1 iptables简介
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:
- 网络地址转换(Network Address Translate)
- 数据包内容修改
- 以及数据包过滤的防火墙功能
2. 火墙管理工具切换
2.1 firewalld切换到iptables
- 关闭firewalld
systemctl disable --now firewalld.service
systemctl mask firewalld.service
- 打开iptables
dnf install iptables-services.x86_64 -y
systemctl unmask iptables.service
systemctl enable --now iptables.service
2.2 iptables切换到firewalld
- 关闭iptables
systemctl disable --now iptables.service
systemctl mask iptables.service
- 打开firewalld
dnf install firewalld -y #安装firewalld(rhel8中默认已安装)
systemctl unmask firewalld.service
systemctl enable --now firewalld.service
3. iptables的四表五链
每个规则表,其实就相当于一个内核空间的容器,按照规则集的不同用途进行划分为默认的四个表,在每个规则表中包含不同的规则链,处理数据包的不同时机分为五种链,决定是否过滤或处理数据包的各种规则并按照先后顺序存放在各规则链中。
- 规则的作用:对数据包进行过滤或处理;
- 链的作用:容纳多种防火墙规则;
规则表:iptables管理着四个不同的规则表,分别由独立的内核模块实现
- filter 表:经过本机内核的数据,用来对数据包进行过滤,具体的规则要求决定如何处理一个数据包。对应的内核模块为:iptable_filter,其表内包括三个链:input、forward、output;
- nat 表:(network address translation,网络地址转换)不经过内核,主要用来修改数据包的 IP 地址、端口号信息。对应的内核模块为:iptable_nat,其表内包括三个链:prerouting、postrouting、output;
- mangle 表:当fileter和nat表不够用时使用主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略路由等。对应的内核模块为:iptable_mangle,其表内包括五个链:prerouting、postrouting、input、output、forward;
- raw 表:主要用来决定是否对数据包进行状态跟踪。对应的内核模块为:iptable_raw,其表内包括两个链:output、prerouting;
规则链
- input 链:输入(当收到访问防火墙本机地址的数据包时,将应用此链中的规则;)
- output 链:输出(当防火墙本机向外发送数据包时,将应用此链中的规则;)
- forward 链:转发(当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则;)
- prerouting 链:路由之前(在对数据包做路由选择之前,将应用此链中的规则;)
- postrouting 链:路由之后(在对数据包做路由选择之后,将应用此链中的规则;)
数据包状态
RELATED | 建立过连接的 |
ESTABLISHED | 正在连接的 |
NEW | 新的 |
4. iptables的永久保存
iptables策略记录文件:/etc/sysconfig/iptables
iptables-save > /etc/sysconfig/iptables
service iptables save
5. iptables命令
iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作或跳转 ]
注意事项:
1.不指定表名时,默认表示filter表,
2.不指定链名时,默认表示该表内所有链,除非设置规则链的缺省策略,否则需要指定匹配条件
|
|||||
---|---|---|---|---|---|
-N | 增加链 | -X | 删除链 | -E | 重命名链 |
|
|||
---|---|---|---|
-F | 清空规则 | -A | 增加策略 |
-D | 删除规则 | -I | 插入规则 |
-R | 修改规则 | -P | 修改默认规则 |
|
|||
---|---|---|---|
-t | 指定表名称 | -n | 不做解析 |
-L | 列出指定表的策略 | --dport | 目标端口 |
-s | 数据来源 | -p | 协议 |
-o | 输出接口 | -i | 输入接口 |
ACCEPT | 允许 | DROP | 丢弃 |
REJECT | 拒绝 | -SNAT | 源地址转换 |
DNAT | 目的地地址转换 | -j | 动作 |
6. 火墙优化部署
允许ESTABLISHED与RELATED状态的数据连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许回环接口中NEW状态的数据连接:
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
允许状态为NEW的数据访问80端口:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
允许172.25.254.10中状态为NEW的数据访问22端口:
iptables -A INPUT -s 172.25.254.10 -p tcp --dport 22 -m state --state NEW -j ACCEPT
其余访问一概拒绝:
iptables -A INPUT -j REJECT
#最后必须保存
service iptables save
7. nat表中的SNAT(内网访问外网)
实验环境:
- 双网卡主机(路由):192.168.43.101;1.1.1.101
- 单网卡主机(内网):1.1.1.111(网关设为双网卡 1 段IP)
- 单网卡主机(外网):192.168.43.121
7.1 路由器端
- 打开iptables服务
systemctl disable --now firewalld.service
systemctl mask firewalld.service 上锁
dnf install iptables-services.x86_64 -y
systemctl enable --now iptables.service
iptables -F
:清空默认表(filter)- 检查基本配置
sysctl -a | grep ip_forward
vim /etc/sysctl.conf ===> net.ipv4.ip_forward = 1 #可以ping
sysctl -p
iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.43.101
:将内网访问外网的通过此路由的IP转换为192.168.43.101service iptables save
:保存修改iptables -t nat -nL
:查看nat表
7.2 客户端配置
内网主机
外网主机
7.3 客户端测试
在内网主机(1.1.1.111)中访问外网(192.168.43.121)
在外网主机(192.168.43.121)中查看登陆者,却显示路由器IP
8.nat表中的DNAT(外网访问内网)
实验环境:
- 双网卡主机(路由):192.168.43.101;1.1.1.101
- 单网卡主机(内网):1.1.1.111(网关设为双网卡 1 段IP)
- 单网卡主机(外网):192.168.43.121
8.1 路由器端
-
iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 1.1.1.111
:将外网访问内网的通过此路由的IP转换为1.1.1.111 -
service iptables save
:保存修改
8.2 客户端配置
内网主机
外网主机
8.3 客户端测试
在外网主机node3中登陆路由器node1,显示登陆在node2上
在node2中查看登陆自己的主机,显示是node3主机