Iptables配置心得
2016-03-03 18:51
477 查看
原创文章,转载请注明: 转载自 镜中影的技术博客
本文链接地址: Iptables配置心得
URL:http://blog.csdn.net/linkpark1904/article/details/50790404
如上图所示,数据包从网卡1进入linux主机后,首先进入内核维护的网络内存空间中,内核接手数据包后,会进行一系列流水线处理。在解封IP头部后,先检测数据包的目的IP,然后查询路由表,如果该IP指向自己,解封TCP头部,得到相应的端口号,将该报文发送给对应的应用程序。若数据包的目的IP不是自己,则在路由表中查看下一跳的地址,将改报文转发到相应的网卡。
Iptables分为两部分,一部分位于内核中,用来存放规则,称为NetFilter。还有一段在用户空间中,用来定义规则,并将规则传递到内核中,这段在用户空间中的程序就叫做iptables。
其中存放规则的地方有五处,如上图所示的prerouting、input、output、forward、postrouting:
prerouting:数据进来还未查询路由表之前的规则。
input:由外部发往用户空间内部的规则。
output:由用户空间内部发往外部的规则。
forward:不进入用户空间,进行路由转发的规则。
postrouting:查询完路由表后,将要转发的规则。
这五个点也叫做hook function(钩子函数),具体的数据流向如下图所示:
在prerouting规则中会拦截在查询路由表之前的ip报文,可以对ip报文进行修改、丢弃等操作,查询路由表后,数据包有可能走两条路径,一条直接进入用户空间,一条不经过用户空间,直接经由内核的forward规则进行转发,在转发出去的时候,也可以经由postrouting规则对ip报文进行相应的修改。
Iptables可以定义四类规则:
filter:防火墙核心所在
nat:网络地址转换
mangle:实现数据包修改
raw:连接跟踪表(不常用)
这四类规则,对应四张表,每一张表中拥有prerouting、input、output、forward、posting这五条链。
Iptables定义规则的一般机制如下所示 :
只要是目的端口为8080的ip报文,则将其目的ip和端口改为相应的ip。改完之后,报文会走forward链,此时,forward链只需要允许目的ip网段为192.168.1.0的报文通过即可
外部数据要进入内网ip,经过forward链后,要将源ip改为相应的网关ip所以有如下:
Iptables运行的脚本文件如下:
http://lustlost.blog.51cto.com/2600869/937471
http://lustlost.blog.51cto.com/2600869/939989
http://lustlost.blog.51cto.com/2600869/940735
http://lustlost.blog.51cto.com/2600869/943110
linux man手册
本文链接地址: Iptables配置心得
URL:http://blog.csdn.net/linkpark1904/article/details/50790404
一、 iptables原理概述
在linux内核中,iptables是一款自带的防火墙软件,基于内核实现网络流量的过滤,针对数据包的IP地址,端口号,标志位,连接状态定义相应的防火墙规则,匹配规则后用指定的处理机制进行处理,可以是允许,可以是丢弃。如上图所示,数据包从网卡1进入linux主机后,首先进入内核维护的网络内存空间中,内核接手数据包后,会进行一系列流水线处理。在解封IP头部后,先检测数据包的目的IP,然后查询路由表,如果该IP指向自己,解封TCP头部,得到相应的端口号,将该报文发送给对应的应用程序。若数据包的目的IP不是自己,则在路由表中查看下一跳的地址,将改报文转发到相应的网卡。
Iptables分为两部分,一部分位于内核中,用来存放规则,称为NetFilter。还有一段在用户空间中,用来定义规则,并将规则传递到内核中,这段在用户空间中的程序就叫做iptables。
其中存放规则的地方有五处,如上图所示的prerouting、input、output、forward、postrouting:
prerouting:数据进来还未查询路由表之前的规则。
input:由外部发往用户空间内部的规则。
output:由用户空间内部发往外部的规则。
forward:不进入用户空间,进行路由转发的规则。
postrouting:查询完路由表后,将要转发的规则。
这五个点也叫做hook function(钩子函数),具体的数据流向如下图所示:
在prerouting规则中会拦截在查询路由表之前的ip报文,可以对ip报文进行修改、丢弃等操作,查询路由表后,数据包有可能走两条路径,一条直接进入用户空间,一条不经过用户空间,直接经由内核的forward规则进行转发,在转发出去的时候,也可以经由postrouting规则对ip报文进行相应的修改。
Iptables可以定义四类规则:
filter:防火墙核心所在
nat:网络地址转换
mangle:实现数据包修改
raw:连接跟踪表(不常用)
这四类规则,对应四张表,每一张表中拥有prerouting、input、output、forward、posting这五条链。
二、 iptables基础规则编写
定义防火墙规则一般有2种模式。一种是比较严格的,只放行允许通过的数据包,其余数据包全部阻止。还有一种比较宽松的,只阻止不允许通过的数据包。在企业应用中,一般使用第一种,根据业务需要放行对应的数据包。Iptables定义规则的一般机制如下所示 :
-t,--table 用来指定该条规则记录在哪张表内,可选的表有四个:filter,nat,mangle,raw,默认表为filter。 Sub command: Rule: -A(append):追加 -I(insert):插入 -D(delete):删除,指定标准或者num -R(replace):替换 Chain: -F(flush):清空链 -N(new):新增一条链 -X:删除用户自定义的空链 -Z:清空计数器 关于计数器:每条规则都有2条计数器 1、 记录被本条规则匹配到的包个数 2、 记录匹配到本条规则到的包的体积之和 -E:重命名链 Policy: -P chain{ACCEPT|DROP} 将INPUT链的默认策略修改为 DROP iptables –t filter –P INPUT DROP view: -L:显示定义的规则 -n:使用这个选项,就不会去反向解析IP地址的主机名,加快察看速度 -v:详细信息,可以多加几个v,越多越详细 -x:精确显示数据包体积 --line-numbers 匹配条件: 通用匹配: -s IP/NETWORK:源地址 -d IP/NETWORK:目标地址 -p {tcp|udp|icmp}:指定协议 -i input interface:指定数据包进入的接口 -o output interface:指定数据包出去的接口 example: 禁止192.168.1.0/24网段ping192.168.2.1主机 iptables -t fliter -A INTUP -s 192.168.1.0/24 -d 192.168.2.1 -p icmp -j DROP 扩展匹配 隐式扩展:指对-p选项中指定的协议进行的扩展 -p {tcp|udp|icmp} --sport portnum 源端口 --dport portnum 目标端口 --tcpflags 针对tcp的标志位 --icmp-type icmp的包类型。 扩展上面的exapmle iptables -t fliter -A INTUP -s 192.168.1.0/24 -d 192.168.2.1 -p icmp –icmp-type 8 -j DROP 这里明确拒绝了192.168.1.0/24网段的icmp-request包,8是icmp-request包,0是icmp-echo包
三、 NAT原理
前面讲述了iptables的原理,原理图如图1所示,NAT地址转换即是在prerouting,forward和postrouting这三条链上进行相应的操作。3.1DNAT目的地址转换
假设从外部网络发来的ip数据包,要像进入内部网络,那么,在prerouting链上,将满足要求的报文的目的ip改为相应的内网网络ip和端口号,例如,外部网络要访问内网某台机器的 8080端口,那么有如下映射:iptables -A PREROUTING -t nat -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.51:8080
只要是目的端口为8080的ip报文,则将其目的ip和端口改为相应的ip。改完之后,报文会走forward链,此时,forward链只需要允许目的ip网段为192.168.1.0的报文通过即可
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
3.2SNAT源地址转换
假设内网的某台机器想要访问外部网络,那么,其源ip肯定不能为内网ip,所以,在postrouting链上,对源ip为192.168.1.0网段内的ip数据包进行源地址改变iptables -A POSTROUTING -t nat -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j SNAT --to-source 222.197.181.4
外部数据要进入内网ip,经过forward链后,要将源ip改为相应的网关ip所以有如下:
iptables -A POSTROUTING -t nat -d 192.168.1.0/24 -j SNAT --to-source 192.168.1.1
四、 iptables配置实例
场景:一台网关服务器,内网有n台虚拟机,需要做端口映射,保证外面访问网关8080端口的直接映射到内网ip为192.168.1.51的机器的8080端口上,并且,内网机器能顺利访问外网,外部网络可以访问网关的22端口和8080端口,但不能访问其他任何端口,具体网络拓扑图如下图所示:Iptables运行的脚本文件如下:
#!/bin/bash #name myiptables.sh #清空既有的iptables规则 iptables -F iptables -X iptables -Z #PREROUTE iptables -A PREROUTING -t nat -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.51:8080 #INPUT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许icmp协议进入(ping) iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -i lo -j ACCEPT #允许ssh远程连接到本网关 iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited #允许目的地址网段为192.168.1.0的进入FORWARD和源地址为192.168.1.0的网段进入FORWARD链 #FORWARD iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited #POSTROUTE iptables -A POSTROUTING -t nat -d 192.168.1.0/24 -j SNAT --to-source 192.168.1.1 #内网中的机器源ip为192.168.1.0,并且目的地址不为192.168.1.0/24网段的ip将其源ip改为222.111.11.12 iptables -A POSTROUTING -t nat -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j SNAT --to-source 222.111.11.12
参考文献
iPtables博客:http://lustlost.blog.51cto.com/2600869/937471
http://lustlost.blog.51cto.com/2600869/939989
http://lustlost.blog.51cto.com/2600869/940735
http://lustlost.blog.51cto.com/2600869/943110
linux man手册
相关文章推荐
- Linux Kernel 4.0 RC5 发布!
- Linux 自检和 SystemTap
- Linux下主机充当防火墙的巧妙应用之iptables
- 一张图看尽 Linux 内核运行原理
- 系统管理员需知的 16 个 iptables 使用技巧
- Vista 防火墙 Vista Firewall Control v1.0.11 下载
- 收集的ROS防火墙脚本
- AutoRun病毒专杀防火墙 V4.39 绿色版
- Linux内核链表实现过程
- 安装防火墙的12个注意事项
- win2008内置防火墙配置方法说明
- FTP服务器的防火墙通用设置规则介绍
- Windows批量添加防火墙例外端口的批处理代码
- Win2003 系统服务器防火墙
- 启用windows默认的防火墙需要注意的地方
- iptables做策略屏蔽QQ与MSN
- windows防火墙支持FTP服务的设置方法
- Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)
- Shell脚本实现监控iptables规则是否被修改