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