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  
  • 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 在安装时已经把它作为一个服务设置为开机启动了,它在开机后会自动加载已经保存的规则,所以也就达到了永久保存的目的。其实原理和第一种方法是类似的,只是设置起来会更简单一些。

posted on 2024-03-14 14:02  Getone超  阅读(24)  评论(0编辑  收藏  举报