Linux iptables都可以做什么?

简介: Linux iptables都可以做什么?

iptables实战


DNAT场景


有两台主机:

hostA: 10.50.10.25
hostB: 10.50.10.26

在主机A上有一个nginx服务. 使用iptables如何实现访问 10.50.10.26 8099 请求打到hostA上的nginx服务.


hostA 的nginx服务

# 主机A上查看nginx服务
~]#telnet 10.50.10.25 80
Trying 10.50.10.25...
Connected to 10.50.10.25.
Escape character is '^]'.

在主机B上添加iptables规则,nat表的OUT钩子(链)中增加DNAT规则。将目的地之转换为10.50.10.25。并将请求达到nginx服务上。

HostB 开启转发


HostB 确保开启路由转发. net.ipv4.ip_forward = 1此时内核才会将流量转发。此时该主机充当路由器的功能.

[root@node-1 ~]#sysctl -a | grep ipv4.ip_forward
net.ipv4.ip_forward = 1

在HostB 上添加iptables


iptables -t nat -A OUTPUT -p tcp --dport 8099 -d 10.50.10.26 -j DNAT --to 10.50.10.25:80
# iptables 解释
首相要搞清楚我们是在DNAT,也就是修改目的地址。是在nat表的OUT钩子(链)append 中新增
-A 代表append
OUTPUT 从本机发送出去的包
对发送出去的包的限制: 
-p 协议
-d 目的地址
--dport 目的端口
-j 后面跟要做的转换是DNAT还是SNAT 
--to 转到哪里?
注意-d 后可以跟cidr地址。例如10.50.10.0/24

查看iptables规则


[root@node-1 ~]#iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 68 packets, 4267 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain INPUT (policy ACCEPT 68 packets, 4267 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 96 packets, 5808 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            10.50.10.26          tcp dpt:8099 to:10.50.10.25:80
Chain POSTROUTING (policy ACCEPT 96 packets, 5808 bytes)
 pkts bytes target     prot opt in     out     source               destination
[root@node-1 ~]#

在Host b上telnet 10.50.10.26 8099


 ~]#telnet 10.50.10.26 8099
Trying 10.50.10.26...
Connected to 10.50.10.26.
Escape character is '^]'.

查看iptables OUTPUT链上的流量变化


[root@node-1 ~]#iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 163 packets, 10535 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain INPUT (policy ACCEPT 163 packets, 10535 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 228 packets, 13760 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    60 DNAT       tcp  --  *      *       0.0.0.0/0            10.50.10.26          tcp dpt:8099 to:10.50.10.25:80
Chain POSTROUTING (policy ACCEPT 229 packets, 13820 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT的上较telnet 10.50.10.26 8099 多了一个包,证明iptables 对这个包进行了转发

删除iptables


iptables -t nat -D OUTPUT 1

阻止发送特定ip的流量


如果你不希望访问特定站点(一般是恶意站点) ,可以自主阻止发送流量到该IP,例如你认为114是一个钓鱼网站,在本地禁止所有流量发送到114

终端1 ping 114.114.114.114


可以看到执行iptables之后ping数据包再也发不过去啦

43991ec824454f0d81de9271855757b4.png

终端2 设定iptables


iptables -t filter -A OUTPUT -d 10.50.10.25 -j DROP

删除iptables


OUTPUT和PREROUTING的区别


需求是这样的

主机A 10.50.10.25 上部署着nginx 80服务


主机B 10.50.10.26 通过8099 端口代理这个服务 (注意主机B 本身无法访问这个服务)


主机C 10.56.14.** 需要访问10.50.10.26:8099


解决

1、在主机C中网络中想通过8099 访问,添加如下规则


主机B上添加如下两条规则

iptables -t nat -A PREROUTING -p tcp --dport 8099 -j DNAT --to 10.50.10.25:80
iptables -t nat -A POSTROUTING -p tcp -d 10.50.10.25 --dport 80 -j SNAT --to 10.50.10.26

2、如果主机B 想直接访问8099 该怎么办?


主机B增加一条本地转发规则,即不通过路由器的转发规则。

iptables -t nat -A OUTPUT -p tcp -d 10.50.10.26 --dport 8099 -j DNAT --to 10.50.10.25:80

疑问

在最初没搞清楚OUTPUT 链和PREROUTING 链的区别。 OUTPUT也是可以用于DNAT 本地的流量的

规则链名包括(也被称为五个钩子函数(hook functions)):
INPUT链 :处理输入数据包。
OUTPUT链 :处理输出数据包。
FORWARD链 :处理转发数据包。
PREROUTING链 :用于目标地址转换(DNAT)。
POSTOUTING链 :用于源地址转换(SNAT)。

扩展

  • 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
  • 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
  • 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

在这里插入图片描述


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
安全 Linux 网络安全
百度搜索:蓝易云【linux iptables安全技术与防火墙】
请注意,iptables的具体使用方法和配置选项可能会有所不同,取决于Linux发行版和版本。管理员应该参考相关文档和资源,以了解适用于其特定环境的最佳实践和配置方法。
488 0
百度搜索:蓝易云【linux iptables安全技术与防火墙】
|
存储 Linux 网络安全
如何使用iptables在Linux中进行流量转发?
如何使用iptables在Linux中进行流量转发?
1292 0
如何使用iptables在Linux中进行流量转发?
|
2月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
212 73
|
26天前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
33 1
|
3月前
|
域名解析 网络协议 Linux
在Linux中,iptables有哪相关的命令?
在Linux中,iptables有哪相关的命令?
|
4月前
|
负载均衡 网络协议 Linux
|
3月前
|
Linux 网络安全
在Linux中,iptables和firewalld两种防火墙如何使用?
在Linux中,iptables和firewalld两种防火墙如何使用?
|
3月前
|
网络协议 Linux 应用服务中间件
如何使用Iptables在Linux网关上转发端口
如何使用Iptables在Linux网关上转发端口
97 5
|
3月前
|
网络协议 Linux
在Linux中,如何使用iptables 写⼀条规则?把来源IP为192.168.1.101访问本机80端口的包直接拒绝.
在Linux中,如何使用iptables 写⼀条规则?把来源IP为192.168.1.101访问本机80端口的包直接拒绝.
|
5月前
|
Linux 网络安全
NAT 技术与 Linux iptables
NAT 技术与 Linux iptables