Iptables配置心得
来源:互联网 发布:phpmyadmin for linux 编辑:程序博客网 时间:2024/06/14 15:09
原创文章,转载请注明: 转载自 镜中影的技术博客
本文链接地址: 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 DROPview:-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 -Fiptables -Xiptables -Z#PREROUTEiptables -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 ACCEPTiptables -A INPUT -j REJECT --reject-with icmp-host-prohibited #允许目的地址网段为192.168.1.0的进入FORWARD和源地址为192.168.1.0的网段进入FORWARD链#FORWARDiptables -A FORWARD -s 192.168.1.0/24 -j ACCEPTiptables -A FORWARD -d 192.168.1.0/24 -j ACCEPTiptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited#POSTROUTEiptables -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.12iptables -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手册
- Iptables配置心得
- iptables配置
- iptables配置
- IPTABLES配置
- iptables 配置
- iptables配置
- IPTABLES配置
- iptables配置
- 配置iptables
- iptables 配置
- iptables配置
- iptables配置
- 配置iptables
- iptables配置
- IPTABLES配置
- iptables配置
- iptables 配置工具比较
- IPTABLES配置方法介绍
- 【jeecg移动能力】重磅来袭,移动OA,移动报表、移动表单,无缝对接微信公众号和微信企业号
- 华为oj 矩阵乘法
- 白话windows之 会话、工作站、桌面、窗口之间的关系
- mysql 日志
- Android server机制
- Iptables配置心得
- 我是如何使用Android反编译软件的?
- 使用Entity Framework时要注意的一些性能问题
- svn mac
- POJ1088滑雪【记忆化搜索】
- JavaScript全讲-架构原则透析
- iOS之键盘处理
- 使用Jersey创建RESTful风格的WebService
- 爬虫之网页乱码解决方法(gb2312 -> utf-8)