您的位置:首页 > 其它

第五章:iptables应用案例分析(代理服务器上设置iptables)

2011-10-26 12:38 387 查看


一、代理服务器架设的位置如上图

实验环境如下:

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐