Iptables防火墙详细介绍与实战增强服务器安全
一:Iptables的概述及应用
iptables概述:
netfilter/iptables : IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。
netfilter/iptables 关系:
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
netfilter/iptables 后期简称为:iptables。 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。 所有规则配置后,立即生效,不需要重启服务。
三张表:
表名 |
作用 |
Filter |
#负责过滤数据包,包括的规则链有,input,output和forward; |
Nat |
#网络地址转换,包括的规则链有,prerouting,postrouting和output; |
Mangle |
#表则主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING; |
五个链:
链名 |
作用 |
Input |
匹配目标IP是本机的数据包, |
output |
出口数据包,一般不在此链上做配置 |
forward |
匹配流经本机的数据包, |
prerouting |
用来修改目的地址用来做DNAT。如:把内网中的80端口映射到路由器外网端口上 |
postrouting |
用来修改源地址用来做SNAT。如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网。 |
规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略 一般不在此链上做配置
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
总结:iptables三个表,5个链接,结构如图:
Raw表:用于处理异常,包括的规则链有,prerouting,output; 一般使用不到。
表->链->规则
Iptables过滤封包流程
总结:
整体数据包分两类: 1、发给防火墙本身的数据包 ;2、需要经过防火墙到达防火墙之外的数据包
POSTROUTIONG:发送到网卡接口之前。如下图:
数据包流向的基本步骤如下:
1. 数据包到达网络接口,比如 eth0。
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。
3. 如果进行了连接跟踪,在此处理。
4. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
5. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。
6. 决定路由,看是交给本地主机还是转发给其它主机。
到了这里我们就得分两种不同的情况进行讨论了,
一种情况就是数据包要转发给其它主机,这时候它会依次经过:
7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。
8. 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。
9. 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。
10. 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。
11. 进入出去的网络接口。完毕。
另一种情况是,数据包就是发给本地主机的,那么它会依次穿过:
7. 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。
8. 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。
9. 交给本地主机的应用程序进行处理。
10. 处理完毕后进行路由决定,看该往那里发出。
11. 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。
12. 连接跟踪对本地的数据包进行处理。
13. 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。
14. 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。
15. 再次进行路由决定。
16. 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。
17. 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。
18. 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。
19. 进入出去的网络接口。完毕
二:实验安装与配置简述
Iptables的安装
安装
[root@xuegod63 ~]# rpm -qf `which iptables`
iptables-1.4.7-4.el6.x86_64
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/iptables-1.4.7-4.el6.x86_64.rpm
配置文件位置:
[root@xuegod63 ~]# ls /etc/sysconfig/iptables
/etc/sysconfig/iptables
启动服务
[root@xuegod63 ~]# /etc/init.d/iptables start
[root@xuegod63 ~]# chkconfig --list iptables
iptables 0:off1:off2:on3:on4:on5:on 6:off
iptables语法总结:
iptables主要参数
-A 向规则链中添加一条规则,默认被添加到末尾
-T指定要操作的表,默认是filter
-D从规则链中删除规则,可以指定序号或者匹配的规则来删除
-R进行规则替换
-I插入一条规则,默认被插入到首部
-F清空所选的链,重启后恢复
-N新建用户自定义的规则链
-X删除用户自定义的规则链
-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,
-s指定源地址
-d指定目的地址
-i进入接口
-o流出接口
-j采取的动作,accept,drop,snat,dnat,masquerade
--sport源端口
--dport目的端口,端口必须和协议一起来配合使用
注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写
基本配置简述
例1:iptables命令使用方法
1: -A <链名> APPEND,追加一条规则(放到最后)
[root@xuegod63 ~]# iptables -t filter -A INPUT -j DROP #拒绝所有人访问服务器
2: -D <链名> <规则号码 | 具体规则内容> DELETE,删除一条规则
iptables -D INPUT 1(按号码匹配) 删除 filter 表 INPUT 链中的第1条规则(不管它的内容是什么)
注意:
1、若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条
2、按号码匹配删除时,确保规则号码 ≤ 已有规则数,否则报错
3、按内容匹配删除时,确保规则存在,否则报错
iptables -D INPUT -s 192.168.0.1 -j DROP(按内容匹配)
删除 filter 表 INPUT 链中内容为“-s 192.168.0.1 -j DROP”的规则
3: -P <链名> <动作> POLICY,设置某个链的默认规则
4: -F [链名] FLUSH,清空规则
例如:
添加规则:
[root@xuegod63 ~]# iptables -t filter -A INPUT -j DROP #添加一条规则
[root@xuegod63 ~]# iptables -F INPUT #清除INPUT链上的规则
[root@xuegod63 ~]# iptables -F #清除filter表中所有链上的规则
[root@xuegod63 ~]# iptables -t nat -F #清空NAT表中所有链上的规则
[root@xuegod63 ~]# iptables -t nat -F PREROUTING #清空NAT表中PREROUTING链上的规则
注意:
1、-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则。 需要手动改:
[root@xuegod63 ~]# iptables -P INPUT ACCEPT
2、-P 设置了 DROP 后,使用 -F 一定要小心!!!
配置crontab :
*/15 * * * * iptables -P INPUT ACCEPT
*/15 * * * * iptables –F
3、如果不写链名,默认清空某表里所有链里的所有规则
5: -L [链名] LIST,列出规则
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示 IP 地址和端口号码,不显示域名和服务名称
例如:
[root@xuegod63 ~]# iptables –L #粗略列出 filter 表所有链及所有规则
[root@xuegod63 ~]# iptables -t nat –vnL #用详细方式列出 nat 表所有链的所有规则,只显示 IP 地址和端口号
[root@xuegod63 ~]# iptables -t nat -vxnL PREROUTING #用详细方式列出 nat 表 PREROUTING 链的所有规则以及详细数字,不反解
6: 按网络接口匹配
-i <匹配数据进入的网络接口> #此参数主要应用于nat表,例如目标地址转换
例如:
-i eth0 匹配是否从网络接口 eth0 进来
-i ppp0 匹配是否从网络接口 ppp0 进来
-o 匹配数据流出的网络接口
例如:
-o eth0 匹配数据是否从eth0网络接口流出
-o ppp0 匹配数据是否从ppp0网络接口流出
iptables -t nat -o eth0 条件 动作
7:按来源目的地址匹配
-s <匹配来源地址>
可以是 IP、NET、DOMAIN,也可空(任何地址)
例如:
-s 192.168.0.1 匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
-s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包
-d <匹配目的地址>
可以是 IP、NET、DOMAIN,也可以空
例如:
-d 202.106.0.20 匹配目标去往 202.106.0.20 的数据包
-d 202.106.0.0/16 匹配目标去往 202.106.0.0/16 网络的数据包
-d www.abc.com 匹配目标去往域名 www.abc.com 的数据包
8:按协议类型匹配
-p <匹配协议类型>
可以是 TCP、UDP、ICMP 等,也可为空
例如:
-p tcp
-p udp
-p icmp --icmp-type 类型
ping: type 8 pong: type 0
9:按来源目的端口匹配
--sport <匹配源端口>
可以是个别端口,可以是端口范围
例如:
--sport 1000 匹配源端口是 1000 的数据包
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
--sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)
--dport <匹配目的端口>
可以是个别端口,可以是端口范围
例如:
--dport 80 匹配目的端口是 80 的数据包
--dport 6000:8000 匹配目的端口是 6000-8000 的数据包(含6000、8000)
--dport :3000 匹配目的端口是 3000 以下的数据包(含 3000)
--dport 1000: 匹配目的端口是 1000 以上的数据包(含 1000)
注意:--sport 和 --dport 必须配合 -p 参数使用
10:匹配应用举例
1、端口匹配
-p udp --dport 53
匹配网络中目的端口是 53 的 UDP 协议数据包
2、地址匹配
-s 10.1.0.0/24 -d 172.17.0.0/16
匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包
3、端口和地址联合匹配
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80
匹配来自 192.168.0.1,去往 www.abc.com 的 80 端口的 TCP 协议数据包
iptable配置实例
iptable基本操作
iptables -L 列出iptables规则
iptables -F 清除iptables内置规则
iptables -X 清除iptables自定义规则
设定默认规则
在iptables规则中没有匹配到规则则使用默认规则进行处理
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
配置SSH规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出。
只允许192.168.0.3的机器进行SSH连接
iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
允许loopback回环通信
IPTABLES -A INPUT -i lo -p all -j ACCEPT
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
目的地址转换,映射内部地址
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.1-192.168.0.10
源地址转换,隐藏内部地址
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
地址伪装,动态ip的NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
masquerade和snat的主要区别在于,snat是把源地址转换为固定的IP地址或者是地址池,而masquerade在adsl等方式拨号上网时候非常有用,因为是拨号上网所以网卡的外网IP经常变化,这样在进行地址转换的时候就要在每次都要修改转换策略里面的ip,使用masquerade就很好的解决了这个问题,他会自己去探测外网卡获得的ip地址然后自动进行地址转换,这样就算外网获得的ip经常变化也不用人工干预了。
开启转发功能
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT 只允许已建连接及相关链接对内转发
ptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 允许对外转发
过滤某个MAC
iptables -A FORWARD -m mac --mac -source MAC地址 -j DROP
报文经过路由后,数据包中原有的MAC信息会被替换,所以在路由后的iptables中使用mac匹配没有意义。
数据包整流
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
多端口匹配
用以一次匹配多个端口
iptables -A INPUT -p tcp -m muliport --dport s 21,22,25,80,110 -j ACCEPT
丢弃非法连接
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables-A FORWARD -m state --state INVALID -j DROP
存储于恢复iptables规则
iptables-save > somefile
iptables-restore < somefile
如果你的IPTABLES基础知识还不了解,建议先去看看.
Linux下配置iptables防火墙增强服务器
一:实验环境
iptables服务端:xuegod-63 IP:192.168.1.63
iptables客户端:xuegod-64 IP:192.168.1.64
二:实验目标
例1:使用iptables防火墙保护公司web服务器
例2:使用iptables搭建路由器,通过SNAT功能,使内网PC机,可以上网。
例3:拒绝访问服务器本身和拒绝通过服务器访问别的机器
例4:使用DNAT 功能,把内网web服务器端口映射到路由器外网
三:实验代码
例1:使用iptables防火墙保护公司web服务器
具体配置如下:
web服务器端:xuegod63
客户端: xuegod64
配置xuegod63防火墙:
服务端运行防火墙并清空防火墙
[root@xuegod-63 ~]# /etc/init.d/iptables start
[root@xuegod-63 ~]# iptables –F
#清空防火墙是怕在防火墙中会有一些规则
启动远程连接服务器--22
[root@xuegod-63 ~]# /etc/init.d/sshd restart
安装vsftpd并启动--21
[root@xuegod-63 ~]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-6.el6_0.1.x86_64.rpm
[root@xuegod-63 ~]# /etc/init.d/vsftpd restart
客户端安装lftpd并测试
[root@xuegod-64 ~]# rpm -ivh /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm
[root@xuegod-64 ~]# lftp 192.168.1.63
lftp 192.168.1.63:~> ls
drwxrwxrwx 2 0 0 4096 Aug 18 05:12 pub
lftp 192.168.1.63:/> exit
服务端启动阿帕奇服务器--80
[root@xuegod-63 ~]# /etc/init.d/httpd restart
[root@xuegod-63 ~]# echo 192.168.1.63 > /var/www/html/index.html
[root@xuegod-63 ~]# vim /etc/httpd/conf.d/welcome.conf #注释掉阿帕奇服务器的默认首页
#<LocationMatch "^/+$">
# Options -Indexes
# ErrorDocument 403 /error/noindex.html
#</LocationMatch>
#将以上四个命令进行注释
[root@xuegod-63 ~]# /etc/init.d/httpd restart
客户端1.64上测试
#现在是服务端与客户端是可以ping通的
服务器防火墙配置
[root@xuegod-63 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@xuegod-63 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@xuegod-63 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#服务器之间要用ssh来说远程连接,其端口号是22号,web服务器的端口号是80端口,因此前面要把22,80两个端口开放,在数据包进入(INPUT)链处,给予通过。
[root@xuegod-63 ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#这个想要进入的封包是否为刚刚我发出去的回应? 如果是刚刚我发出去的回应,那么就可以予以接受放行. ESTABLISHED:已建立的链接状态。 RELATED:该封包为本机发出的封包有关。
[root@xuegod-63 ~]# iptables -P INPUT DROP
注:-
P:设置一个链的默认策略
DROP:默认策略的动作
iptables的默认表是:filter 表
所以这条规则的意思就是:设置filter表的INPUT链的默认策略为丢包。就是本机默认不接受任何连接,除非在INPUT链上再设置接收的规则。
注:一般iptablesl-,OUTPUT出口一般都放行,不需要在出口上做限制。这样允许服务器主动访问外网所有数据。
[root@xuegod-63 ~]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
测试
[root@xuegod-64 ~]# ssh 192.168.1.63
root@192.168.1.63's password: 123456
Last login: Wed Aug 26 19:32:13 2015 from 192.168.1.64
[root@xuegod-63 ~]# exit
例2:使用iptables搭建路由器,通过SNAT功能,使内网PC机,可以上网。
实验环境:
配置:xuegod-63
Xuegod-63做路由器 添加两1个网卡,配置eth0为桥接,eth1为vmnet4模式。
配置eth0的IP地址为:192.168.1.63 /24
配置eth1的IP地址为:192.168.2.1 /24
注释:这里eth1设置重启之后,eth0会被no掉,必须要登录到配置文件中修改为yes
[root@xuegod-63 network-scripts]# /etc/init.d/network restart
配置客户端xuegod64:
xuegod-64做客户端,eth0网卡模式为vmnet4
配置eth0 IP,192.168.2.2
启用内核路由转发功能:
[root@xuegod63 ~]#echo "1" > /proc/sys/net/ipv4/ip_forward
或者
[root@xuegod63 ~]# vim /etc/sysctl.conf
改:#net.ipv4.ip_forward = 0
为: net.ipv4.ip_forward = 1
[root@xuegod63 ~]#sysctl -p #改完使配置生效:
防火墙配置并查看规则
[root@xuegod63 ~]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
[root@xuegod-63 ~]# iptables -t nat -L
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.2.0/24 anywhere to:192.168.1.63
测试:
[root@xuegod-63 ~]# ping 192.168.1.1 #ping路由器
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.19 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=3.06 ms
[root@xuegod-63 ~]# ping www.baidu.com #ping外网
PING www.a.shifen.com (119.75.217.109) 56(84) bytes of data.
64 bytes from 119.75.217.109: icmp_seq=1 ttl=52 time=37.7 ms
64 bytes from 119.75.217.109: icmp_seq=2 ttl=52 time=38.1 ms
实例3:拒绝访问服务器本身和拒绝通过服务器访问别的机器:
实验环境:
配置好网络和对应的IP地址:
Xuegod-64: eth0 : IP:192.168.2.2 网卡属于:Vmnet4
xuegod-63: eth1 : IP:192.168.2.1 网卡属于:Vmnet4
xuegod-63: eth0 : IP:192.168.1.63 网卡属于:桥接
网络拓扑图如下:
3.1:拒绝访问服务器本身
xuegod63启用内核路由转发功能:
[root@xuegod63 ~]#iptables –F :清除之前实验的所有规则,不包括做SNAT所添加的规则,即这个时候xuegod64是能ping通192.168.1.1,能上网。
[root@xuegod63 ~]#iptables -A INPUT -s 192.168.2.2 -j DROP
测试:ping不通192.168.2.1
是否可以通过FORWARD链上做规则限制呢?测试:
[root@xuegod63 ~]#iptables –F 清除之前实验的所有规则,不包括做SNAT所添加的规则,即这个时候xuegod64是能ping通192.168.1.1,能上网。
[root@xuegod63 ~]#iptables -A FORWARD -s 192.168.2.2 -j DROP
可以ping通192.168.2.1
注:为什么在INPUT链上做DROP可以限制192.168.2.2访问192.168.2.1,而在FORWARD链上却是不能够限制192.168.2.2访问192.168.2.1呢?
答:首先,现在要做的是限制192.168.2.2访问服务器192.168.2.1本身。第二INPUT链是本地的,是可以限制其他服务器访问本地服务器的链。而FORWARD链他不是本地的,它是不能够限制其他服务器访问服务器本身的,而只能限制另一个服务器的数据流量要经过本地服务器来访问其他服务器的,只要不是访问本地的,是流经的数据流 都是可以做限制的 。同理,INPUT链是不能做限制另一个服务器的数据流量要经过本地服务器来访问其他服务器的。
查看数据包,匹配流程图:
注:直接ping服务器本身,数据流是不经过RORWARD链的。所以规则要添加在INPUT链上。
[root@ xuegod63 ~]# iptables -A INPUT -s 192.168.2.2 -j DROP
#不能访问本地服务器了,但是可以正常上网
#这里也不能在OUTPUT链上做规则,不允许数据流流出,如果其在这个链上做规则的话,数据流是任然可以访问本地服务器的,只不过不能出去罢了。
3.2:拒绝通过服务器上网
注:上一个规则中,只禁止了其访问本地服务器,但是它任然是可以上网的
[root@ xuegod63 ~]# iptables -A OUTPUT -d 192.168.2.2 -j DROP
#这里它还是可以上网的,为什么还是能够上网呢? 错误的依旧在链的作用上,OUTPUT链也是本地的,他只能限制访问本地服务器的数据流是否能够通过。而想要上网,需要经过本地服务器,即数据流是流经本地服务器的,所以在OUTPUT链上是无法限制到的。因此,这里只能在FORWARD链上做限制。,
[root@xuegod63 ~]#iptables -A FORWARD -s 192.168.2.2 -j DROP
测试
#不能上网
例4:使用DNAT 功能,把内网web服务器端口映射到路由器外网
注释:80端口映射
实验环境:
xuegod64: IP :192.168.2.2 网卡属于:Vmnet4
xuegod63: eth1 : IP:192.168.2.1 网卡属于:Vmnet4
xuegod63: eth0 : IP:192.168.1.63 网卡属于:桥接
Xuegod63 为路由器
Xuegod64 为WEB服务器
物理机 为客户机
[root@xuegod63 ~]# iptables -F
xuegod64,开启动httpd服务,首页内容为: 192.168.2.2
[root@xuegod64~]# yum install httpd -y
[root@xuegod64~]# /etc/init.d/httpd start
[root@xuegod64 ~]# echo 192.168.2.2 > /var/www/html/index.html
xuegod63上做DNAT端口映射:
[root@xuegod63 ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
或:
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
测试
物理机访问