网站建设方案书 备案,怎样建立个人网络平台,小程序公众号网站建设,做购物网站平台文章目录前言iptable简介iptable命令使用iptables的四表五链nftables简介nftables命令的时候nftables与iptables的区别iptables-legacy和iptables-nft实例将指定protocol:ip:port的流量转发到本地指定端口前言
本文展示了#xff0c;iptables和nftable命令的使用。
# 实验环…
文章目录前言iptable简介iptable命令使用iptables的四表五链nftables简介nftables命令的时候nftables与iptables的区别iptables-legacy和iptables-nft实例将指定protocol:ip:port的流量转发到本地指定端口前言
本文展示了iptables和nftable命令的使用。
# 实验环境
5.15.0-58-generic #64~20.04.1-Ubuntu x86_64 GNU/Linuxiptable简介 iptable命令使用
参考iptables 命令Linux iptables 命令详解Linux上常用的防火墙软件 - Linux 命令搜索引擎、IptablesHowTo - Community Help Wiki
详细见上方连接命令结构如下
iptables -t 表名 -A/I/D/R 规则链名 [规则号] -i/o 网卡名 -p 协议名 -s 源IP/源子网 --sport 源端口 -d 目标IP/目标子网 --dport 目标端口 -j 动作下方是一个简单的demo阻断指定(域名)地址的访问。
# 列出filter表中(不同链的)已经设置的规则
## -t参数不指定默认是filter表
## sudo iptables-legacy -L
sudo iptables-legacy -t filter -nvL# 禁止访问百度
sudo iptables-legacy -t filter -A OUTPUT -d www.baidu.com -j REJECT# 删除添加的规则
## 查看规则的序号
sudo iptables-legacy -t filter -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination Chain FORWARD (policy ACCEPT)
num target prot opt source destination Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere 180.101.50.188 reject-with icmp-port-unreachable
2 REJECT all -- anywhere 180.101.50.242 reject-with icmp-port-unreachable## 删除规则
sudo iptables-legacy -t filter -D OUTPUT 1
sudo iptables-legacy -t filter -D OUTPUT 1# 清空整个fitter表所有链的规则
sudo iptables-legacy -t filter -Fiptables的四表五链
参考来今天飞哥带你理解 Iptables 原理-51CTO.COM
上面命令的使用过程可以让我们对iptables这个命令混个脸熟。
但是想要使用好iptbles规则我们必须知道1明白规则链表之间的关系2数据的流向(即经过哪些点哪些规则会起作用)
总的来说逻辑理解上应该是这样 协议栈上存在钩子函数数据在流经协议栈的过程中执行相应的钩子函数。而这些钩子函数即是规则通过用户层执行iptables命令的方式放入。当条件匹配的时候执行相应的动作。 这些规则根据目的/功能的不同在不同的表中。表分为四种raw,mangle,nat,filter。nat和filter比较常用分别是地址转换和包过滤。 流量流经不同的位置存在不同的链。一个链可以将不同表中不同的规则串联起来。钩子函数顺着该链执行规则。
下面这两张图来自上面连接我复制过来。 上图数据接收过程走的是 1 和 2发送过程走的是 4 、5转发过程是 1、3、5。有了这张图我们能更清楚地理解 iptables 和内核的关系。
下图在每一个链上都可能是由许多个规则组成的。在 NF_HOOK 执行到这个链的时候就会把规则按照优先级挨个过一遍。如果有符合条件的规则则执行规则对应的动作。而这些规则根据用途的不同又可以raw、mangle、nat 和 filter。从整体上看四链五表的关系如下图。 nftables简介 nftables命令的时候
ubuntu20默认没有安装nftables需要我们手动安装下。参考nftables - Debian Wiki
sudo apt install nftables
# sudo systemctl enable nftables.service关于命令的使用可以参考Nftables HOWTO in Chinese、nftables 配置与使用记录 - StarryVoid - Blog、nftables - ArchWiki、8.3.4. 使用 nft 命令管理表、链和规则 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
# 目标和上一节一样禁止访问百度(ipv4)# 创建表
## 列出所有存在的表
sudo nft list tables
## 添加一个inet类型(family)的表表名为filter
sudo nft add table inet filter# 创建链
## 从zsh切换到bash,否则语句中的shell执行会报语法错误
bash
## 在inet类型的filter表中添加一个名为OUTOUT的基础链
## 这个基础链是filter类型挂在在output钩子上优先级是filter类型(0),默认的策略是放行
sudo nft add chain inet filter OUTPUT { type filter hook output priority filter\; policy accept \; }## 列出指定表中的链
sudo nft list table inet filter
table inet filter {chain input {type filter hook input priority filter; policy accept;}chain forward {type filter hook forward priority filter; policy accept;}chain output {type filter hook output priority filter; policy accept;}chain OUTPUT {type filter hook output priority filter; policy accept;}
}# 添加规则
## 禁止访问百度(ip)
# sudo nft add rule inet filter OUTPUT ip daddr {180.101.50.242, 180.101.50.242} drop
sudo nft add rule inet filter OUTPUT ip daddr 180.101.50.188 drop
sudo nft add rule inet filter OUTPUT ip daddr 180.101.50.242 drop
## 查看表中的规则
sudo nft -a list chain inet filter OUTPUTtable inet filter {chain OUTPUT { # handle 4type filter hook output priority filter; policy accept;ip daddr 180.101.50.188 drop # handle 5ip daddr 180.101.50.242 drop # handle 6}
}## 删除规则
sudo nft delete rule inet filter OUTPUT handle 5
## 清空链
sudo nft flush chain inet filter OUTPUT
## 删除链
sudo nft delete chain inet filter OUTPUT
## 清空表
sudo nft flush table inet filter
## 删除表
sudo nft delete table inet filternftables与iptables的区别
关于两者在使用上的区别 nftables 使用教程如果打不开这篇连接可以参考CentOS 8 都发布了你还不会用 nftables - 掘金内容是一样的。 继iptables之后的新一代包过滤框架是nftables_dog250的博客-CSDN博客
总的来说nftables写起来更加灵活。至于内核中的区别母鸡 iptables-legacy和iptables-nft
可以看到我上面并没有使用iptables和iptables-nft命令。
那么iptables、iptables-legacy、nft、iptables-nft这之间有什么区别
可以阅读iptables - Debian Wiki、iptables: The two variants and their relationship with nftables | Red Hat Developer、Using iptables-nft: a hybrid Linux firewall
总的来说 iptables-legacy命令就是我们熟知的iptables背后是iptables的框架。 nft背后使用的是nftables框架。 iptables-nft在使用命令上和iptables-legacy相同只是背后是nftables。iptables-translate命令可以将iptables命令转换成nft命令 iptables是个软连接可以在iptables-legacy和iptables-nft之间切换。 实例
将指定protocol:ip:port的流量转发到本地指定端口
去年(2022年)谷歌关闭了在中国的翻译服务。我是google翻译的重度用户不得不去寻找其他替代品。如果可以将谷歌翻译的流量转发到本地的指定端口或许对于继续使用谷歌翻译有帮助。我尝试了下流量确实转发了但是如何继续这个流量似乎是个问题。
我们以这个例子来事件下iptable/nftables的使用。
首先进行DNS查找。
nslookup translate.googleapis.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53Non-authoritative answer:
Name: translate.googleapis.com
Address: 142.251.42.234将google翻译的流量转发到本地端口。
# 创建一个新链transparent被OUTPUT链引用
sudo iptables-legacy -t nat -N transparent
sudo iptables-legacy -t nat -I OUTPUT -p tcp -j transparent# 将tcp 142.251.42.234:443的流量转发到1089端口
sudo iptables-legacy -t nat -A transparent -p tcp -d 142.251.42.234 --dport 443 -j REDIRECT --to-ports 1089
sudo iptables-legacy -t nat -nvL# 清空并删除transparent链
sudo iptables-legacy -t nat -F transparent
sudo iptables-legacy -t nat -X transparent至于如何使用nft命令该如何去写这里不实现。但我们看下转发的哪条规则该如何写。
$ iptables-translate -t nat -A transparent -p tcp -d 142.251.42.234 --dport 443 -j REDIRECT --to-ports 1089
# 在这之前需要先行创建一个名为nat的ip类型表。表中添加一个名为transparent的链。
## 链的类型为nat,hook为OUTPUT
nft add rule ip nat transparent ip daddr 142.251.42.234 tcp dport 443 counter redirect to :1089