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表:确定是否放行该数据包(过滤)

规则表的先后顺序:raw→mangle→nat→filter
规则链的先后顺序:
入站顺序:PREROUTING→INPUT
出站顺序:OUTPUT→POSTROUTING
转发顺序:PREROUTING→FORWARD→POSTROUTING
内建表与链的关系流程图(去掉了mangle表):

另外注意:
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规则查看与清除
查看:


清除:
规则的清除

策略(Policy)的清除

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

相关信息就会被写入到/var/log/messages当中,然后该封包会继续进行
后续的规则比对。LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其它规则比对的。
Iptables 开放tcp、udp端口
例:开放samba端口(udp137,138;tcp139,445)
iptables –A INPUT –i eth0 –p udp –dport 137:138 –j ACCEPT
iptables –A INPUT –i eth0 –p tcp –dport 139–j ACCEPT
iptables –A INPUT –i eth0 –p tcp –dport 445–j ACCEPT

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 状态模块

例:只要已建立或相关封包就予以通过,只要是不合法封包就丢弃
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

Iptables保存于恢复
iptables-save > /etc/sysconfig/iptables.20180606
iptables-restore < /etc/sysconfig/iptables.20180606


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资源匮乏的问题。一个无线路由器也就使用此技术。

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的反向代理)

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的更多相关文章
- [转] Linux下防火墙iptables用法规则详及其防火墙配置
from: http://www.cnblogs.com/yi-meng/p/3213925.html 备注: 排版还不错,建议看以上的链接. iptables规则 规则--顾名思义就是规矩和原则,和 ...
- Linux下防火墙iptables用法规则详及其防火墙配置
转:http://www.linuxidc.com/Linux/2012-08/67952.htm iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国法,家有家规 ...
- LInux iptables学习
作者原文 : http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多 ...
- linux iptables常用命令之配置生产环境iptables及优化
在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...
- Linux iptables原理--数据包流向
Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...
- Linux iptables
一.简介 http://liaoph.com/iptables/ 二.操作 1)查看规则 iptables -t filter -L -n iptables -t nat -L -n iptables ...
- linux iptables规则介绍
今天又学习了一下iptables,做一点总结来方便以后查阅. Netfilter(网络过滤器)是Linux操作系统核心层内部的一个数据包处理模块,主要负责数据包的拦截和转发,而iptables是Net ...
- Linux iptables 配置规则
Linux iptables 防火墙配置规则 前言:把网上我感觉不错iptables的访问规则都统一在这里,以后做参考. modprobe ipt_MASQUERADE modprobe ip_con ...
- linux iptables详解(转)
概述 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成 ...
随机推荐
- Linux kernel的中断子系统之(三):IRQ number和中断描述符
返回目录:<ARM-Linux中断系统>. 总结: 二描述了中断处理示意图,以及关中断.开中断,和IRQ number重要概念. 三介绍了三个重要的结构体,irq_desc.irq_dat ...
- JVM堆内存监测的一种方式,性能调优依旧任重道远
上月,由极客邦.InfoQ和听云联合主办2016 APMCon中国应用性能管理大会圆满落下帷幕.会上,Java冠军Martijn Verburg进行了一场Java and the Machine的分享 ...
- OAthe2 Login use OkHttpClient and OAuth2RestTemplate
http://samchu.logdown.com/posts/1437422-oathe2-login-use-okhttpclient-and-oauth2resttemplate?utm_sou ...
- mac里用PyCharm中引用MySqlDB始末
本来想用java来连数据库,然后调用python的,后来想了想,反正是个实验性质的小工程何必搞的这么复杂.直接全部python就好了,于是就为这个想法填了一晚上的坑. 装好了PyCharm的CE版,然 ...
- 笔记一下NODEJS建站
1:npm的使用 -g的包安装用于命令行 --save用于建立依赖 建立依赖后的包只要使用npm install就可以直接全部安装 2:EJS和JADE模板 3:使用Mongoose对Mongodb进 ...
- ajax异步调用遇到的问题
今天在使用ajax的时候遇到一个问题,也加深了我对ajax的理解,到segmentfault上提问了,现把讨论过程呈现,也可访问链接http://segmentfault.com/q/10100000 ...
- selenium相关技术研究(从1.0-3.0)
注: 以下内容引自http://www.cnblogs.com/hhudaqiang/p/6550135.html Selenium相关技术研究(从1.0-3.0) 好吧,最近看wxpython有点多 ...
- 电脑不识别U盘
最近遇到这样一个问题,现把具体问题和解决方案给大家分享一下: 系统:win10 症状:插入U盘,系统提示插入U盘的声音提示,磁盘不显示,360 无图标 原因:USB驱动出现问题 对症下药: 插入U盘右 ...
- vector作为函数返回值
在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据.但是当数据量很大的时候使用vector效率就比 ...
- BZOJ_2724_[Violet 6]蒲公英_分块
BZOJ_2724_[Violet 6]蒲公英_分块 Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod ...