防火墙&iptables相关学习

防火墙种类说明概述

以下概述,厂商手册,博文都介绍了,耐心看完总有收获。防火墙

网络安全第四讲 防火墙工作原理及应用-腾讯云开发者社区-腾讯云 (tencent.com)

WAF基本原理与部署方式-CSDN博客

深信服防火墙白皮书Windows 用户 (sangfor.com.cn)

绿盟NF防火墙产品白皮书 (nsfocus.com.cn)

奇安信 新一代智慧防火墙-技术支持 (qianxin.com)

硬件防火墙

  • H3C、华为、Cisco(思科):这些厂商提供的硬件防火墙设备通常部署在网络的边缘,作为企业的第一道防线。它们能够提供高性能的数据包过滤、状态检测、入侵防御和其他安全功能。这些设备通常具有较高的吞吐量和稳定性,适合大规模网络使用。

  • Juniper:Juniper 也是一个知名的网络设备供应商,其防火墙产品同样适用于企业级应用,提供了先进的安全功能和网络管理能力。

软件防火墙

  • 开源软件:有许多开源的防火墙解决方案,如 pfSense、OPNsense、Untangle 等,这些软件可以安装在标准硬件上,为企业提供定制化的安全防护。

  • iptables:这是 Linux 内核中的一个数据包过滤系统,通过 iptables 命令行工具可以配置防火墙规则。它主要用于处理第 4 层(传输层)的流量。

  • firewalld:这是 Red Hat 系统(如 CentOS 7)中默认的防火墙管理工具,它提供了动态的防火墙管理功能,可以与 iptablesnftables 后端一起工作。

  • nftables:这是较新的防火墙框架,用于替换 iptables,它提供了更高效的配置语言和更高的性能,通常在 CentOS 8 及更新版本的系统中使用。

  • ufw:这是 Ubuntu 发行版中默认的防火墙管理工具,它简化了 iptables 的配置,使用户更容易管理防火墙规则。

云防火墙

  • 阿里云安全组:安全组是阿里云提供的虚拟防火墙,用于控制进入或离开实例的流量。通过安全组,你可以封 IP 地址或端口,实现对网络流量的精细化控制。

  • NAT 网关:阿里云 NAT 网关提供了共享上网和端口映射等功能,可以帮助你管理内部网络的 NAT 配置。

  • WAF 应用防火墙:Web 应用防火墙(WAF)专门用于保护 Web 应用程序免受针对应用层(第 7 层)的攻击,如 SQL 注入、跨站脚本(XSS)等。阿里云提供的 WAF 服务可以帮助企业抵御这类攻击。

netfilter的介绍

netfilter 是 Linux 内核中的一个框架,用于处理网络数据包的过滤、地址转换(NAT)以及其他网络相关的功能。它提供了一种机制,使得开发者能够编写模块化插件来扩展内核的网络栈功能,而无需直接修改内核代码。这些插件可以动态地加载到内核中,用来拦截、检查和修改网络数据包。

以下是 netfilter 的一些关键组件和概念:

组件

  • 钩子(Hooks)netfilter 在网络数据包通过内核的不同阶段设置了“钩子”(也称为“挂钩点”)。在这些点上,内核会调用注册在此处的任何模块函数,允许这些函数检查和修改数据包。主要的钩子位置包括:

    • NF_IP_PRE_ROUTING:数据包刚进入系统,还未被路由选择之前。

    • NF_IP_LOCAL_IN:数据包到达本地系统,准备交给本地协议栈处理。

    • NF_IP_FORWARD:数据包被转发给其他网络接口。

    • NF_IP_LOCAL_OUT:数据包由本地进程发送出去之前。

    • NF_IP_POST_ROUTING:数据包已经被路由选择,即将离开系统。

  • 表(Tables)netfilter 结合 iptables 使用不同的表来组织规则,例如 filter 表用于定义接受或拒绝数据包的基本策略,nat 表用于网络地址转换,mangle 表用于数据包的特殊标记或修改,raw 表用于确定是否绕过某些处理(如连接追踪)。

  • 链(Chains):链是规则的集合,它们按照顺序被应用于通过某个特定钩子的数据包。iptables 中预定义了一些链,如 INPUTOUTPUTFORWARD

工作原理

当一个数据包到达 netfilter 钩子时,它会被传递给与该钩子关联的链。链中的每条规则都会被依次评估,直到找到一条匹配的规则。匹配规则的目标决定了数据包的命运:可能是被接受、被丢弃、被跳转到另一个链,或者是执行其他动作。

应用

iptables 是最常用的 netfilter 接口,它提供了命令行工具来管理 netfilter 规则。除了 iptables,还有 ip6tables 用于 IPv6 数据包,arptables 用于 ARP 数据包,以及 ebtables 用于桥接设备。这些工具都构建在 netfilter 框架之上,为用户提供了一个强大的防火墙和网络管理工具集。

随着时间的发展,nftables 作为一种新的用户空间接口出现,旨在简化配置语法并提高性能。nftables 提供了一个统一的框架来处理 IPv4、IPv6 和其他协议,同时支持更高效的内存管理和更灵活的匹配条件。尽管如此,iptables 仍然是许多系统管理员熟悉的工具,并且在很多环境中继续使用。

firewalld,iptables,ufw等这些防火墙管理工具本质上都是调用了netfilter 接口。使用其中一种停掉别的服务,以免发生冲突

iptables五链四表

iptable是linux防火墙的管理工具。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

相关概念名词
表(table): 存放链的容器,防火墙最大概念
链(chain): 存放规则的容器 
规则(policy): 准许或拒绝规则 ,未来书写的防火墙条件就是各种防火墙规则
一环套一环
​
四表
filter表——过滤数据包
Nat表——用于网络地址转换(IP、端口)
Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表——决定数据包是否被状态跟踪机制处理
​
五链
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

我们着重点在于学习filter表和Nat表

filter表介绍

是iptables默认的表,filter表示过滤. 实现防火墙功能:(对数据包的filter过滤)屏蔽或准许,端口,ip

nat表介绍
  1. PREROUTING:此链处理所有到达系统但尚未被路由的数据包。在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等。做目的地址转换,要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的机器。

  2. OUTPUT:和主机放出去的数据包有关,改变主机发出数据包的目的地址

  3. POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则。源地址转换,要把你的内网地址转换成公网地址才能让你上网。

nat功能相当于网络的acl控制,和网络交换机acl类似

iptables相关命令格式

格式:iptables [ -t 表名 ] 选项 [ 链名 ] [ 条件 ] [ j 控制类型 ]
其中-t参数不指定表名,默认filter表处理
这是选项相关的参数
-A  添加防火墙规则  //这个是往底部加
-D  删除防火墙规则
-I  插入防火墙规则 //这个是往最顶部添加
-F  清空防火墙规则
-L  列出添加防火墙规则
-R  替换防火墙规则
-Z  zero 链的计数器清零(数据包计数器与数据包字节计数器) iptables
-P  设置链默认规则
-v 显示数据包,数据量
-X 删除用户自定义的链
-v 显示数据包,数据量
-------------------------------------------------------
条件上常用的参数
[!]-p  匹配指定协议 protocal tcp/udp/icmp/all,! 表示取反
[!]-s  匹配源地址
[!]-d  匹配目标地址
[!]-i  匹配入站网卡接口
[!]-o  匹配出站网卡接口
[!]--sport  匹配源端口
[!]--dport  匹配目标端口
[!]--src-range  匹配源地址范围
[!]--dst-range  匹配目标地址范围
[!]--limit  四配数据表速率
[!]--mac-source  匹配源MAC地址
[!]--sports  匹配源端口
[!]--dports  匹配目标端口
[!]--stste  匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string  匹配应用层字串
[!] -m 指定模块 multiport
​
---------------------------------------------------------------
-j 控制类型相关参数
ACCEPT  允许数据包通过
DROP  丢弃数据包
REJECT  拒绝数据包通过
LOG  将数据包信息记录 syslog 曰志
DNAT  目标地址转换
SNAT  源地址转换
MASQUERADE  地址欺骗
REDIRECT  重定向
​
其中DROP REJECT都表示拒绝
区别在于DROP把数据丢掉 不会返回信息给用户,REJECT会返回

以centos为例

安装:yum install -y iptables-services
//iptables配置文件的完整路径
rpm -ql iptables-services
​
#防火墙相关模块 加载到内核中
#写入到开机自启动.
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state 
​
#永久
cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state 
EOF

运行:rpm -ql iptables-services

这些文件和目录的存在表明了系统中 iptablesip6tables 的配置和管理方式。

  • 配置文件/etc/sysconfig/ip6tables/etc/sysconfig/iptables 分别包含了 IPv6 和 IPv4 防火墙规则的配置。这些配置文件在系统启动时会被加载。

  • 服务单元文件/usr/lib/systemd/system/ip6tables.service/usr/lib/systemd/system/iptables.service 定义了如何通过 Systemd 管理 ip6tablesiptables 服务。

  • 脚本文件/usr/libexec/initscripts/legacy-actions 目录下的脚本文件用于处理 iptablesip6tables 的各种操作,如保存当前规则、处理系统错误等。

  • 初始化脚本/usr/libexec/iptables/ip6tables.init/usr/libexec/iptables/iptables.init 可能是用于管理 ip6tablesiptables 服务的初始化脚本。

systemctl status iptables.service 查看运行状态是否生效

这里为什么是active(exited)而非active(running),原因有以下

一次性任务

  • iptables 服务的主要任务是在系统启动时加载和应用防火墙规则。一旦规则被成功加载,服务的任务就完成了。

  • 因此,iptables 服务并不需要一直运行在后台,而是在完成任务后退出。

  • 系统设计

    • iptables 服务的设计初衷是为了在系统启动时加载规则,并在需要时重新加载规则。这意味着它不是一个需要长时间运行的守护进程。

    • 由于 iptables 规则实际是由内核中的 netfilter 框架执行的,所以 iptables 服务本身并不需要持续运行。

Linux iptables命令详解 - 知乎 (zhihu.com)

filter表综合使用

配置之前先清空规则

[root@centos ~]# iptables -F
[root@centos ~]# iptables -X
[root@centos ~]# iptables -Z
[root@centos ~]# iptables -nL

这里其实也可以看出不指定表的时候,默认就是filter表

禁止访问8080端口

现在可以访问的情况。

iptables -t filter -A INPUT -p tcp --dport 8080 -j DROP   //拒绝用户访问8080

删除规则命令
 iptables -t filter  -nL --line-number   //获取规则编号
 iptables -t filter -D INPUT 1          //根据编号删除
删除之后又能访问了


禁ip&网段(黑名单)
实验机:centos 10.10.10.138
       ubuntu 10.10.10.137  

禁掉Ubuntu的ip阻止通信。

iptables -I INPUT -s 10.10.10.137   -j DROP
iptables -nL  //查看规则
//禁掉这个网段
iptables -I INPUT -s 10.10.10.0/24  -j DROP
 禁止网段连入(禁止10.0.0.0/24网段访问 8080端口)
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP 

配置前后发生变化,能通信配置规则之后变得不能通信

允许指定网段&ip连入(白名单)
iptables -I INPUT ! -s 10.10.10.137 -j DROP //除了10.10.10.137,其他不能连入
iptables -I INPUT ! -s 10.10.10.0/24 -j DROP //除了10.10.10.0/24,其他不能连入


配置之后ubuntu可以连接,但是win12还是连接不了。这里相当于给ubuntu设置了白名单

指定多个端口
iptables -A INPUT  -m multiport -p tcp --dport 80,443 -j ACCEPT 
iptables  -A INPUT -p tcp --dport 1:1024 -j ACCEPT //为连续1-1024端口,可以不指定-m multiport参数
iptables -I INPUT -p tcp -m multiport ! --dport 80,443 -j DROP 
​
------------------------------------------------------
使用 -m multiport 模块。这个模块允许您在一个规则中指定多个端口或端口范围,从而避免为每个端口单独创建多条规则。
禁用ping

通过防火墙规则 控制是否可以ping

iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP
iptables -t filter -I INPUT -p icmp -j DROP
以上两种都可以禁止ping
通过内核参数控制禁止被ping

--icmp-type 8一般指的是ping命令,回声请求

具体icmp类型可参考第16节 ICMP协议详解_icmp报文结构-CSDN博客

临时会话生效:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

想要永久禁止被ping,编辑/etc/sysctl.conf,添加

net.ipv4.icmp_echo_ignore_all = 1  //忽略ping请求
sysctl -p /etc/sysctl.conf  //应用新设置
匹配网络状态(TCP/IP连接状态)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
限制并发及速率
-m limit --limit 10/minute  一分钟10次包
m limit --limit n/{second/minute/hour}: 

nat表的使用

实现共享上网

实验没有搭成功,我这边环境有点问题,原因未知。可参考以下

iptables 实现内部共享上网 - nick_xm - 博客园 (cnblogs.com)

linux 各网卡作用(docker0、eth0、lo、rndis0、usb0、dummy0、l4tbr0)ens33-CSDN博客

Iptables 实现共享上网方法 - 命令记不住 (opsxdev.com)

端口转发

通常是在需要将外部请求重定向到内部服务器的情况。端口转发通常涉及NAT(Network Address Translation)表中的PREROUTINGPOSTROUTING链。

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.10.10.5:80

这个命令是在nat表的PREROUTING链中添加一条规则,将发往192.168.88.154:8080的所有TCP请求重定向到内部服务器10.10.10.5:80。在这里做了一个目的地址转换。结合上面对prerouting的理解。对方客户访问公网的最外层防火墙,他的目的地址肯定是防火墙地址。但是我们的服务器是部署在内网里面的。防火墙根据规则做了目的地址转换指向了内网服务器端口。

访问公网的8080,就是访问内网的80端口。

ip映射

iptables进行IP映射通常指的是将到达特定IP地址的流量重定向到另一台服务器的IP地址。这种技术常用于负载均衡、代理服务器、或需要将外部请求重定向到内部服务器的场景。

服务器(IP地址为192.168.88.154),需要将所有发往192.168.88.154的请求重定向到内部服务器10.10.10.5

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.5

跟上面的端口转发的命令相同,在10.10.10.5起个80服务。访问192.168.88.154的80服务就是访问10.10.10.5的80服务。

也可以添加SNAT的规则,反过来的而已。

sudo iptables -t nat -A POSTROUTING -o ens37 -j SNAT --to-source 192.168.88.154

参考:iptables的四表五链与NAT工作原理 - 知乎 (zhihu.com)

           iptables防火墙理论清晰解释(四表、五链、流程图文并茂)学习不能忘!!!_防火墙的四表五连图-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值