netfilter: iptable的使用

随笔3周前发布 幻梦
3 0 0

netfilter

相关网址

官网:netfilter/iptables project homepage

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

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

原理图

netfilter: iptable的使用

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

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...