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表所有链

iptables -t filter -L -n

-t:指定表,filter,filter表为默认表,可不写

-L:列出

-n:添加行号

2、添加规则

iptables -t filter -A INPUT -j DROP -p tcp --dport 8081 
-j DROP: 将表丢弃
-- dport: 指定8081端口
- p:指定TCP 协议

3、删除第一条规则

iptables -t filter -D INPUT 1

4、FORWARD

iptables -t filter -I FORWARD -j ACCEPT

5、OUTPUT

将发往192.168.0.144的TCP包全部丢弃

iptables -t filter -A OUTPUT -j DROP -p tcp -d 192.168.0.144

开放18086端口

iptables -I INPUT -p tcp --dport 18080 -j ACCEPT

6、REJECT  拒绝

例:拒绝来自85主机的tcp类型的请求

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 的应用访问

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 端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT #规则5
iptables -A INPUT -p tcp --dport 443 -j ACCEPT #规则6

四、增删改查

查找:

1.INPUT——进来的数据包应用此规则链中的策略

2.OUTPUT——外出的数据包应用此规则链中的策略  

iptables -t nat -nvL OUTPUT  //查找nat表中的出去的规则

iptables -A INPUT -i lo -j ACCEPT 允许来自于lo接口的数据包

iptables -A OUTPUT -o lo -j ACCEPT 允许向lo接口发送数据包

2、增加 append

命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

3、删除

1、 具体匹配规则删除

命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作
示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP

2、 按--line按删除规则,-D表示删除对应链中的规则

命令语法: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.

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

#将 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

#将 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、列出所有规则

iptables -t nat -L

5、目的地址转换

例子:访问本机的数据包,如果目的端口是7788,则转到192.168.0.11的7799端口

iptables -t nat -A PREROUTING -P tcp --dport 7788 -j DNAT --to 192.168.0.11:7799

6、源地址转换

例子:发往192.168.0.11的7799端口的数据包SNAT到本机

iptables -t nat -A Postrouting -p tcp -d 192.168.0.11 --dport 7799 -j SNAT --to 192.168.0.12
原文地址:https://www.cnblogs.com/wuchangblog/p/15784362.html