[转]iptables防火墙与NAT服务

标签: | 发表时间:2013-09-20 16:16 | 作者:zeo112140
出处:http://blog.csdn.net/zeo112140

iptables防火墙与NAT服务
一.防火墙的概述
1.简介
(1)设置在不同的网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性
(2)通过审查经过每一个数据包,判断它是否有相匹配的过滤规则,根据规则先后顺序一一进行比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作,若都不能满足,则将数据包丢弃,从而保护网络安全。
(3)可以是一台路由器,也可以是一台或一组主机构成,它通常被放置在公共网络入口处,所有内部外部网络通信数据包都必须经过防火墙,接受检查,只有符合安全规则的数据才允许通过。
(4)使用防火墙实现功能
A.可以保护易受攻击的服务
B.控制内外网络之间网络系统的访问
C.集中管理内网的安全性,降低管理成本
D.提高网络保密性和私有性
E.记录网络使用状态,为安全规划和网络维护提供依据.(根据图示讲解)

2.防火墙的分类
(1)包过滤防火墙
   优点:速度快; 
   缺点:一旦被攻破,对数据包源/目标地址与IP端口很容易伪造,常见有
        “IP地址欺骗”.
(2)代理服务型防火墙
   优点:用户请求访问某站点,代理服务器就会替用户去那个站点取回所
        需信息,再转发给用户,相对前面的防火墙,要安全很多.
   缺点:速度较慢

二.iptables简介
   是一款免费的软件,可代替高价的防火墙解决方案,完成封包过滤,封包重定向和网络地址转换NAT功能等.
三.iptables基础
1.规则(rules):网管预定义条件,一般定义为“若包头符合这样的条件,就这样处理这个数据包”,这些规则分别指定了源地址、目标地址,传输协议(如:TCP UDP ICMP)和服务类型(如:HTTP FTP SMTP)等,当数据包与规则相匹配时,IPTABLES就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT)、拒绝(REJECT)和丢弃(DROP)等,配置防火墙主要工作就是添加、修改和删除这些规则。
2.链(chains):是数据包传播路径,每一条链其实就是众多规则中的一个检查清单

,每一条链中可以有一条或多条规则,数据包到达一个链时,然后从此链中
第一条规则开始检查.
3.表(tables):提供特定的功能,iptables内置了三个表
(filter/nat/mangle),分别用于实现包过滤、网络地址转换和包重构的
功能。
(1)filter表:主要用于过滤数据包,该表根据系统管理员预定义的一
组规则过滤符合条件的数据包,对于防火墙而言,主要利用在此表中指
定一系列规则来实现对数据包进行过滤操作,此表也是IPTABLES默认的
表,IPTABLES也是使用此表执行所有的命令,此表含了INPUT链(处理进
来的包),FORWARD链(处理转发的数据包)和OUTPUT链(处理本地生成
的包),在此表中只允许对数据包进行接受、丢弃的操作,而无法对数
据包进行更改。
(2)nat表:主要用于网络地址转换,可以实现一对一、一对多、多对
多等转换工作,IPTABLES使用此表实现共享上网功能,nat表含有
PREROUTING链(修改将要到来的数据包)、OUTPUT链(修改在路由前本
地生成的数据包)和POSTROUTING链(修改将要出去的数据包)。

(3)mangle表:主要用于对指定的包进行修改,因为一些特殊应用可能
需要去改写数据包的一些传输特性,如:TTL等
4.iptables传输数据包的过程

     进入数据包                                 输出数据包
   PREROUTING链      FORWORD链             POSTROUTING链
                转发      
     进入本地
   INPUT链          内部处理过程           OUTPUT链

四.关闭系统防火墙
1.iptables命令格式
iptables [-t 表] – 命令 匹配 操作
(1)表选项
   用于指定命令应用于哪个iptables内置表,共有filter/nat/mangle表
(2)命令选项:用于指定iptables执行方式,有插入/删除/添加规则等

    命令                           说明
-P 或 --policy<链名>          定义默认策略
-L 或 --list<链名>            查看IPTABLES规则列表
-A 或 --append<链名>          在规则列表最后一行增加1条规则
-I 或 --insert<链名>          在指定位置插入1条规则
-D 或 --delete<链名>          从规则列表中删除1条规则
-R 或 --replace<链名>         替换规则列表中的某条规则
-F 或 --flush<链名>           删除表中所有规则
-Z 或 --zero<链名>            将表中数据包计数器/流量计数据归零

(3)匹配选项:指定数据包与规则匹配所应具有的特征,包括源地址/目的地址/传输协议和端口号等.


             匹配                       说明
-i或 --in-interface<网络接口号> 指定包从哪个网络接口进入
-o或 --out-interface <网络接口号> 指定包从哪个网络接口输出
-p或 --proto协议类型              指定数据包匹配的协议
-s或 --source<源地址或子网> 指定数据包匹配的源地址
--sport<源端口号>   指定数据包匹配的源端口号,可用“起始端口:结
                     束端口”的格式指定一个范围
-d或--destination<目标地址或子网> 指定数据包匹配的目标地址
--dport<目标端口号>   指定数据包匹配的目标端口号,可用“起始端口:
                       结束端口”的格式指定一个范围

(4)动作选项:指定当数据包与规则匹配时,应该做什么操作

动作          说明
ACCEPT      接受数据包
DROP        丢弃数据包
REDIRECT    将包重新转向到本机或另一台主机的某个端口,通常用此实
            现透明代理或对外开放内网的某些服务
SNAT        源地址转换,可改变数据包源地址
DNAT        目标地址转换,可改变数据包目标地址
MASQUERADE IP伪装,只能用于ADSL的NAT
LOG         日志功能,为排错

2.iptables的使用

(1)定义默认策略
当数据包不符合链中任一条规则时,iptables将根据此链预先定义的默认
策略来处理数据包,默认策略定义如下:
格式:iptables [-t 表名] <-p> <链名> <动作>
说明:A.默认为filter表,可指定到nat或mangle中
     B. <-p> 定义默认策略
     C.<链名> 指默认策略将应用于哪个链,可使用   
              INPUT/OUTPUT/FORWARD
     D.<动作> 将包处理情况
例一:将filter表INPUT链的默认策略定义为接受数据包
     iptables –P INPUT ACCEPT
例二:将nat表OUTPUT链默认策略定义为丢弃数据包
     iptables –t nat –P OUTPUT DROP


小技巧:对没有配置规则的用户,先拒绝所有数据包,然后再根据需要
        对一些包放行。
方法: iptables –P INPUT DROP
       iptables –P FORWARD DROP
       iptables –P OUTPUT ACCEPT

(2)查看iptables规则
格式: iptables [-t 表名] <-L> [链名]

如:查看nat表所有链的规则
    iptables –t nat –L
(3)增加/插入/删除/替换规则
格式: iptables [-t 表名] <-A|I|D|R>链名 [规则编号] [-i|o网卡
        名称] [-p协议类型] [-s源IP地址|源子网] [--sport源端口号
        ] [-d目标IP地址|目标子网] [--dport目标端口号] <-j动作>
例一:为filter表的INPUT链添加一条规则,规则的内容是将来自IP地址
为192.168.1.200这台主机的数据包都丢弃,然后查看filter表的INPUT链
规则列表.
   iptables –t filter –A INPUT –s 192.168.1.200 –j DROP
   iptables –t filter –L INPUT
补充:如果,规则的内容是接受这台主机的包,只需将DROP改为ACCEPT

例二:在filter表的INPUT链规则列表中的第2条规则前插入一条规则,内
容为禁止192.168.2.0这个子网里所有主机访问TCP协议的80端口.
iptables –t filter –I INPUT 2 –s 192.168.2.0/24 –p tcp –dport
    80 –j DROP
iptables –t filter –L INPUT
例三.删除filter表的INPUT链规则列表中第3条规则,然后查看
iptables –t filter –D INPUT 3
iptables –t filter –L INPUT
例四:替换filter表的INPUT链规则列表中的第2条规则,为禁止
192.168.3.0这个子网主机访问TCP协议80端口,然后查看
iptables –t filter –R INPUT 2 –s 192.168.3.0/24 –p tcp –dport
    80 –j DROP
iptables –t filter –L INPUT
(4)清除规则和计数器
格式:iptables [-t 表名] <-F|Z>
例如:A.删除filter表中所有规则
       iptables -F

B.将表中数据包计数器和流量计数器归零
     iptables –Z
C.删除nat表中所有规则
     iptables –t nat –F
五.NAT服务
1.什么是私有IP
10.0.0.0-10.255.255.255
172.16.0.0-172.31.255.255
192.168.0.0-192.168.255.255
2.什么是NAT
是将一个地址域(如:私有网络)映射到另一个地址域(如:INTERNET)的标
准方法.
3.NAT的工作原理
(1)静态网络地址转换
A.定义:地址转换必须依赖手工建立的内外部地址映射表来运行.
B.原理

                                         192.168.16.10

INTERNET          NAT服务器              192.168.16.11   
                  NAT映射表
              公网IP    内部私有IP       192.168.16.12
         202.96.2.8   192.168.16.10
         202.96.2.9   192.168.16.11 
         202.96.2.10 192.168.16.12
               一对一的转换

(2)动态网络地址转换
A.定义:地址转换是由NAT服务器来完成

B.原理

                                         192.168.16.10

INTERNET          NAT服务器              192.168.16.11   
            NAT映射表
    公网IP            内部私有IP         192.168.16.12
202.96.2.8:2320 192.168.16.10:2320
202.96.2.8:2879 192.168.16.11:2879 
202.96.2.8:3012 192.168.16.12:3012
     一对多的转换(端口一致性)


(3)网络地址端口转换(NAPT)
A.定义:不但会改变经过这个NAT设备的IP数据报IP地址,还会改变IP数据
报的TCP/UDP端口
B.原理                                      192.168.16.10

INTERNET          NAPT服务器              192.168.16.11   
            NAT映射表
    公网IP            内部私有IP         192.168.16.12
202.96.2.8:3200 192.168.16.10:2320
202.96.2.8:1784 192.168.16.11:2879 
202.96.2.8:1579 192.168.16.12:3012
     一对多的转换(端口随机性)
六.使用iptables实现NAT服务
1.配置两块网卡
(1)eth0为公网IP
(2)eth1为私有IP
(3)配置DNS与网关
(4)重启网络服务

2.在命令行输入命令
(1)echo 1 > /proc/sys/net/ipv4/ip_forward
   表示打开内核的路由功能,如关闭将1改为0就可以了.
(2)iptables –t nat –A POSTROUTING –o eth0 –j SNAT --to 
                                               218.104.71.45
注:可以写到文件中做成脚本,然后再放入到/etc/rc.d/rc.local中,让其与系统一起启动,还得要求把nat/filter表规则与计数器清除(F|Z)
3.客户端配置
(1)IP 地址   (2)网关 (3)DNS
七.IPTABLES技巧实例
1.禁止客户访问不健康的网站
例1:添加一条规则,禁止用户访问域名为 www.sohu.com网站
    iptables –I FORWARD –d  www.sohu.com -j DROP

例2:禁止用户访问IP为202.17.61.4的网站
    iptables –I FORWARD –d 202.17.61.4 -j DROP

2.禁止一些客户机上网
例1:添加一条规则禁止IP为192.168.1.200的客户机上网
    iptables –I FORWARD –s 192.168.1.200 –j DROP
例2:添加一条规则禁止子网192.168.1.0/24的客户机上网
    iptables –I FORWARD –s 192.168.1.0/24 –j DROP
3.禁止客户端访问一些服务
例1:禁止192.168.1.0子网里所有客户机使用FTP协议下载
iptables –I FORWARD –s 192.168.1.0/24 –p tcp --dport 21 –j DROP
例2:禁止192.168.1.0子网里所有客户机使用TELNET协议
iptables –I FORWARD –s 192.168.1.0/24 –p tcp --dport 23 –j DROP
4.禁止使用ICMP协议
例1:禁止外网用户通过ICMP来PING你的NAT服务器外网接口
iptables –I INPUT –i eth0 icmp –j DROP
5.禁止客户机使用QQ(QQ服务器很多)
iptables –I FORWARD –p tcp --dport 8000 –j DROP 
iptables –I FORWARD –d tcpconn.tencent.com –j DROP

6.发布内部网络服务器到公网(端口映射技术)
例:发布内网192.168.16.200主机的WEB服务到INTERNET上,外网用户通过访问NAT服务器的外网卡接口的TCP协议80端口来访问.
iptables –t nat –I PREROUTING –i eth0 –p tcp --dport 80 –j DNAT
      --to-destination 192.168.16.200:80

7.通过IPTABLES禁止外网访问我的NAT服务器,除TCP的80口外.
iptables –A INPUT –i eth0 –s 0.0.0.0/0 –p icmp –j DROP
iptables –A INPUT –i eth0 –s 0.0.0.0/0 –p tcp --dport !80 –j DROP

8.只允许内网用户访问TCP/UDP的53与80端口
iptables –t nat –A POSTROUTING –p tcp –m multiport --port 53,80
   -s 192.168.168.0/24 –o eth0 –j SNAT --to 218.104.71.43


补充:一个R9下的实用的NAT配置方案:

echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_nat_ftp/ip_nat_irc/ip_conntrack
modprobe ip_conntrack_ftp/ip_conntrack_irc
iptables –F 
iptables –X
iptables –Z
iptables –F –t nat
iptables –X –t nat
iptables –Z –t nat
iptables –P INPUT ACCEPT
iptables –P OUTPUT ACCEPT
iptables –P FORWARD ACCEPT
iptables –t nat –P PREROUTING ACCEPT
iptables –t nat –P POSTROUTING ACCEPT
iptables –t nat –P OUTPUT ACCEPT
iptables –t nat –A POSTROUTING –o eth0 –s 192.168.186.0/24 –j SNAT 
                                --to 218.104.71.45
重要说明:如果为ADSL环境,把eth0改为ppp0;SNAT…改为MASQUERADE

作者:zeo112140 发表于2013-9-20 8:16:06 原文链接
阅读:17 评论:0 查看评论

相关 [iptables 防火墙 nat] 推荐:

[转]iptables防火墙与NAT服务

- - 小鸥的博客
iptables防火墙与NAT服务. (1)设置在不同的网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性. (2)通过审查经过每一个数据包,判断它是否有相匹配的过滤规则,根据规则先后顺序一一进行比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作,若都不能满足,则将数据包丢弃,从而保护网络安全.

iptables NAT 学习

- - BlogJava-首页技术区
为了搞清楚iptables NAT的过程,做了这个实验. 使用了1台双网卡服务器和1台单网卡服务器,2个网段. 1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:. l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log.

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

- -
NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表中记录下这个转换,当数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址. 局域网主机共享单个公网IP地址接入Internet(内网的地址改成公网). 局域网PC封装源、目ip(源地址:192.168.100.77,目的地址:172.16.16.101),到达网关路由器,SNAT将源地址转换成唯一的一个公网ip,此时源地址变成了公网ip172.16.16.254(eth0),再把数据包重新封装.

iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

- - Linux - 操作系统 - ITeye博客
转自:http://lesca.me/archives/iptables-examples.html. 一、iptables:从这里开始. iptables的filter表中有三种链:INPUT, FORWARD和OUTPUT. 默认的链策略是ACCEPT,你可以将它们设置成DROP. #一般出站连接设置为ACEEPT,看需求.

iptables 小结

- - CSDN博客系统运维推荐文章
        最近工作上一个作业用到了iptables命令,主要进行端口映射,在网上查了好多资料,尽管有很多例子,但还是整了好几天才整明白. (有一些是从网络中总结的,不断完善中...). (1) iptables简介.            iptables是一个Linux下优秀的nat+防火墙工具,iptables操作的是2.4以上内核的netfilter,所以需要linux的内核在2.4以上.

iptables 详解

- - 行业应用 - ITeye博客
以下文章转载于:http://blog.chinaunix.net/uid-26495963-id-3279216.html. 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种. 无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘. 而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测.

iptables原理说明

- - CSDN博客互联网推荐文章
1.iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具. 2. 作者一共在内核空间中选择了5个位置,.     1).内核空间中:从一个网络接口进来,到另一个网络接口去的.     2).数据包从内核流入用户空间的.

nat穿透原理

- - 开源软件 - ITeye博客
一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的). 但是,众所周知的是,UDP是一个无连接的数据报协议,使用它就必须自己维护收发数据包的完整性,这常常会大大增加程序的复杂度,而且一些程序由于某些原因,必须使用TCP协议,这样就常常令一些开发TCP网络程序的人员“谈穿透色变”.

linux下IPTABLES配置详解

- - Linux - 操作系统 - ITeye博客
作者博客:http://www.cnblogs.com/JemBai/. 原文地址:http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html. 如果你的IPTABLES基础知识还不了解,建议先去看看. 我们来配置一个filter表的防火墙.

利用iptables 封与解封IP

- - 傻子-王跸西的blog-WangBiXi.com
I表示Insert(添加),-D表示Delete(删除).