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


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接
posted @   南昌拌粉的成长  阅读(130)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示