iptables
前言:
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter
一、iptables整体图
所以,根据上图,我们能够想象出某些常用场景中,报文的流向:
到本机某进程的报文:PREROUTING –> INPUT
由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING
二、表和链
一共有4张表5张链
每个”链”中的规则都存在于哪些”表”中。
PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD 的规则可以存在于:mangle表,filter表。
OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
POSTROUTING 的规则可以存在于:mangle表,nat表。
表(功能)<–> 链(钩子):
raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT
三、常用规则
filter:常用三个链:
INPUT(policy Accept)
FORWARD(policy DROP)
OUPUT(policy Accept)
1、查看filter表所有链
1 | iptables -t filter -L -n |
-t:指定表,filter,filter表为默认表,可不写
-L:列出
-n:添加行号
2、添加规则
1 | iptables -t filter -A INPUT -j DROP -p tcp --dport 8081 |
1 2 3 | -j DROP: 将表丢弃 -- dport: 指定8081端口 - p:指定TCP 协议 |
3、删除第一条规则
1 | iptables -t filter -D INPUT 1 |
4、FORWARD
1 | iptables -t filter -I FORWARD -j ACCEPT |
5、OUTPUT
将发往192.168.0.144的TCP包全部丢弃
1 | iptables -t filter -A OUTPUT -j DROP -p tcp -d 192.168.0.144 |
开放18086端口
1 | iptables -I INPUT -p tcp --dport 18080 -j ACCEPT |
6、REJECT 拒绝
例:拒绝来自85主机的tcp类型的请求
1 | iptables -t filter -I INPUT -s 192.168.2.85 -d 192.168.2.93 -p tcp -j REJECT |
7、ACCEPT 允许
-s: 匹配源地址 # 源 IP,可以有多个,使用逗号隔开,有多少个地址就有多少条规则
-d:匹配目的地址 目的 IP,可以有多个,使用逗号隔开,有多少个地址就有多少条规则
-i:匹配入站网卡地址
#以下两行允许某些调用 localhost 的应用访问
1 2 | iptables -A INPUT -i lo -j ACCEPT #规则1 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #规则2 |
#以下两行分别允许所有来源访问 TCP 80,443 端口
1 2 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT #规则5 iptables -A INPUT -p tcp --dport 443 -j ACCEPT #规则6 |
四、增删改查
查找:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
1 | iptables -t nat -nvL OUTPUT // 查找nat表中的出去的规则<br><br>iptables -A INPUT -i lo -j ACCEPT 允许来自于lo接口的数据包<br><br>iptables -A OUTPUT -o lo -j ACCEPT 允许向lo接口发送数据包 |
2、增加 append
1 2 | 命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作 示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP |
3、删除
1、 具体匹配规则删除
1 2 | 命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作 示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP |
2、 按--line按删除规则,-D表示删除对应链中的规则
1 2 | 命令语法:iptables -t 表名 -D 链名 规则序号 示例:iptables -t filter -D INPUT 3 |
五、NAT常用规则
NAT表三个链:PREROUTING,POSTROUTING,OUTPUT
1、利用iptables将目的地址为192.168.1.189的80端口的数据包更改目的地址为内网机器的IP1.1.1.2,目的端口为80.
1 2 3 | iptables -t nat -A PREROUTING -d 192.168.1.189 -p tcp --dport 80 -j DNAT --to-destination 1.1.1.2:80 iptables -t nat -A PREROUTING -d 192.168.1.189 -j DNAT --to-destination 1.1.1.2 将所有流量转发到内网主机 |
2、# 配置源地址转换 SNAT
1 2 | #将 192.168.2.0/24 转换成 192.168.1.63 iptables -t nat -A POSTROUTING -s 192.168.2.0 /24 -j SNAT --to 192.168.1.63 #规则11 |
3、# 配置目的地址转换 DNAT
1 2 | #将 192.168.1.63 的 80 端口请求转发到 192.168.2.2 的 80 端口 iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80 #规则12 |
4、列出所有规则
1 | iptables -t nat -L |
5、目的地址转换
例子:访问本机的数据包,如果目的端口是7788,则转到192.168.0.11的7799端口
1 | iptables -t nat -A PREROUTING -P tcp --dport 7788 -j DNAT --to 192.168.0.11:7799 |
6、源地址转换
例子:发往192.168.0.11的7799端口的数据包SNAT到本机
1 | iptables -t nat -A Postrouting -p tcp -d 192.168.0.11 --dport 7799 -j SNAT --to 192.168.0.12 |
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?