一、代理服务器架设的位置如上图
实验环境如下:
1)局域网网段:192.168.1.0/24,该网段内有2台服务器和1台客户端
(1)WEB服务器:192.168.1.3/24
(2)FTP服务器:192.168.1.2/24
(3)客户端:192.168.1.5/24
2)局域网与外网之间是通过安装有CentOS的防火墙相连,防火墙有两块网卡
(1)eth0:192.168.1.254/24,它是网段:192.168.1.0/24的网关
(2)eth1:192.168.0.254/24,它模拟为公网IP地址
3)Internet的另一端有一台客户端:192.168.0.5/24
该客户端与防火墙是可以ping的通的
4)网卡的连接方式
FTP服务器的eth0:VMnet1-(Host-only)
WEB服务器的eth0:VMnet1-(Host-only)
Firewall的eth0:VMnet1-(Host-only)
Firewall的eth1:Bridged
client的eth0:VMnet1-(Host-only)
二、相关案例的配置
1、案例1:让192.168.1.0/24这个网段内的所有机子都可以通过防火墙(192.168.1.254)上internet
第1步:做准备工作,让防火墙(192.168.1.254)更安全
#防火墙为ssh server,让其它的客户端能够通过SSH服务连接登录到防火墙
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
#防火墙为ssh client,让它能够连接其它的SSH服务器
iptables -t filter -A INPUT -p tcp --sport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
#防火墙为dns client,让它能够解析域名
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
#防火墙为web client,让它能够访问网页
iptables -t filter -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
#让局域网(192.168.1.0/24)内的所有机子都能ping通该防火墙
iptables -t filter -A INPUT -p icmp -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -o eth0 -d 192.168.1.0/24 -j ACCEPT
#修改默认规则
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
第2步:防火墙上开启数据包的转发功能(即:在filter表的FORWARD链上写入规则)
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf && sysctl -p
#对于防火墙的eth0这块网卡,对来自局域网的所有类型的数据包(源地址是192.168.1.0/24网段的)进行转发到公网
iptables -t filter -A FORWARD -i eth0 -s 192.168.1.0/24 -j ACCEPT(这里不写-i eth0也是可以的)
#对于防火墙的eth1这块网卡,对来自公网的所有类型的数据包(目标是192.168.1.0/24网段的)进行转发到局域网
iptables -t filter -A FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT(这里不写-i eth1也是可以的)
第3步:地址转化(由于要访问Internet,所以数据包要出去到外网,应在防火墙的nat表中的POSTROUTING链上写入规则)
modprobe ip_nat(#载入nat表的模块)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.0.254
或者
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 192.168.0.254(指定哪个接口也是可以的)
iptables -t nat -A POSTROUTING -s 192.168.1.5 -j SNAT --to-source 192.168.0.254(指定只允许192.168.1.5这台机子通过防火墙上网)
2、案例2:通过防火墙限制局域网中的192.168.1.5的下载速度
注意:在案例1的基础上,向filter表的FORWARD链进行写入规则
#要限制下载速度,也就是说要限制从外网进入防火墙且经过FORWARD转发的数据包的数量
将 "iptables -t filter -A FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT" 改为:
iptables -t filter -I FORWARD -i eth1 -d192.168.1.5 -m limit --limit 50/m --limit-burst 50 -j ACCEPT
注意:ifconfig eth1可查看MTU值为1500字节=1500/1024=1.5KB(即:每个数据包的大小),那么1分钟内最大的下载速度为:50 * 1.5KB = 75KB
for ((i=5;i<10;i++) {
iptables -t filter -I FORWARD -i eth1 -d 192.168.1.$i -m limit --limit 50/m --limit-burst 50 -j ACCEPT(限制局域网的一段IP)
}
3、案例3:公网的那台客户端(192.168.0.5)通过防火墙使用远程桌面连接局域网中的192.168.1.5主机
第1步:做准备工作,与案例1的准备工作一样
第2步:防火墙上开启数据包的转发功能(即:在filter表的FORWARD链上写入规则)
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf && sysctl -p
iptables -t filter -A FORWARD -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT
第3步:地址转化
iptables -t nat -A PREROUTING -i eth1 -d 192.168.0.254 -p tcp --dport 3389 -j DNAT --to-destination 192.168.1.5:3389
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.5 -p tcp --sport 3389 -j SNAT --to-source 192.168.0.254:3389
第4步:测试
windows xp(192.168.0.5) -> run -> mstsc -> 192.168.0.254
4、案例4:通过防火墙向公网发布局域网内的WEB服务器
第1步:做准备工作,与案例1的准备工作一样
第2步:防火墙上开启数据包的转发功能(即:在filter表的FORWARD链上写入规则)
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf && sysctl -p
iptables -t filter -A FORWARD -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT
第3步:地址转化
iptables -t nat -A PREROUTING -i eth1 -d 192.168.0.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.3 -p tcp --sport 80 -j SNAT --to-source 192.168.0.254:80
第4步:测试
windows xp(192.168.0.5) -> run ->http://192.168.0.254
4、案例5:通过防火墙向公网发布局域网内的FTP服务器
第1步:做准备工作,与案例1的准备工作一样
第2步:防火墙上开启数据包的转发功能(即:在filter表的FORWARD链上写入规则)
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf && sysctl -p
iptables -t filter -A FORWARD -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT
第3步:地址转化
(1)FTP服务器:主动模式
iptables -t nat -A PREROUTING -i eth1 -d 192.168.0.254 -p tcp --dport 20 -j DNAT --to-destination 192.168.1.2:20
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.2 -p tcp --sport 20 -j SNAT --to-source 192.168.0.254:20
iptables -t nat -A PREROUTING -i eth1 -d 192.168.0.254 -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2:21
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.2 -p tcp --sport 21 -j SNAT --to-source 192.168.0.254:21
(2)FTP服务器:被动模式
首先,要实现被动模式,且控制FTP服务器数据传输所使用的端口,那么得配置FTP服务器:/etc/vsftpd/vsftpd.conf,在该文件增加如下内容:
pasv_enable=yes #启动被动模式
pasv_min_port=4040 #被动模式vsftpd服务器所使用的端口范围
pasv_max_port=4080
其次,防火墙必须载入相关模块到内核
modprobe ip_nat
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
最后,配置防火墙
iptables -t nat -A PREROUTING -i eth1 -d 192.168.0.254 -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2:21
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.2 -p tcp --sport 21 -j SNAT --to-source 192.168.0.254:21
iptables -t nat -A PREROUTING -i eth1 -d 192.168.0.254 -p tcp --dport4040:4080 -j DNAT --to-destination 192.168.1.2:4040-4080
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.2 -p tcp --sport 4040:4080 -j SNAT --to-source 192.168.0.254:4040-4080
注意:其实FTP服务器工作于主动模式还是被动模式,完全是由FTP客户端决定的!所以在vsftpd.conf文件里根本就没有必要配置上面这三条语句,配置那三条语句只是为了更好的控制FTP服务器被动模式下工作时数据传输端口
第4步:测试
windows xp(192.168.0.5) -> cmd -> ftp 192.168.0.254
5、案例5:通过防火墙限制局域网中的192.168.1.5机子使用飞信客户端软件
第1步:下载数据包分析工具(wireshark)
由于iptables工具扮演的是网络层的防火墙,所以在限制用户使用软件方面,一般只能通过从协议(TCP、UDP)对应的端口入手,通过限制这些协议对应的端口,来达到限制使用软件的目的;但是一些协议iptables是无法限制,例如:点对点协议
http://www.wireshark.org
http://www.wireshark.org/download/win32/wireshark-win32-1.2.7.exe
第2步:由于防火墙扮演着网关的角色,所以我们可以在网关上使用tcpdump进行抓包,该工具可以抓TCP类型的数据包
首先,在防火墙上运行tcpdump指令
tcpdump -i eth0 host 192.168.1.5 -s 0 -w feixing.pcap
参数分析:
(1)-i eth0:指的是在防火墙的充当网关的那个接口上进行抓包(因为局域网中的用户上网时,数据包都得通过网关)
(2)host + IP:指的是抓取含有192.168.2.5这个地址的数据包
(3)-s 0:表示数据包的长度不限
(4)-w:表示所抓到的数据包写入到一个文件
然后,在局域网的192.168.1.5这台机子上使用飞信客户端程序,登录飞信服务器,之后再切断防火墙的tcpdump指令(ctrl+c)
第3步:用wireshark软件对所抓到的数据包进行分析
第4步:局域网的那台机子(192.168.1.5)在使用飞信时,传送的数据包必须经过防火墙上的filter表的FORWARD进行转化,所以我们在FORWARD链上进行写入规则,来限制该台机子使用飞信客户端
#阻止客户端将相关的飞信数据包发给飞信服务器
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 221.176.31.69 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 221.176.31.45 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 221.130.45.212 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 221.130.45.201 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 221.130.45.198 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 221.130.44.232 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 218.61.204.91 -p tcp -m multiport --dport 80,8080,443 -j DROP
iptables -t filter -I FORWARD -i eth0 -s 192.168.1.5 -d 199.7.52.190 -p tcp -m multiport --dport 80,8080,443 -j DROP