linux--防火墙 iptables 双网卡 NAT 桥接
linux--防火墙 iptables 双网卡 NAT 桥接
- 1 介绍
- 1.1 概述
- 1.2 iptables 的结构
- 2 四表五链
- 2.1 iptables 的四表
- filter 表:过滤规则表,默认表。
- nat 表:地址转换表。
- mangle 表:修改数据包内容。
- raw 表:原始数据包表。
- 2.2 iptables 的五链
- 3 数据包的传输过程
- 4 iptables 基本操作
- 5 iptables 设置规则
- 命令
- 表名
- 命令选项
- 链名
- 条件匹配
- help
- 6 iptables 常见命令
- 7 常用 iptables 规则链
- 允许 ssh 连接,仅开放 22 端口
- 允许 ping
- 防止 DDOS 攻击
- 设置端口转发
- 记录丢弃的包
- 8 iptables 性能优化技巧
- 安全放行所有 ESTABLISHED 状态连接,建议放在第一条,效率更高
- 尽可能将可由一条规则能够描述的多个规则合并为一条规则,如添加多个端口 / IP 访问
- 有特殊目的限制访问功能要在放行规则之前加以拒绝
- 谨慎放行入站的新请求
- 在规则最后添加默认策略
- 9 示例
- 9.1 将内网机器的服务暴露在公网,让客户可以访问
- 查看iptables规则
- 打开 iptables 转发并查看
- 规则保存
- 创建 iptables.service 文件
- NAT的实现分为下面类型:
- 永久有效:
- 9.2 iptables 双网卡 外设之间互联
- 9.3 iptables
- 10 工具
- telnet
- curl
- wireshark
- tcpdump
- 参考
1 介绍
1.1 概述
Linux 防火墙基于内核实现,它使用 Netfilter 包过滤引擎,根据用户通过 iptables 命令定义的规则实现对数据包的过滤或转发.
iptables是一个用户空间实用程序,它允许系统管理员配置Linux 内核防火墙的IP 数据包过滤规则,这些规则以不同的Netfilter模块实现。过滤器组织在一组表中,其中包含如何处理网络流量数据包的规则链。目前,不同的内核模块和程序用于不同的协议;iptables适用于 IPv4,ip6tables适用于 IPv6,arptables适用于ARP,ebtables适用于以太网帧。
1.2 iptables 的结构
iptables --> Tables --> Chains --> Rules
2 四表五链
2.1 iptables 的四表
表 | 提供功能 | 内置规则链 |
---|---|---|
filter | 包过滤 | INPUT, FORWARD, OUTPUT |
nat | 网络地址转换 | PREROUTING, POSTROUTING, OUTPUT |
mangle | 包重构 | PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD |
raw | 数据跟踪处理,提供连接跟踪机制 | OUTPUT, PREROUTING |
规则表之间的优先顺序为 raw -> mangle -> nat -> filter.
filter 表:过滤规则表,默认表。
- INPUT链:处理进入本机的数据包;
- FORWARD链:处理转发的数据包;
- OUTPUT链:处理向外发送的数据包;
nat 表:地址转换表。
- PREROUTING链:在路由判断之前对数据包进行处理;
- POSTROUTING链:在路由判断之后对数据包进行处理;
- OUTPUT链:处理向外发送的数据包;
mangle 表:修改数据包内容。
- PREROUTING链:在路由判断之前对数据包进行处理;
- INPUT链:处理进入本机的数据包;
- FORWARD链:处理转发的数据包;
- OUTPUT链:处理向外发送的数据包;
- POSTROUTING链:在路由判断之后对数据包进行处理;
raw 表:原始数据包表。
- PREROUTING链:在路由判断之前对数据包进行处理;
- OUTPUT链:处理向外发送的数据包;
2.2 iptables 的五链
链 | 生效时间 | 功能 |
---|---|---|
PREROUTING | 数据包刚进入网络接口,路由之前 | 对刚进入网络接口数据包进行路由选择,是流入本机还是由本机转发 |
INPUT | 数据包从内核流入用户空间 | 对流入用户空间的包应用规则,是拒绝、丢弃还是接受 |
FORWARD | 数据包在内核空间中,从一个网络接口进入,另一个网络接口出去 | 对由本机转发的数据包应用规则 |
OUTPUT | 数据包从用户空间流出到内核空间 | 对从用户空间流出到内核空间的数据包应用规则 |
POSTROUTING | 数据包离开网络接口前 | 对离开本机前的数据包进行路由选择 |
3 数据包的传输过程
访问本机: 在INPUT链上做过滤
本机访问外部: 在OUTPUT链上做过滤
通过本机访问其他主机: 在FORWARD链上做过滤
(1)当一个数据包流入本机网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转发出去
(2)如果数据包就是进入本机的,它将会到达 INPUT 链.INPUT 链规则接受该数据包后,相关进程就会收到它,进行处理后发送响应数据包,响应数据包会经过 OUTPUT 链,然后到 POSTROUTING 链后流出本机.
(3)如果数据包是要转发出去的,且内核允许转发 (通过 echo 1 > /proc/sys/net/ipv4/ip_forward 开启). 数据包就会经过 FORWARD 链,到达 POSTROUTING 链后流出本机
4 iptables 基本操作
- 启动iptables: service iptables start
- 关闭iptables: service iptables stop
- 重启iptables: service iptables restart
- 查看iptables状态: service iptables status
- 保存iptables配置: service iptables save
- iptables 服务配置文件: /etc/sysconfig/iptables-config
- iptables 规则保存文件: /etc/sysconfig/iptables
- 打开iptables 转发: echo “1” > /proc/sys/net/ipv4/ip_forward
5 iptables 设置规则
命令
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]Usage: iptables -[ACD] chain rule-specification [options]iptables -I chain [rulenum] rule-specification [options]iptables -R chain rulenum rule-specification [options]iptables -D chain rulenum [options]iptables -[LS] [chain [rulenum]] [options]iptables -[FZ] [chain] [options]iptables -[NX] chainiptables -E old-chain-name new-chain-nameiptables -P chain target [options]iptables -h (print this help information)
表名
Filter Nat Mangle Raw
命令选项
选项 | 描述 |
---|---|
-A | 在指定的链末尾追加一条新的规则 |
-D | 删除指定链中的一条规则 |
-I | 在指定的链中插入一条新的规则 |
-R | 修改或替换指定链中的一条规则 |
-L | 列出指定链中的所有规则 |
-F | 清空指定链中的所有规则 |
-N | 新建一条用户自定义的规则链 |
-X | 删除指定表中用户自定义的规则链 |
-P | 设置指定链的默认策略 |
-n | 以数字形式显示输出结果 |
-v | 查看规则列表时显示详细信息 |
-V | 查看iptables版本信息 |
-h | 查看帮助信息 |
–line-number | 查看规则列表时,显示规则在链中的顺序号 |
链名
INPUT链 - 处理来自外部的数据
OUTPUT链 - 处理向外发送的数据
FORWARD链 - 将数据转发到本机的其他网卡设备上
条件匹配
条件匹配分为基本匹配和扩展匹配,扩展匹配又分为隐式扩展和显示扩展
- 基本匹配
匹配参数 | 说明 |
---|---|
-p | 指定规则协议,tcp udp icmp all |
-s | 指定数据包的源地址,ip hostname |
-d | 指定目的地址 |
-i | 输入接口 |
-o | 输出接口 |
- 隐式扩展匹配
隐含扩展条件 | 需包含 | 扩展项 | 说明 |
---|---|---|---|
-m tcp | -p tcp | -sport | 源端口 |
-m tcp | -p tcp | -dport | 目标端口 |
-m tcp | -p tcp | -tcp-flags | SYN ACK RST FIN |
-m tcp | -p tcp | -syn | 第一次握手 |
-m udp | -p udp | -sport | 源端口 |
-m udp | -p udp | -dport | 目标端口 |
-m icmp | -p icmp | -icmp-type | 8:echo-request 0:echo-reply |
- 显示扩展匹配
显示扩展条件 | 扩展项 | 说明 |
---|---|---|
-m state | -state | 检测连接的状态 |
-m multiport | -source-ports | 多个源端口 |
-m multiport | -destination-ports | 多个目的端口 |
-m multiport | -ports | 源和目的端口 |
-m limit | -limit | 速率(包/分钟) |
-m limit | -limit-burst | 峰值速率 |
-m connlimit | -connlimit-above n | 多个条件 |
-m iprange | -src-range ip-ip | 源IP范围 |
-m iprange | -dst-range ip-ip | 目的IP范围 |
-m mac | -mac-source | mac地址限制 |
-m string | -algo[bm|kmp] | 匹配算法 |
-m string | -string"pattern" | 要匹配的字符串 |
-m recent | -name | 设定列表名称 |
-m recent | -rsource | 源地址 |
-m recent | -rdest | 目的地址 |
-m recent | -set | 添加源地址的包到列表中 |
-m recent | -update | 每次建立连接都更新列表 |
-m recent | -rcheck | 检测地址是否在列表 |
-m recent | -seconds | 指定时间内,与rcheck,update共用 |
-m recent | -hitcount | 命中次数,与rcheck,update共用 |
-m recent | -remove | 在列表中删除相应地址 |
- 目标值
数据包控制方式分为四种:
ACCEPT: 允许数据包通过
DROP: 直接丢弃数据包,不给出任何回应信息
REJECT: 拒绝数据包通过,必须时会给数据发送端一个响应信息
LOG: 在日志文件中记录日志信息,然后将数据包传递给下一条规则
QUEUE: 防火墙将数据包移交到用户空间
RETURN: 防火墙停止执行当前链中的后续Rules,并返回到调用链
help
iptables --help# 常用选项
-n, --number: 显示防火墙规则链的序号
-t <TABLE>: 指定表,默认表为 filter
-L, --list: 列出表下的防火墙规则链
-F, --flush: 清空防火墙规则链中所有条目# 命令选项
-P <chain> <target>: 指定默认的
-N <chain>: 创建新规则链
-E <old_chain> <new_chain>: 重命名规则链-A <chain> <rule>: 向规则链中追加规则
-A <chain> <rule_num>: 删除规则链中指定规则
-I <chain> [rule_num] <rule>: 向规则链中插入规则,默认在最开始插入规则
-D <chain> [rule_num]: 删除指定规则,默认删除 num=1 的规则
-R <chain> <rule_num> <rule>: 将规则链中指定规则-L [chain [rule_num]]: 列出指定链的防火墙规则.默认为表中所有
-S [chain [rule_num]]: 列出指定链的防火墙规则.默认为表中所有# 条件匹配
--- 基本匹配 ---
[!] -s, --src, --source: 检查源 IP
[!] -d, --dst, --destination: 检查目标 IP
[!] -p, --protocol {tcp|udp|icmp}: 检查报文协议
-i, --in-interface IFACE: 数据报文的流入接口.仅能用于 PREROUTING,INPUT 及 FORWARD 链上
-o, --out-interface IFACE: 数据报文的流出接口.仅能用于 FORWARD,OUTPUT 及 POSTROUTING 链上--- 隐式扩展匹配 ---
-p {tcp|udp}--dport PORT[-PORT]: 检查目标端口--sport PORT[-PORT]: 检查源端口
-p icmp--icmp-type: icmp 类型,0-8--- 显示扩展匹配,需要显示使用 -m 显示指定 ---
-m multiport: 多端口扩展[!] --source-ports,--sports port[,port|,port:port]...:指明多个源端口[!] --destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口[!] --ports port[,port|,port:port]...-m iprange: 指定 ip 地址范围[!] --src-range from[-to]:指明连续的源 IP 地址范围[!] --dst-range from[-to]:指明连续的目标 IP 地址范围-m string: 指定报文内容出现的字符串[!] --string pattern: 指定字符正则表达式-m time扩展: 指定时间范围--datestart--datestop--timestart--timestop--monthdays--weekdays-m connlimit: 指定并发连接数--connlimit-above n:连接的数量大于 n--connlimit-upto n: 连接的数量小于等于 n-m limit: 报文收发速率--limit rate[/second|/minute|/hour|/day]: 限制速率--limit-burst number: 限制并发量-m state: 根据连接追踪机制检查连接的状态--state {NEW,ESTABLISHED,RELATED,INVALIED}: 指定连接状态,一个或多个# 目标或动作
-j TARGET: 跳转至指定的 TARGETACCEPT: 接受DROP: 丢弃,不回应任何信息REJECT: 拒绝,回应拒绝信息RETURN: 返回调用链REDIRECT: 端口重定向LOG: 在 /var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则MARK: 做防火墙标记DNAT --to: 目标地址转换SNAT: 源地址转换MASQUERADE: 地址伪装...自定义链:由自定义链上的规则进行匹配检查
6 iptables 常见命令
- 删除 iptables 现有规则
iptables -F
- 查看iptables规则
iptables -L (iptables -L -v -n)
- 增加一条规则到最后
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
- 添加一条规则到指定位置
iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
- 删除一条规则
iptables -D INPUT 2
- 修改一条规则
iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
- 设置默认策略
iptables -P INPUT DROP
- 允许远程主机进行ssh连接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
- 允许本地主机进行ssh连接
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
- 允许HTTP请求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
- 限制ping 192.168.146.3主机的数据包数,平均2/s,最多不能超过3个
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
- 限制ssh连接速率(默认策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPTiptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT
7 常用 iptables 规则链
允许 ssh 连接,仅开放 22 端口
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT# 仅对指定网段开放 22 端口
iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT# 一次性开放多端口 22,80,443
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
允许 ping
# 从外部向内部 ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT# 从内部向外部 ping
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
防止 DDOS 攻击
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
设置端口转发
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
记录丢弃的包
iptables -N LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
iptables -A LOGGING -j DROP
iptables -A INPUT -j LOGGING
8 iptables 性能优化技巧
合理的配置 iptables 规则可以保护我们的内部主机。但是当 iptables 规则设置不合理时,可能会造成服务不可访问或服务性能下降。因此在使用 iptables 配置防火墙规则时,应注意如下几点:
安全放行所有 ESTABLISHED 状态连接,建议放在第一条,效率更高
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
尽可能将可由一条规则能够描述的多个规则合并为一条规则,如添加多个端口 / IP 访问
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPTiptables -A INPUT -m iprange --src-range 192.168.0.10-192.168.0.20 -j ACCEPT
iptables -A OUTPUT -m iprange --src-range 192.168.0.10-192.168.0.20 -j ACCEPT
有特殊目的限制访问功能要在放行规则之前加以拒绝
# 对服务器限制发送带有 *iqiyi.com 的报文
iptables -I OUTPUT 2 -m string --string "*iqiyi.com" --algo kmp -j REJECT
谨慎放行入站的新请求
在规则最后添加默认策略
iptables -A INPUT -P DROP
9 示例
9.1 将内网机器的服务暴露在公网,让客户可以访问
- wifi 连接
// 配置过,可忽略
sysctl -w net.ipv4.ip_forward=1// 离开时进行地址伪装 【如果wifi连接,DHCP分配对外地址,使用该命令】
iptables -t nat -A POSTROUTING -j MASQUERADE// eth0 网口,tcp 12289 端口进来的,目标地址转换成 192.168.10.200
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12289 -j DNAT --to-destination 192.168.10.200
- pc 连接 eth0,外设 连接 eth1
iptables 双网卡 外设之间互联
外设A和B分别连接 linux 设备 网卡 A 和 网卡 B,设备间通信之间互联 iptables 双网卡
// 配置过,可忽略
sysctl -w net.ipv4.ip_forward=1
// 在 PREROUTING 链中添加一条 DNAT 规则,将进入 eth0 的端口 12289 的数据包目标地址改为 192.168.10.200。
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12289 -j DNAT --to-destination 192.168.10.200
// 在 POSTROUTING 链中添加一条 SNAT 规则,这将确保从 192.168.10.200 发出的响应能够正确地通过 eth0 返回给原始发送者// 不行
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 12289 -j DNAT --to-destination 192.168.100.7
// 不行
sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 12289 -j SNAT --to-source 192.168.100.7
iptables -t nat -A PREROUTING -d 192.168.100.100 -p tcp --dport 12289 -j DNAT --to-destination 192.168.10.200:12289
iptables -t nat -A POSTROUTING -d 192.168.10.200 -p tcp --dport 12289 -j SNAT --to-source 192.168.100.100
iptables端口转发配置实现
https://blog.csdn.net/C3399/article/details/117820080?spm=1001.2014.3001.5502
rockchip@ubuntu:~$ systemctl status iptables
Unit iptables.service could not be found.
查看iptables规则
sudo iptables -L (iptables -L -v -n)
// 如下查看
sudo iptables -t nat -L -n -v
打开 iptables 转发并查看
- 打开 iptables 转发
echo "1" > /proc/sys/net/ipv4/ip_forward
- 查看
rockchip@ubuntu:~$ cat /proc/sys/net/ipv4/ip_forward
1
rockchip@ubuntu:~$
规则保存
# 保存规则
iptables-save > /etc/iptables.rules# 恢复规则
iptables-restore < /etc/iptables.rules
rockchip@ubuntu:~/sen$ sudo iptables-save > ipables_rules.v4
创建 iptables.service 文件
- 检查 iptables 是否已安装
rockchip@ubuntu:~$ dpkg -l | grep iptables
ii iptables 1.8.4-3ubuntu2.1 arm64 administration tools for packet filtering and NAT
rockchip@ubuntu:~$
- 如果 iptables 已安装但没有 iptables.service 文件,你可以手动创建一个。以下是一个示例 iptables.service 文件的内容:
rockchip@ubuntu:/etc/systemd/system$ sudo touch iptables.service
rockchip@ubuntu:/etc/systemd/system$ sudo vim iptables.service
[Unit]
Description=iptables rules
After=network.target[Service]
Type=root
ExecStart=/usr/sbin/iptables-restore < /opt/bot/ipables_rules.v4
#ExecReload=/sbin/iptables-restore /etc/iptables/rules.v6
ExecStartPost=/bin/echo "config the iptables rules, success!!!"
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
-
内容保存到 /etc/systemd/system/iptables.service
-
重新加载 systemd 配置:
sudo systemctl daemon-reload
- 运行 iptables.service
sudo systemctl start iptables
- 设置服务开机自启【每次开机自启】
sudo systemctl enable iptables
- 检查服务状态
systemctl status iptablesroot@r42:~# systemctl status iptables
● iptables.serviceLoaded: not-found (Reason: No such file or directory)Active: inactive (dead)
root@r42:~#rockchip@ubuntu:/etc/systemd/system$ systemctl status iptables
● iptables.service - iptables rulesLoaded: loaded (/etc/systemd/system/iptables.service; disabled; vendor preset: enabled)Active: active (exited) since Sat 2025-01-11 07:30:18 CST; 18s agoProcess: 6766 ExecStart=/usr/sbin/iptables-restore /opt/bot/ipables_rules.v4 (code=exited, status=0/SUCCESS)Process: 6767 ExecStartPost=/bin/echo config the iptables rules, success!!! (code=exited, status=0/SUCCESS)Main PID: 6766 (code=exited, status=0/SUCCESS)Jan 11 07:30:18 ubuntu.rockchip systemd[1]: Starting iptables rules...
Jan 11 07:30:18 ubuntu.rockchip echo[6767]: config the iptables rules, success!!!
Jan 11 07:30:18 ubuntu.rockchip systemd[1]: Started iptables rules.
NAT的实现分为下面类型:
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
PNAT: port nat,端口和IP都进行修改
永久有效:
一文详解iptables基础知识
9.2 iptables 双网卡 外设之间互联
瑞芯微|如何让拥有双网口的Linux设备实现数据包转发?
// final
sudo iptables -t nat -L -n -vsudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12289 -j DNAT --to-destination 192.168.10.200:12289
sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 12289 -j SNAT --to-source 192.168.10.8
rockchip@ubuntu:~$ sudo cat /etc/sysctl.conf | grep ipv4
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
#net.ipv4.tcp_syncookies=1
#net.ipv4.ip_forward=1
#net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.all.secure_redirects = 1
#net.ipv4.conf.all.send_redirects = 0
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv4.conf.all.log_martians = 1net.ipv4.ip_forward=1
系统重启后,防火墙默认不会开机启动,需要再次执行/sbin/iptables-restore < /etc/sysconfig/iptables命令,防火墙规则才能生效
- 如图显示,有数据包被处理
- 数据包一直是零,说明配置没成功
sudo modinfo iptable_nat
- 显示透传升级 LCD 屏幕程序
9.3 iptables
iptables详解
10 工具
telnet
sudo apt install telnet
telnet 192.168.100.7 12289
curl
curl http://192.168.10.200:12289
wireshark
sudo apt install wireshark
tcpdump
sudo apt install tcpdump
Tcpdump 详解(抓包)
// 终端1
tcpdump -i eth0 port 12289// 终端2
tcpdump -i eth1 port 12289
参考
1、wiki–iptables
2、iptables 具体介绍
3、Linux 防火墙及 iptables 详解
4、iptables 入门
5、iptables
6、iptables详解(1):iptables概念
7、iptables 概念、原理及相关操作介绍
8、全网超详细的Linux iptables命令详解以及详解iptables-save和iptables-restore命令
9、一文了解iptables
10、一文详解iptables基础知识
11、通过IPtables的NAT功能实现两个单独网络互通 iptables nat配置
12、linux启用NAT功能,双网卡共享网络,iptables简单实现
13、多网卡Iptables端口转发
14、瑞芯微|如何让拥有双网口的Linux设备实现数据包转发?
15、iptables 与 ip6tables 命令依赖的内核模块
16、使用iptables使多网口开发板可级联上网
17、iptables详解
18、stm32–iptables的SNAT和DNAT实验
19、转发–理解 iptables 原理
相关文章:
linux--防火墙 iptables 双网卡 NAT 桥接
linux--防火墙 iptables 双网卡 NAT 桥接 1 介绍1.1 概述1.2 iptables 的结构 2 四表五链2.1 iptables 的四表filter 表:过滤规则表,默认表。nat 表:地址转换表。mangle 表:修改数据包内容。raw 表:原始数据包表。 2.2…...
C#反射的应用案例与讲解
C# 反射 文章目录 C# 反射前言案例展示将对象转为字典测试用例执行效果代码讲解 HasValue扩展测试用例执行效果代码讲解 反射的底层逻辑反射的原理反射的基本概念反射常用的API和方法GetType类Activator类PropertyInfo类EventInfo 类MemberInfo类MethodInfo类 反射的优缺点优点…...
Mysql常见知识点
Mysql是最常用的数据库了。 1、什么是关系型数据库? 关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多&#…...
玩转 JMeter:Random Order Controller让测试“乱”出花样
嘿,各位性能测试的小伙伴们!今天咱要来唠唠 JMeter 里超级有趣又超实用的 Random Order Controller(随机顺序控制器),它就像是性能测试这场大戏里的“魔术棒”,轻轻一挥,就能让测试场景变得千变…...
企业级PHP异步RabbitMQ协程版客户端 2.0 正式发布
概述 workerman/rabbitmq 是一个异步RabbitMQ客户端,使用AMQP协议。 RabbitMQ是一个基于AMQP(高级消息队列协议)实现的开源消息组件,它主要用于在分布式系统中存储和转发消息。RabbitMQ由高性能、高可用以及高扩展性出名的Erlan…...
计算机网络 (37)TCP的流量控制
前言 计算机网络中的TCP(传输控制协议)流量控制是一种重要机制,用于确保数据在发送方和接收方之间的传输既高效又稳定。 一、目的 TCP流量控制的主要目的是防止发送方发送数据过快,导致接收方无法及时处理,从而引起数据…...
Windows10下安装vue2.0项目所需环境
一、Node.js版本管理器NVM安装 1.下载NVM安装包 nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。目前最新版…...
使用Cilium/eBPF实现大规模云原生网络和安全
大家读完觉得有帮助记得关注和点赞!!! 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…...
SQL美化器优化
文章目录 1.目录2.代码 1.目录 2.代码 package com.sunxiansheng.mybatis.plus.inteceptor;import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.*; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.*…...
网络基础1 http1.0 1.1 http/2的演进史
http1.0 1.1 http/2的演进史😎 (连接复用 队头阻塞 服务器推送 2进制分帧) 概述 我们主要关注的是应用层 传输层 http协议发展历史 http的报文结构:起始行 Header Body http的典型特征 http存在的典型问题 Keep Alive机制 chun…...
MySQL不使用子查询的原因
MySQL不使用子查询的原因及优化案例 目录 MySQL不使用子查询的原因及优化案例 目录不推荐使用子查询和JOIN的原因解决方案优化案例 案例1:查询所有有库存的商品信息案例2:使用EXISTS优化子查询案例3:使用JOIN代替子查询案例4:优化…...
网络编程(1)
网络编程概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里&#…...
Jaeger UI使用、采集应用API排除特定路径
Jaeger使用 注: Jaeger服务端版本为:jaegertracing/all-in-one-1.6.0 OpenTracing版本为:0.33.0,最后一个版本,停留在May 06, 2019。最好升级到OpenTelemetry。 Jaeger客户端版本为:jaeger-client-1.3.2。…...
【python:文件->统计飞鸟集单词个数】
主函数.py fopen("飞鸟集.txt",r,encoding"UTF-8")#只读方式打开 contentf.read()# 提取全文,将文件内容字符串对象返回给content dccontent.split("\n")#对字符串调用分割符切割 print(dc) f.close() # 统计单词频率 ofnumcontent.count("…...
解决SpringBoot无法使用JDK8问题
解决SpringBoot无法使用JDK8问题 现状解决方案 现状 使用idea创建springboot项目无法选择java8。原因是23年11月的spring更新后就明确了不在支持java8版本的项目创建,但是目前为止很多公司开发还在用java8,导致会有问题的产生。 解决方案 使用idea创…...
论文导读 | 数据库系统中基于机器学习的基数估计方法
背景 基数估计任务是在一个查询执行之前预测其基数,基于代价的查询优化器(Cost Based Optimizer)将枚举所有可能的执行计划,并利用估计的基数选出期望执行代价最小的计划,从而完成查询优化的任务。 然而,…...
Shader->LinearGradient线性渐变着色器详解
XML文件 <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_gravity"center"android:layout_height"400dp"/>自定义View代码 c…...
Unity打包+摄像机组件
转换场景 使用程序集:using UnityEngine.SceneManagement; 切换场景相关代码:SceneManager.LoadScene(1);//括号内可放入场景名称,场景索引等 //Application.LoadLevel(""); 老版本Unity加载场景方法 打包相关 Bundle Identi…...
Git 命令代码管理详解
一、Git 初相识:版本控制的神器 在当今的软件开发领域,版本控制如同基石般重要,而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造,最初是为了更好地管理 Linux 内核源代码。随着时间的推移,Git 凭借…...
游戏引擎学习第78天
Blackboard: Position ! Collision “网格” 昨天想到的一个点,可能本来就应该想到,但有时反而不立即思考这些问题也能带来一些好处。节目是周期性的,每天不需要全程关注,通常只是在晚上思考,因此有时我们可能不能那么…...
Centos9-SSH免密登录配置-修改22端口-关闭密码登录-提高安全性
Centos9-SSH免密登录配置-修改22端口-关闭密码登录 生成秘钥对将公钥信息存进authorized_keys测试登录查询访问记录、比对指纹更换22访问端口关闭账号密码登录生成秘钥对 生成密钥对,指定 备注 和 文件目录命令执行后,默认两次回车,不设置秘钥使用密码ssh-keygen -t rsa -b …...
汇总统计数据--SQL中聚集函数的使用
目录 1、为什么需要汇总数据 2、聚集函数 (1)AVG函数 (2)COUNT函数 (3)MAX和MIN函数 (4)SUM函数 3、聚集不同值--DISTINCT 4、组合聚集函数 5、小结 博主用的是mysql8 DBMS…...
pdf提取文本,表格以及转图片:spire.pdf
文章目录 🐒个人主页:信计2102罗铠威🏅JavaEE系列专栏📖前言:🎀 1. pdfbox1.1导入pdfbox 的maven依赖1.1 提取文本1.2 提取文本表格(可自行加入逻辑处理)1.3 pdf转换成图片代码&…...
【C#学习笔记】C#中委托
概述 C#的委托是一种类型安全的函数指针,用于引用方法,委托允许方法作为参数传递,或者将方法赋值给委托变量,并通过委托调用方法。 委托类型:委托定义了方法的的签名([方法的参数类型和返回值]࿰…...
C#的Task
优先使用Task.Run,除非有定制化需求才用Task.Factory.StartNew Task.Factory.StartNew的TaskScheduler参数颠覆你的认知: var cnt 0;var cancelToken new CancellationTokenSource();await Task.Factory.StartNew(() > {cnt;Debug.WriteLine($&quo…...
企业全文搜索-搜索权限,非侵入文档同步,权限同步 ,扩展字段
简介 企业全文搜索帮助员工高效快速定位所需的信息和资源,搜索权限控制是必须的,原因有二,首先,企业文档,包括公文,流程,技术文档等,带有敏感信息,搜索返回带片段,可能带出敏感信息;其次,若没有权限,用户搜索出来的文档可能不能阅读原文,体验非常差。onesearch有…...
Linux电源管理——CPUidle Framework
目录 前言 一、CPU idle 二、cpuidle framework 相关概念 三、cpuidle core 数据结构 3.1、cpuidle_state 3.2、cpuidle_driver 3.3、cpuidle_device 3.4、cpuidle_governor 四、cpuidle driver初始化流程 4.1、cpuidle driver 初始化方式 4.2、drv->states[0]的初…...
【黑灰产】假钱包推广套路
假钱包推广产业链研究 市面上钱包的主要推广方式: 1,竞价(搜索引擎),误导客户为真正官方钱包从而完成下载使用 优点:精准,客户大 缺点:竞价户容易挂,投资大 2࿰…...
联想java开发面试题及参考答案
IP 协议是哪一层的? IP 协议(Internet Protocol)属于网络层协议。 网络层主要负责将数据从源节点传输到目标节点,它在整个网络通信体系中起到了承上启下的关键作用。在分层网络模型中,下层(如数据链路层)为网络层提供物理链路的连接和帧传输服务。数据链路层关注的是在相…...
C# 继承(接口)
接口 如果一个类派生与一个接口,它就会执行某些函数。并不是所有的面向对象语言都支持接口。 熟悉COM的开发人员应注意,尽管在概念上C#接口类似于COM接口,但他们是不筒的,底层的结构不筒。比如,C#接口并不派生于IUnko…...
FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )
以Xilinx 公司Virtex-II 系列FPGA 为例,其基本结构由下图所示。它是主要由两大部分组成:可编程输入/输出(Programmable I/Os)部分和内部可配置(Configurable Logic)部分。 可编程输入/输出(I/Os…...
妙用编辑器:把EverEdit打造成一个编程学习小环境
1 妙用编辑器:把EverEdit打造成一个编程学习小环境 1.1 应用场景 最近在学习Python语言,由于只是学习和练习,代码规模很小,不想惊动PyCharm、VSCode、WingIDE这些重型武器,只想轻快的敲些代码,记事本虽好&…...
ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用
目录 ELK工作原理展示图 一、ElasticSearch介绍(数据搜索和分析) 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…...
【学习笔记】理解深度学习和机器学习的数学基础:数值计算
深度学习作为人工智能领域的一个重要分支,其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色,它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战,以及如何应对…...
【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类
JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题?本质是什么? CPU、内存、I/O的速度是有极大差异的,为了合理利用CPU的高性能,平衡三者的速度差异,解决办法…...
VSCODE使用Echarts组件库(不是vue)
第一步打开Echarts官网 Examples - Apache ECharts 第二步随便点击一个图形点击我圈的按钮 第三步...
DNS解析域名简记
域名通常是由: 权威域名.顶级域名.根域名组成的。 从左往右,级别依次升高,这和外国人从小范围到大范围的说话习惯相关。(我们自己是更习惯先说大范围再说小范围,如XX省XX市XX区XX路) DNS解析域名时,会先查…...
选择器css
1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...
9.4 visualStudio 2022 配置 cuda 和 torch (c++)
一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客,作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为: 2.vs…...
ASP.NET Core 实现微服务 -- Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理࿱…...
2_CSS3 背景 --[CSS3 进阶之路]
CSS3 中的背景属性提供了许多强大的功能来增强网页设计,包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…...
于交错的路径间:分支结构与逻辑判断的思维协奏
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一节内容很多,文章字数达到了史无前例的一万一,我们要来学习分支与循环结构中…...
升级 CentOS 7.x 系统内核到 4.4 版本
问题描述 在 CentOS 7.x 系统中,默认内核版本是 3.10.x,这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题,导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性,建议升级到更高版本的内核,例如 …...
MySQL数据导出导入
一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...
【机器学习:八、逻辑回归】
逻辑回归(Logistic Regression) 1. 逻辑回归的引出 在现实世界中,许多问题都涉及到分类任务。例如: 判断一封邮件是否为垃圾邮件;预测某人是否会患某种疾病;确定图片中是否包含某种特定物体。 这些问题…...
uniapp使用sm4加密
安装:npm install sm-crypto --save 1、在utils下新建crypto.js文件 // sm4 加密 export function encryption(params) {const SM4 require("sm-crypto").sm4const key 0123456789abcdeffedcba9876543212; // 提供的密钥const iv fedcba9876543210012…...
【STM32-学习笔记-1-】GPIO
文章目录 GPIOⅠ、GPIO函数Ⅱ、GPIO_InitTypeDef结构体参数①、GPIO_Mode②、GPIO_Pin③、GPIO_Speed GPIO Ⅰ、GPIO函数 // 将指定的GPIO端口寄存器重置为默认值 void GPIO_DeInit(GPIO_TypeDef* GPIOx);// 将GPIO的备用功能寄存器重置为默认值 void GPIO_AFIODeInit(void);…...
C#中的运算符和类--06
目录 一.运算符 1.赋值运算符 2.算数运算符 3.关系运算符 4.逻辑运算符 5.位运算符 6.三元运算符 7.空合并运算符 8.其他运算符 二.类 1.普通类 2.静态类 3.抽象类 4.密封类 5.部分类 6.泛型类 7.嵌套类 8.记录类 9.接口 一.运算符 1.赋值运算符 定义:赋值…...
【微服务】面试 2、服务雪崩
服务雪崩概念 主要内容:在微服务项目中,微服务间存在远程调用。若某一服务(如服务 d)出现故障,调用它的服务(如服务 a)会失败。若调用方持续向故障服务发起请求,由于服务连接数有限且…...
“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目
在Qt中,如果想在一个项目中调用另一个项目,这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。 1.子模块或子目录方式: 如果另一个项目可以作为一个子模块或子目录包含在当前项目中,可以使用add_sub…...