iptables 学习

文章目录

  • iptables 学习
    • iptables基本组件:
    • 常用iptables命令:
      • iptables -L 输出及解释
        • 解释:
    • iptables “奇淫巧技”
      • 端口转发(port forwarding)
      • 流量重定向到透明代理
      • 防止DDoS攻击
      • 防止SYN洪泛攻击
      • 黑名单
      • 使用状态模块跟踪连接
      • 状态检测
      • 防止端口扫描
      • 动态防火墙规则
      • 使用自定义链
        • 日志记录
        • 日志集中处理
        • 动态防御
        • 分类处理特定流量
        • 使用自定义链的好处
      • 记录日志
      • 动态封禁恶意流量(类似自定义链-动态防御)
      • 利用CONNMARK保存连接状态
      • 使用IPSet提高效率
      • 高级流量控制与QoS
      • TARPIT陷阱

在这里插入图片描述

iptables 学习

iptables是Linux系统上用于设置、维护和检查IPv4数据包过滤规则的命令行工具。它允许系统管理员配置网络传输中的数据包的过滤规则,这些规则决定了数据包的去向(比如是被接受、拒绝还是转发)。

iptables基本组件:

  • 表(Tables):iptables有几个内置的表,每个表包含一组特定的链。最常用的表有filter(默认)、nat和mangle。

    • filter:用于过滤数据包,如防火墙规则。

    • nat:用于网络地址转换(如端口转发)。

    • mangle:用于特殊的数据包修改(如修改TTL值)。

  • 链(Chains):每个表中包含多个链,链是实际应用规则的地方。常见的链有INPUT、FORWARD和OUTPUT。

    • INPUT:处理进入本机的数据包。

    • FORWARD:处理经过本机转发到其他设备的数据包。

    • OUTPUT:处理由本机发出的数据包。

  • 规则(Rules):在链中定义的具体操作,决定了匹配特定条件的数据包应当如何处理。

常用iptables命令:

  • 查看规则
iptables -L
iptables -t nat -L
  • 添加规则
#允许所有进入22端口(SSH)的TCP连接。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 删除规则
#删除上面添加的规则
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
  • 修改规则

    • 修改规则通常涉及删除旧规则并添加新规则。
  • 保存规则

    • 规则默认不会在系统重启后保留,可使用iptables-save > /path/to/your_rules.v4来保存当前的规则集合,并在系统启动时通过iptables-restore < /path/to/your_rules.v4恢复。
  • 设置默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -L 输出及解释

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere            
3    DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy DROP)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere            
解释:
  • Chain:显示当前的链名称(如INPUT、FORWARD、OUTPUT)以及该链的默认策略(如ACCEPT、DROP)。
  • num:规则的序号,表示规则在链中的顺序。
  • target:如果数据包匹配这条规则,将执行的动作(如ACCEPT、DROP、REJECT)。
  • prot:匹配规则的协议类型(如tcp、udp、icmp或all)。
  • opt:这一列通常为空,或者显示一些特定选项。
  • source和destination:分别表示数据包的来源地址和目标地址。"anywhere"表示匹配任何地址。
  • 其他列:可能会显示更多的匹配条件或者选项,比如端口号(–dport)、状态(state RELATED,ESTABLISHED)等。

iptables “奇淫巧技”

iptables的一些高级用法。

端口转发(port forwarding)

如果你想将到达某一端口的流量转发到另一个端口(甚至是另一台机器),iptables可以帮助你实现

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

流量重定向到透明代理

你可以将流量重定向到本地的透明代理服务器,进行内容过滤或缓存等操作:

此规则将所有到达80端口(HTTP)的流量重定向到本机的3128端口,假设在该端口上运行着一个透明代理服务。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

防止DDoS攻击

利用iptables的限速功能,你可以防止简单的DDoS攻击:

这条规则允许每分钟最多25个连接到端口80,超过这个数目的连接会被丢弃,直到下一个时间窗口。

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

防止SYN洪泛攻击

SYN洪泛是一种常见的DoS攻击方式。使用以下规则可以帮助缓解这种攻击:

第一条规则丢弃所有标记为NEW但不是SYN包的TCP连接请求,这是因为正常的新建连接请求应该是SYN包。第二条规则限制了SYN包的接收速率,以防止过多的SYN请求耗尽服务器资源。

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

黑名单

如果你想阻止某个特定IP地址或IP段与你的服务器通信:

这条规则会丢弃所有从123.456.789.0/24这个IP段来的数据包。

iptables -A INPUT -s 123.456.789.0/24 -j DROP

使用状态模块跟踪连接

利用conntrack模块,iptables可以根据连接的状态(如NEW、ESTABLISHED、RELATED等)来匹配数据包:这条规则允许所有已建立或相关的连接通过。

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

状态检测

利用conntrack模块,iptables可以根据连接的状态(如ESTABLISHED,RELATED)来匹配数据包,这对于允许响应流量而不是新建连接非常有用。

这条规则允许所有已建立或相关联的连接的数据包通过,这样可以确保只允许对已经被允许的外部请求做出响应。

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

防止端口扫描

利用recent模块,可以防止恶意用户扫描你的端口:

如果在60秒内有10次或以上的尝试连接到80端口,那么这个IP地址会被暂时加入黑名单。

iptables -A INPUT -m recent --name portscan --rcheck --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --dport 80 -m recent --name portscan --set -j ACCEPT

动态防火墙规则

利用recent模块,iptables能够动态地创建规则来防止暴力破解攻击。例如,限制SSH连接尝试:

这组规则会跟踪尝试连接到22端口的IP地址,并且如果在60秒内尝试了超过3次,则接下来的尝试会被自动丢弃。

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

使用自定义链

日志记录

为了更好地组织和管理规则,你可以创建自定义链。例如,创建一个专门用于日志记录的链:

这里创建了一个名为LOGGING的自定义链,所有输入链的数据包都会被转发到这个自定义链。在LOGGING链中,我们限制了日志记录的频率,并在日志消息中添加了前缀,最后丢弃了这些数据包。

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 4
iptables -A LOGGING -j DROP
日志集中处理

创建一个专门用于日志记录的链,可以让您更容易地管理和查看日志信息。

示例:创建一个名为LOGGING的链用于记录被拒绝的数据包信息

这些规则创建了一个名为LOGGING的自定义链,用于限制日志记录的频率并添加特定前缀。任何尝试连接到80端口的TCP流量都会被重定向到这个链,并最终被丢弃。

iptables -N LOGGING
iptables -A LOGGING -m limit --limit 5/min -j LOG --log-prefix "Dropped: " --log-level 4
iptables -A LOGGING -j DROP
iptables -A INPUT -p tcp --dport 80 -j LOGGING
动态防御

利用自定义链实现动态防御措施,如针对暴力破解攻击进行限制。

示例:创建一个名为SSH_BRUTE_FORCE的链来限制对SSH服务的暴力破解尝试。

这些规则创建了一个名为SSH_BRUTE_FORCE的自定义链,用于跟踪尝试连接到22端口的IP地址。如果在60秒内某个IP地址尝试连接超过3次,则接下来的尝试将被丢弃。

iptables -N SSH_BRUTE_FORCE
iptables -A SSH_BRUTE_FORCE -m recent --set --name SSH
iptables -A SSH_BRUTE_FORCE -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport 22 -j SSH_BRUTE_FORCE
分类处理特定流量

创建自定义链来处理来自特定IP地址或IP段的流量,或者处理特定类型的流量。

示例:创建一个名为BAD_IPS的链来处理来自不受欢迎的IP地址的流量。

这些规则创建了一个自定义链BAD_IPS,并在其中添加了两条规则来丢弃来自特定源地址的数据包。然后,它将所有尝试连接到22端口的流量都通过BAD_IPS链进行过滤。

iptables -N BAD_IPS
iptables -A BAD_IPS -s 192.168.1.100 -j DROP
iptables -A BAD_IPS -s 10.10.10.0/24 -j DROP
iptables -A INPUT -p tcp --dport 22 -j BAD_IPS
使用自定义链的好处
  • 组织性:自定义链可以帮助您将规则按功能、服务或任何其他逻辑方式分组。
  • 易于管理:更新、删除或临时禁用一组规则变得更加简单。
  • 性能:通过将检查过程分解到不同的链中,可以提高处理效率,尤其是对于复杂的规则集合。

记录日志

你可以让iptables记录被拒绝的包的信息,这对于调试和安全分析非常有用:

这条规则会记录所有尝试连接到22端口(SSH)的数据包,并在日志中添加前缀"SSH attempt: "。

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "

动态封禁恶意流量(类似自定义链-动态防御)

使用recent模块可以帮助识别并动态封禁频繁尝试连接的IP地址,这对于抵御暴力破解攻击非常有效。

示例:封禁短时间内频繁连接到SSH端口的IP。

这组规则利用recent模块跟踪尝试连接到SSH端口的IP地址。如果一个IP地址在60秒内尝试连接超过3次,它将被自动封禁。

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH_ATTEMPTS
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH_ATTEMPTS -j DROP

利用CONNMARK保存连接状态

在某些情况下,您可能需要跨多个链保存和恢复连接的标记状态。CONNMARK是一个有用的工具,可以用于此目的。

示例:标记并跟踪特定类型的流量,以便在不同链中进行特殊处理。

这个例子中,所有进入接口eth0并目标端口为80的TCP连接都被标记。在FORWARD链中,所有带有此标记的连接都会被记录日志。

ipset create blacklist hash:ip
ipset add blacklist 192.168.1.100
ipset add blacklist 10.10.10.0/24

iptables -A INPUT -m set --match-set blacklist src -j DROP

使用IPSet提高效率

当需要处理大量IP地址或IP范围时,使用IPSet可以显著提高iptables的效率。

示例:创建一个IPSet集合并在iptables规则中使用它来匹配多个IP地址。

这个例子创建了一个名为blacklist的IPSet集合,并添加了一些IP地址到集合中。然后,通过iptables规则使用这个集合来一次性丢弃所有在黑名单中的源地址。

ipset create blacklist hash:ip
ipset add blacklist 192.168.1.100
ipset add blacklist 10.10.10.0/24

iptables -A INPUT -m set --match-set blacklist src -j DROP

高级流量控制与QoS

利用iptables的mangle表和TC(Traffic Control)工具,可以实现复杂的流量控制和服务质量(QoS)策略。

示例:为特定服务的流量打标签,然后通过TC工具对其进行优先级控制。

这个例子通过iptables在数据包上设置一个标记,然后使用TC定义了一个基于该标记的流量控制策略,确保HTTP流量(端口80)有足够的带宽。

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1

TARPIT陷阱

TARPIT是一种减缓恶意连接的技术,它可以使攻击者的连接保持在开放状态,从而消耗其资源。

示例:使用TARPIT来处理扫描或攻击尝试。

TARPIT功能可能需要额外的模块支持,并不是所有系统都内置了此功能。这个规则使得所有尝试连接到80端口的TCP连接被延迟处理,从而耗费攻击者资源。

iptables -A INPUT -p tcp --dport 80 -j TARPIT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/548383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第14届java A组蓝桥杯做题记录

A题 特殊日期 package Java14省赛.Java研究生组;import java.time.Year; //特殊判断一下2月份&#xff0c;leaf 为true 1 import java.util.*;import 蓝桥杯.dfs_n皇后; public class 特殊日期 {static int sum(int d){int res 0;while(d > 0){res d % 10;d / 10;}return…

基于Springboot+Vue的Java项目-房产销售系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

FlexLua低代码便捷打造4G转RS485网关设备

在物联网时代&#xff0c;各种设备之间的互联互通变得越来越重要&#xff0c;而4G转RS485网关设备的出现为不同设备之间的通信提供了更便捷的方式&#xff0c;推动了物联网技术的发展。 4G转RS485网关的通信原理相对简单易懂。它通过4G网络接收数据&#xff0c;然后将数据转换成…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 一、简单介绍 二、简单去除图片水印效果实现原理 三、简单去除图片水印效果案例…

Java入门基础知识第八课(数组)——冒泡排序、Arrays工具类

前面二白讲了关于数组的概念、语法以及简单的输入输出&#xff0c;实际上关于数组的知识还有很多&#xff0c;接下来咱们讲一下冒泡排序以及一些常用的Arrays工具类&#xff0c;需要记忆的知识很多&#xff0c;而且容易混淆。 一、冒泡排序 简介&#xff08;原理&#xff09;…

基于SpringBoot的“银行OA系统的设计与实现”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“银行OA系统的设计与实现”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 用户登录界面 管理员主界面 员工基本档…

知道做到 一篇总结学习方法的笔记

元数据 [!abstract] 知道做到&#xff1a;跃迁式学习 书名&#xff1a; 知道做到&#xff1a;跃迁式学习作者&#xff1a; 彼得•霍林斯简介&#xff1a; 学习是改善你的生活环境、成为你想成为的人的关键。科学的方法能加速学习进程&#xff0c;让你事半功倍。技能、信息和能力…

openkylin系统通过网线连接ubuntukylin系统上网攻略

openkylin系统通过网线连接ubuntukylin系统上网攻略 主机1&#xff1a;x64 amd &#xff0c;系统&#xff1a;ubuntukylin 22.04 &#xff0c;状态&#xff1a;通过wifi连接热点进行上网&#xff0c;并共享网络。 主机2&#xff1a;x64 intel &#xff0c;系统&#xff1a;ope…

5.x 版本 CallKit SDK 无法弹起通话界面

5.x 版本 CallKit SDK 作为接听方在前台的情况下无法弹起通话界面&#xff0c;作为拨打方能正常弹起通话界面 分析&#xff08;根因分析、需求分析&#xff09; CallKit SDK 初始化依赖于 IMKit SDK 初始化&#xff0c;如果您使用 IMLib SDK 的方法初始化的话&#xff0c;会导…

告别百年激进笔记

系列文章目录 八次危机笔记 告别百年激进笔记 文章目录 系列文章目录前言导图第一部分 资本全球化的宏大叙事第一节 人类创造的两个异化物第二节 全球资本化与制度性致贫第三节 国家竞争的“微笑曲线”第四节 欧债危机实属政治危机第五节 日本研究中的另类思考第六节 从…

流程图的新语法-mermaid的快速使用--推荐

chatgpt或者现在的大数据采用的流程图给出的代码如下&#xff1a; graph TD;A[接收客户请求] --> B[问题分类];B --> C[技术支持];B --> D[维修服务];C --> E[远程解决];C --> F[现场支持];D --> G[维修完成];G --> H[服务反馈];style A fill:#f9f,strok…

【数据结构与算法】贪心算法及例题

目录 贪心算法例题一&#xff1a;找零问题例题二&#xff1a;走廊搬运物品最优方案问题输入样例例题三&#xff1a;贪心自助餐 贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优的选择&#xff0c;以期望最终达到全局最优解的算法。它的核心思想是每次都选择当前最…

即插即用模块详解SCConv:用于特征冗余的空间和通道重构卷积

目录 一、摘要 二、创新点说明 2.1 Methodology 2.2SRU for Spatial Redundancy​编辑 2.3CRU for Channel Redundancy 三、实验 3.1基于CIFAR的图像分类 3.2基于ImageNet的图像分类 3.3对象检测 四、代码详解 五、总结 论文&#xff1a;https://openaccess.thecvf.c…

kafka的概念以及Zookeeper集群 + Kafka集群 +elfk集群

目录 zookeeper同步过程 分布式通知和协调 zookeeper同步过程 分布式通知和协调 准备 3 台服务器做 Zookeeper 集群 192.168.68.5 192.168.68.6 192.168.68.7 安装前准备 //关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 node1服务器&a…

Linux进阶篇:性能监控工具:socket 统计信息

Linux性能监控工具&#xff1a;socket 统计信息 1 ss命令介绍 ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息&#xff0c;它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息&#xff0c;而且比 netsta…

ssm052游戏攻略网站的设计与实现+vue

游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本游戏攻略网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…

使用avx2 指令集加速向量算法运算

使用cpu-z 查看cpu指令集 2 向量加&#xff0c;乘法&#xff0c;除法 我们使用向量加&#xff0c;为什么函数是0 到 8 的计算&#xff0c;因为avx2 寄存器为256位&#xff0c;同时设置启动增强指令集 #include <immintrin.h> // 引入包含AVX2指令集的头文件void vecto…

2024认证杯数学建模A题保暖纤维保暖能力原创论文讲解(含完整python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了认证杯数学中国数学建模网络挑战赛第一阶段A题目保暖纤维的保暖能力完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品…

【Conda基础命令】使用conda创建、查看、删除虚拟环境及可能的报错处理

文章目录 前言&#xff08;1&#xff09; 在默认路径下创建一个新的虚拟环境&#xff08;2&#xff09; 查看已有的虚拟环境&#xff08;3&#xff09; 删除已有的虚拟环境&#xff08;谨慎操作&#xff09;&#xff08;4&#xff09;激活虚拟环境&#xff08;5&#xff09;退出…

社区养老服务系统|基于springboot社区养老服务系统设计与实现(源码+数据库+文档)

社区养老服务系统目录 目录 基于springboot社区养老服务系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员部分功能 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;服务种类管理 &#xff08;3&#xff09;社区服务管理 &#xff08…
最新文章