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

在这里插入图片描述


目录
相关文章
|
8月前
|
安全 Linux 网络安全
百度搜索:蓝易云【linux iptables安全技术与防火墙】
请注意,iptables的具体使用方法和配置选项可能会有所不同,取决于Linux发行版和版本。管理员应该参考相关文档和资源,以了解适用于其特定环境的最佳实践和配置方法。
471 0
百度搜索:蓝易云【linux iptables安全技术与防火墙】
|
8月前
|
存储 Linux 网络安全
如何使用iptables在Linux中进行流量转发?
如何使用iptables在Linux中进行流量转发?
830 0
如何使用iptables在Linux中进行流量转发?
|
10月前
|
SQL 网络协议 Oracle
Linux iptables 防火墙软件命令详解
Linux iptables 防火墙软件命令详解
272 0
|
9月前
|
安全 Linux 网络安全
在Linux中,如何列出和删除 Iptables 防火墙规则?
在Linux中,如何列出和删除 Iptables 防火墙规则?
573 0
|
10月前
|
网络协议 Linux 网络安全
Linux系列——关于防火墙iptables的常用命令
Linux系列——关于防火墙iptables的常用命令
|
1天前
|
Linux 网络安全
NAT 技术与 Linux iptables
NAT 技术与 Linux iptables
7 0
|
1天前
|
网络协议 Linux 网络安全
Linux中的iptables
Linux中的iptables
4 0
|
1月前
|
网络协议 Linux 数据安全/隐私保护
Linux Iptables 的基本原理
【2月更文挑战第29天】iptables有5种链(PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTE),对应不同数据包处理阶段。
|
9月前
|
Linux 网络安全
在 Alibaba Cloud Linux 上编辑 iptables
本场景是在Alibaba Cloud Linux上编辑 iptables防火墙
151 0
|
1月前
|
存储 网络协议 Linux
Linux加强篇008-使用Iptables与Firewalld防火墙
山重水复疑无路,柳暗花明又一村
427 0
Linux加强篇008-使用Iptables与Firewalld防火墙