首页 > 其他分享 >netfilter: iptable的使用

netfilter: iptable的使用

时间:2024-03-14 14:11:48浏览次数:22  
标签:iptables -- sudo iptable 192.168 使用 dport 数据包 netfilter

netfilter

相关网址

官网:netfilter/iptables project homepage

iptables基础知识详解_LarryHai6的博客-CSDN博客_iptables

使用iptables进行端口转发 - 云+社区 - 腾讯云 (tencent.com)

原理图

image

iptables

1. 原理叙述

iptables具有Filter, NAT, Mangle, Raw四种内建表:

1. Filter表

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

  • INPUT链 – 处理来自外部的数据。
  • OUTPUT链 – 处理向外发送的数据。
  • FORWARD链 – 将数据转发到本机的其他网卡设备上。

2. NAT表

NAT表有三种内建链:

  • PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
  • POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  • OUTPUT链 – 处理本机产生的数据包。

3. Mangle表

Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:

  • PREROUTING
  • OUTPUT
  • FORWARD
  • INPUT
  • POSTROUTING

4. Raw表

Raw表用于处理异常,它具有2个内建链:

  • PREROUTING chain
  • OUTPUT chain
2. 命令使用

显示表内容

 sudo iptables -t filter –L  

image-20220509090152174

  • num – 指定链中的规则编号
  • target – 前面提到的target的特殊值
    • ACCEPT – 允许防火墙接收数据包
    • DROP – 防火墙丢弃包
    • QUEUE – 防火墙将数据包移交到用户空间
    • RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
  • prot – 协议:tcp, udp, icmp等
  • source – 数据包的源IP地址
  • destination – 数据包的目标IP地址

清空表

iptables -t NAT -F

添加规则

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
3. 特定场景
端口映射
sudo nano /etc/sysctl.conf


net.ipv4.ip_forward=0 改为 net.ipv4.ip_forward=1

生效
sudo sysctl -p



添加规则

iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A PREROUTING -p udp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]

将本地(内网:192.168.20.3 外网:192.168.8.101)10022端口映射到192.168.20.2:22

sudo iptables -t nat -I PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.20.2:22
sudo iptables -t nat -I PREROUTING -p udp --dport 10022 -j DNAT --to-destination 192.168.20.2:22

sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.20.2/24   --dport 22 -j SNAT --to-source 192.168.20.3
sudo iptables -t nat -I POSTROUTING -p udp -d 192.168.20.2/24   --dport 22 -j SNAT --to-source 192.168.20.3

保存生效

service iptables save
service iptables restart

永久保存

  • 首先安装iptables-persistent工具
sudo apt install iptables-persistent
  • 每当设置了新的iptables规则后,使用如下命令保存规则即可,规则会根据ipv4和ipv6分别保存在了/etc/iptables/rules.v4和/etc/iptables/rules.v6文件中。
sudo netfilter-persistent  save

由于 ipt­a­bles-per­sis­tent 在安装时已经把它作为一个服务设置为开机启动了,它在开机后会自动加载已经保存的规则,所以也就达到了永久保存的目的。其实原理和第一种方法是类似的,只是设置起来会更简单一些。

标签:iptables,--,sudo,iptable,192.168,使用,dport,数据包,netfilter
From: https://www.cnblogs.com/getonechao/p/18072718

相关文章

  • ESP32-Cam 初步使用:网络摄像头示例
    此片意在教会你如何初步使用ESP32-cam阅读本文,你将学会:一.学会安装Arduino二.学会使用相关例程一、Arduino的下载安装及汉化1.下载Arduino(Arduino软件下载官网)2.Arduino的安装3.Arduino的汉化:左上角File-->Preferences(Ctrl+逗号也能进入)-->Settings-->Lang......
  • docker的使用方法
    一、docker安装Docker官方文档|DockerDocumentation1.自动安装wgethttp://fishros.com/install-Ofishros&&sudobashfishros2.手动安装2.1.ubuntu安装1.系统需求UbuntuJammy22.04(LTS)UbuntuImpish21.10UbuntuFocal20.04(LTS)UbuntuBionic18.04......
  • 介绍Git 的基本概念和使用方式
    Git是一种分布式版本控制系统,用于管理和跟踪源代码的变化。它具有以下基本概念和使用方式:1.仓库(Repository):Git使用仓库来存储源代码和历史记录。仓库可以是本地的,也可以是远程的。每个项目都有一个对应的仓库。2.提交(Commit):提交是对代码的一次更改。每个提交都有一个唯一......
  • 4_关于类的主动使用和被动使用
    关于类的主动使用和被动使用在JVM当中表示两个class对象是否为同一个类存在的两个必要条件:类的完整类名必须一致,包括包名。加载这个类的ClassLoader必须相同。换句话说,在JVM当中,即使这两个类对象(class对象)来源同一个class文件,被同一个虚拟机加载,但只要加载它们的ClassLoader......
  • VMwear虚拟机的安装与使用(Win11)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、前言什么是VMware?VMware与Linux二、VWmear下载与安装(1)安装VMware虚拟机软件。(2)按照指引安装完成后,单击“许可证”按钮输入密钥(3)创建RHEL8.3虚拟机。(4)对虚拟机的RHEL8.3系统做快照和恢......
  • Raspberry:Wiringpi的安装及使用
    +++title="Raspberry:Wiringpi的安装及使用"description="Wiringpi的安装及使用"date=2022-05-04T14:01:09+08:00author="chao"draft=falseimage=""math=truecategories=["os"]tags=["raspberry"]+......
  • php使用openssl生成公钥私钥
    1、确保你的PHP环境已经启用了OpenSSL扩展$config=array("digest_alg"=>"sha1","private_key_bits"=>1024,"private_key_type"=>OPENSSL_KEYTYPE_RSA,"config"=>�......
  • flask多表查询操作的两种方法(使用外键和不使用外键)
    1使用外键:在Flask中使用Flask-SQLAlchemy进行连表查询时,可以通过定义模型的外键关系来实现。下面是一个如何定义模型和进行连表查询的示例:首先,定义两个模型:fromflask_sqlalchemyimportSQLAlchemy#初始化SQLAlchemydb=SQLAlchemy()#用户模型classUser(db.Model......
  • MogDB-openGauss default privileges 使用方法
    MogDB/openGaussdefaultprivileges使用方法权限是用户访问数据库对象的首要条件,每个新增用户默认属于PUBLIC角色组成员,也就是具有PUBLIC角色组的权限,但在日常业务使用中,仅仅具有PUBLIC权限是远远不够的,还需要具有额外的权限,在MogDB/openGauss数据库支持的业务中经常需......
  • 三种方式使用纯 CSS 实现星级评分
    本文介绍三种使用纯CSS实现星级评分的方式。每种都值得细品一番~五角星取自ElementPlus的svg资源<svgxmlns="http://www.w3.org/2000/svg"viewBox="0010241024"style=""><pathfill="currentColor"d="M283.84867.8......