13
2019
03
20:55:54

Linux iptables用法与NAT


1.相关概念

2.iptables相关用法

3.NAT(DNAT与SNAT)

相关概念

防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP Filter)。

代理服务是一种网络服务,通常就架设在路由上面,可完整的掌控局域网的对外连接。

IP Filter这种方式可以直接分析最底层的封包表头数据来进行过滤,所以包括 MAC地址, IP, TCP, UDP, ICMP 等封包的信息都可以进行过滤分析的功能,用途非常广泛。

其实Iptables服务不是真正的防火墙,只是用来定义防火墙规则功能的"防火墙管理工具",将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能。

 

iptables抵挡封包的方式:

拒绝让 Internet 的封包进入 Linux 主机的某些 port

拒绝让某些来源 IP 的封包进入

拒绝让带有某些特殊标志( flag )的封包进入

分析硬件地址(MAC)来提供服务

 

iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链
规则链
则依据处理数据包的位置不同分类:

PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING:
 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

 

 

iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记(较少使用)

nat表:修改数据包中的源、目标IP地址或端口

filter表:确定是否放行该数据包(过滤)

Linux iptables用法与NAT

规则表的先后顺序:raw→mangle→nat→filter

 

规则链的先后顺序:

入站顺序:PREROUTING→INPUT

出站顺序:OUTPUT→POSTROUTING

转发顺序:PREROUTING→FORWARD→POSTROUTING

 

内建表与链的关系流程图(去掉了mangle表):

    Linux iptables用法与NAT

另外注意:

1.没有指定规则表则默认指filter表。

2.不指定规则链则指表内所有的规则链。

3.在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。

 

 

 

iptables命令中则常见的控制类型有:

ACCEPT:允许通过.
LOG:记录日志信息,然后传给下一条规则继续匹配.
REJECT:拒绝通过,必要时会给出提示.
DROP:直接丢弃,不给出任何回应.

 

iptables命令基本参数和用法

    格式为:"iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]"。

以下格式的写法或许更为清楚明白:
"iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]"

下表格为几乎所有常用的iptables参数,

参数

作用

-P

设置默认策略:iptables -P INPUT (DROP|ACCEPT)

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I num

在规则链的头部加入新规则

-D num

删除某一条规则

-s

匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。

-d

匹配目标地址

-i 网卡名称

匹配从这块网卡流入的数据

-o 网卡名称

匹配从这块网卡流出的数据

-p

匹配协议,如tcp,udp,icmp

--dport num

匹配目标端口号

--sport num

匹配来源端口号

 

Iptables规则查看与清除

 

查看:

Linux iptables用法与NAT

Linux iptables用法与NAT

 

清除:

    规则的清除

Linux iptables用法与NAT

 

策略(Policy)的清除

Linux iptables用法与NAT

Iptables 开放网口与ip来源

例:所有的来自 lo 这个网口的封包,都予以接受

iptables –A INPUT –i lo –j ACCEPT

例:目标来自 192.168.1.200 这个 IP 的封包都予以接受

iptables –A INPUT –i eth0 –s 192.168.1.200 –j ACCEPT

例:192.168.1.0/24 可接受,但 192.168.1.10 丢弃

iptalbes –A INPUT –i eth0 –s 192.168.1.0/24 –j ACCEPT

iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP

 

Iptables 规则记录

例:# iptables -A INPUT -s 192.168.1.200 -j LOG

Linux iptables用法与NAT

相关信息就会被写入到/var/log/messages当中,然后该封包会继续进行

后续的规则比对。LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其它规则比对的。

 

Iptables 开放tcp、udp端口

例:开放samba端口(udp137,138;tcp139,445)

iptables –A INPUT –i eth0 –p udp –doprt 137:138 –j ACCEPT

iptables –A INPUT –i eth0 –p tcp –doprt 139–j ACCEPT

iptables –A INPUT –i eth0 –p tcp –doprt 445–j ACCEPT

Linux iptables用法与NAT

 

iptables匹配ICMP端口和ICMP类型

iptables –A INPUT –p icmp –icmp-type 类型 –j ACCEPT

参数:--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,

例如 8 代表 echo request 的意思。(可自查询ICMP-type对应表)

 

Iptables –syn的处理方式

指定TCP匹配扩展

使用 –tcp-flags 选项可以根据tcp包的标志位进行过滤。

#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN

#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK

上实例中第一个表示SYN、ACK、FIN的标志都检查,但是只有SYN匹配。第二个表示ALL(SYN,ACK,FIN,RST,URG,PSH)的标志都检查,但是只有设置了SYN和ACK的匹配。

#iptables -A FORWARD -p tcp --syn

选项—syn相当于"--tcp-flags SYN,RST,ACK SYN"的简写。

 

Iptables 状态模块

Linux iptables用法与NAT

例:只要已建立或相关封包就予以通过,只要是不合法封包就丢弃

iptables –A INPUT –m state –state RELATED ESTABLISHED –j ACCEPT

iptables –A INPUT –m state –state INVALID –j DORP

例:对局域网内mac地址为00:0C:29:56:A6:A2主机开放其联机

[root@linux ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:56:A6:A2 -j ACCEPT

Linux iptables用法与NAT

 

Iptables保存于恢复

iptables-save > /etc/sysconfig/iptables.20180606

iptables-restore < /etc/sysconfig/iptables.20180606

Linux iptables用法与NAT

 

Linux iptables用法与NAT

 

 

NAT(Network AddressTranslation网络地址转换)

首先说说局域网内封包的传送,

1. 先经过 NAT table 的 PREROUTING 链;

2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;

3. 再经过 Filter table 的 FORWARD 链;

4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。

NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与POSTROUTING。 那这两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。

 

SNAT即源地址转换,能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题。一个无线路由器也就使用此技术。

Linux iptables用法与NAT

SNAT封包传送示意图

由上图可知,需要将192.168.10.10转换为111.196.211.212,iptables命令如下:

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212

外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

 

DNAT即目地地址转换,则能够让外网用户访问局域网内不同的服务器。(相当于SNAT的反向代理)

Linux iptables用法与NAT

DNAT封包传送示意图

 

由上图可知,目标地址192.168.10.6在路由前就转换成61.240.149.149,需在网关上运行iptables命令如下:

iptables –t nat –A PREROUTING –i eth1 –d 61.240.149.149 –p tcp –dport 80 –j DNAT --to-destination 192.168.10.6:80

eth1网口传入,且想要使用 port 80 的服务时,将该封包重新传导到 192.168.1.210:80 的 IP 及 port 上面,可以同时修改 IP 与 port。此为地址映射与端口转换。

 

还可以使用REDIRECT单独进行端口转换

例:将 80 端口的封包转递到 8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

# 使用 8080 这个 port 来启动 WWW ,但是别人都以80来联机




推荐本站淘宝优惠价购买喜欢的宝贝:

Linux iptables用法与NAT

本文链接:https://hqyman.cn/post/328.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: