码迷,mamicode.com
首页 > 其他好文 > 详细

防火墙原理和iptables

时间:2015-06-25 01:31:59      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:防火墙   iptables   安全管理   

本文主要介绍linux上的防火墙工具iptables,顺便介绍硬件防火墙

什么是防火墙

  • 用来保护内部网络不受外部网络恶意攻击和入侵的网络安全技术,通常是内部网络和外部网络的边界,根据定义的规则,对管理的网络内的数据包进行分析和过滤,限制访问

分为硬件防火墙和软件防火墙

  • 硬件防火墙是由厂商设计好的主机设备

  • 软件防火墙就是用来保护系统网络的一套工具软件,如linux下的iptables和TCP Wrappers

硬件防火墙


具体功能

  • 安全隔离,访问控制,VPN,内容过滤,病毒防护

三种类型

  • 包过滤防火墙(路由)

  • 应用代理:代理服务

  • 状态检测:基于状态化检测

五种模式

  • 透明模式(交换模式)

  • 旁听模式

  • 路由模式

  • 多模式:多实例防火墙,主要用于IDC数据中心

  • failover:状态化切换,备份

区域部署

  • 双区域

  • 三区域:inside、outside、DMZ

软件防火墙


iptables:是netfilter提供的一种网络资源访问控制的机制,一种编写防火墙的工具,在内核版本centos 2.4之后才出现的,以前类似的机制叫ipchains

netfilter:数据包过滤机制

  • 是工作在内核 Tcp/ip 棧上的一个 包过滤机制:所谓的包过滤,就是将数据包头部数据提取出来进行分析

netfilter框架中定义了默认的五条内置的链(chain)和多张表(table)

  • 五条内置链作为数据包过滤的点

     PREROUTING

     INPUT

     FORWARD

     OUTPUT

     POSTROUTING

  • 常用的表

     filter:过滤(INPUT、FORWARD、OUTPUT)

     nat:用于nat地址转换(PREROUTING、POSTROUTING、OUTPUT)

     mangle:修改报文元数据(可以作用在所有链上),修改TTL或做防火墙标记都是利用mangle做的

     

访问和转发图解

技术分享



数据包过滤规则

  • 根据预先定义的规则,按顺序从第一条到最后一条进行匹配

  • 若数据包数据与规则匹配,则执行动作,不匹配则进行下一条规则对比

  • 若都不匹配则使用默认的策(policy)动作

iptables的语法和使用


iptables可以基于 端口、ip、协议、接口、mac模块、状态、时间、包速率等做匹配和过滤,还能实现nat功能(水好深)


查看

  • iptables [-L 列出table规则,默认filter] [-t 指定table] [-n 不进行ip和hostname反查速度快] [-v 列出更详细信息]

  • iptables-save 列出完整的规则(我们写入的命令会列出)

技术分享

删除

  • iptables [-t table] [-F 清除所有规则] [-X 清除自定义的table] [-Z 将所有的chain的流量统计和计数都归0]

定义默认策略(policy)

  • iptables [-t table] -P [chain] [策略 ACCEPT DROP REJECT LOG]

技术分享

保存

  • /etc/init.d/iptables save 保存

添加规则

  • iptables [-t table] [-A 在当前后面添加] [-I 在最前面添加规则] [-p 协议TCP/UDP] [-i 进接口] [-o 出接口] [-s 来源ip] [-d 目的ip] [--sport 来源端口号协议名] [--dport] [-j 操作]

  • ip格式:192.168.0.1  192.168.0.0/24 

  • 对口格式:单个 23 连续 1024:65535 直接名 ssh

  • 操作:ACCEPT DROP REJECT LOG

mac和state状态模块

  • [-m state mac] [--state 状态]

  • -m mac aa:bb:cc:dd:ee:ff

  • -m state --state [INVALID 无效包] [NEW 新建连接的数据包] [ESTABLISHED 已连接成功] [RELATED 表示是和主机发出去的数据包相关]

icmp类型

  • [-p icmp] [--icmp-type 类型] :类型8是echo request,一般主机不是作为路由器(不需要进行ping测试)可以去掉回复

基于时间time模块

  • -m time [--timestart 开始时间] [--timestop结束时间] [--days 日期]  -j 动作  (简单介绍这几个参数)

  • 例子:在每个星期一到星期五的12:00到14:00开放网络

iptables -t filter -A FORWARD -m time --timestart 12:00 --timestop 14:00 --day Mon,Tue,Wed,Thu,Fri -m state --state ESTABLISHED,RELATED -j ACCEPT

基于包速率匹配recent模块

  • -m recent [--name 设定列表名] [--resource 源地址] [--rdest 目标地址] [--second 指定时间内] [--hitcount 命中次数] [--set 将地址添加进列表并更新包括时间戳等] [--rcheck 检测地址是否在列表内,从第一次匹配起算时间] [--update 和rcheck一样从最后一个匹配开始算时间] [--remove 从列表中删除地址,后接表名和地址]

NAT功能


SNAT:修改数据包的源ip(ip地址转换)在内网出口进行私网地址到公网地址的映射

过程(转发)/proc/sys/net/ipv4/ip_forward

  • 数据包到达主机,进入NAT 的PREROUTING链

  • 经过FILTER 的FORWARD链

  • 通过NAT 的POSTROUTING链,在这个链上,将数据包的源ip修改为公网ip,并将对应关系做缓存记录

  • Internet上的主机返回数据包时,在PREROUTING链上,将数据包的目标ip从公网ip根据之前的记录做修改

  • 例子1:192.168.1.0/24做端口转换

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
  • 例子2:web服务器有192.168.1.10到1.15六个地址需要转为公网ip,public ip设置在eth1上(直接指定修改)

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.10-192.168.1.15

DNAT:主要用于外部主动访问内部服务器(DMZ区域),基本是SNAT的逆过程

  • 可以做端口的映射,即将实际端口隐藏,例如:利用8080来开启web服务,然后在转发的linux主机上的OUTPUT/PREROUTING链上转成80端口

  • 例子:开放web服务器地址192.168.1.10,linux边缘设备public ip设置在eth1网卡,通过nat将外部访问进行转发到内部服务器

iptables -nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80 // 可以修改一下这个端口成其他不知名端口


本文出自 “Call me Boxin” 博客,请务必保留此出处http://boxinknown.blog.51cto.com/10435935/1665238

防火墙原理和iptables

标签:防火墙   iptables   安全管理   

原文地址:http://boxinknown.blog.51cto.com/10435935/1665238

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!