Chinaunix

标题: 配置iptables遇到的疑惑,希望高手能帮忙解答一下。 [打印本页]

作者: ji.hf_space    时间: 2009-03-16 13:33
标题: 配置iptables遇到的疑惑,希望高手能帮忙解答一下。
设计方案:

主机 A: 网关 (防火墙)
主机 B: Web 服务器
主机 C: 邮件服务器
主机 D: 数据库服务器
主机 E: 远程登录服务器 (SSH)
主机 F: 文件服务器 (开发)
终端 X: 工作站
终端 Y: 工作站
终端 Z: 工作站


应该考虑安全性, DMZ,...。
终端机器能够通过80,443端口访问internet.
主机B-F可以做任何事情.


给出主机A上防火墙iptable的简单设置。



根据需求分析,主机A需配三块NIC,其余服务器网卡数量没有特殊要求,现规划如下:
主机 A: 网关 (防火墙)
eth0:直接接入到公网;
eth1IP地址为:10.10.0.254/24,与服务器所处同一网络;
eth2IP地址为:192.168.0.254/24,与服务器所处同一网络;
主机 B: Web 服务器IP地址为:192.168.0.1/24
主机 C: 邮件服务器IP地址为:192.168.0.2/24
主机 D: 数据库服务器IP地址为:192.168.0.3/24
主机 E: 远程登录服务器 (SSH) IP地址为:192.168.0.4/24
主机 F: 文件服务器 (开发)IP地址为:192.168.0.5/24

主机BCDEF所处DMZ区,客户机所处内网

拓扑如图所示:





现主机A既防火墙配置如下:

一、
首先将主机A设置为网关

1、
将主机Aeth0Internet相连;

2、
将主机Aeth1接口IP设置为10.10.0.254/24

3、
将主机Aeth2接口IP设置为192.168.0.254/24

4、
#echo 1 > /proc/sys/net/ipv4/ip_forward *此更改在重新启动之后将被还原成默认值,所以为了固化配置需将/proc/sys/net/ipv4/ip_forward文件内容修改为1(为什么不让修改,在什么模式下可以修改其值)

二、设置防火墙参数:
1、将主机A的防火墙的默认级别改为DROP

#iptables –P INPUT DROP
#iptables –P OUTPUT DROP
#iptables –P FORWARD DROP
#iptables –t nat –P PREROUTING DROP
#iptables –t nat –P POSTROUTING DROP
#iptables –t nat –P OUTPUT DROP

2、设置DMZ区域:

#iptables –t nat –A PREROUTING –s 0.0.0.0/0 –d 192.168.0.1 –p tcp –dport 80 –j DNAT --to-destination 192.168.0.254
#iptables –t nat –A PREROUTING –s 0.0.0.0/0 –d 192.168.0.1 –p tcp –dport 443 –j DNAT --to-destination 192.168.0.254
#iptables –t nat –A PREROUTING –s 0.0.0.0/0 –d 192.168.0.2 –p tcp –dport 25 –j DNAT --to-destination 192.168.0.254
#iptables –t nat –A PREROUTING –s 0.0.0.0/0 –d 192.168.0.3 –p tcp –dport 3306 –j DNAT --to-destination 192.168.0.254
#iptables –t nat –A PREROUTING –s 0.0.0.0/0 –d 192.168.0.4 –p tcp –dport 22 –j DNAT --to-destination 192.168.0.254
#iptables –t nat –A PREROUTING –i eth1 –s 10.10.0.0/24 –d 192.168.0.5 –p tcp –dport 21 –j DNAT --to-destination 192.168.0.254

3、设置内网访问外网规则

#iptables –A FORWARD –i eth1 –s 10.10.0.0/24 –o eth0 –d 0.0.0.0/0 –p tcp –dport 80 –j SNAT --to-destination 10.0.0.254
#iptables –A FORWARD –i eth1 –s 10.10.0.0/24 –o eth0 –d 0.0.0.0/0 –p tcp –dport 443 –j SNAT --to-destination 10.0.0.254
#iptables –t nat –A POSTROUTING –s 10.10.0.0/24 –o eth0 –d 0.0.0.0/0 –p tcp –dport 80 –j SNAT --to-destination 10.0.0.254
#iptables –t nat –A POSTROUTING –s 10.10.0.0/24 –o eth0 –d 0.0.0.0/0 –p tcp –dport 443 –j SNAT --to-destination 10.0.0.254

在第3步骤的时候弄不清楚内网访问外网是用NAT好一点还是用forward好一些,哪个更安全,还是两个必须都得用上更安全。其他的不知道还需要配置什么吗?

四、保存对防火墙的设置并重新启动防火墙
#service iptables save
#service iptables restart
希望高手能帮忙指正一下错误,并帮以改正,谢谢。



作者: ji.hf_space    时间: 2009-03-16 13:49
标题: 回复 #1 ji.hf_space 的帖子
希望高人能帮帮忙,自己先顶起来!
作者: marsaber    时间: 2009-03-16 13:53
nat的效果会好一些。
楼主的防火墙规则很强悍啊!
没搞过这么严格的规则。

感觉到很多问题,试问一句:楼主的规则已经应用了吗?
作者: lth0721    时间: 2009-03-16 13:57
#iptables –P INPUT DROP
#iptables –P OUTPUT DROP
#iptables –P FORWARD DROP
#iptables –t nat –P PREROUTING DROP
#iptables –t nat –P POSTROUTING DROP
#iptables –t nat –P OUTPUT DROP

..全部都drop了。。 估计用不起来吧。。
作者: chenyx    时间: 2009-03-16 14:00
在/etc/sysctl.conf中net.ipv4.ip_forward = 0
修改0为1,重启就#echo 1 > /proc/sys/net/ipv4/ip_forward不用了
楼主的规则好严格,只允许http和443
作者: ji.hf_space    时间: 2009-03-16 14:01
标题: 回复 #3 marsaber 的帖子
我还没有应用,不摘掉都什么地方有问题,希望指正一下!
作者: ji.hf_space    时间: 2009-03-16 14:03
标题: 回复 #4 lth0721 的帖子
我在全局下都DROP了,但是我用规则设置成允许了,这样不可以吗?
作者: ji.hf_space    时间: 2009-03-16 14:05
标题: 回复 #5 chenyx 的帖子
在/etc/sysctl.conf中net.ipv4.ip_forward = 0
修改0为1,重启就#echo 1 > /proc/sys/net/ipv4/ip_forward不用了
楼主的规则好严格,只允许http和443


我试一下,谢谢了先!
作者: marsaber    时间: 2009-03-16 14:06
修改/etc/sysctl.conf确实是好方法!
(记得以前使用echo写1入/proc/sys/net/ipv4/ip_forward一直没成功,耗了我四天时间)

假设你外网IP为1.2.3.4
#!/bin/bash
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
/sbin/iptables -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to 192.168.0.1:80
/sbin/iptables -A PREROUTING -d 1.2.3.4 -p tcp --dport 25 -j DNAT --to 192.168.0.2:25
/sbin/iptables -A PREROUTING -d 1.2.3.4 -p tcp --dport 443 -j DNAT --to 192.168.0.1:443
/sbin/iptables -A PREROUTING -d 1.2.3.4 -p tcp --dport 3306 -j DNAT --to 192.168.0.3:3306
/sbin/iptables -A PREROUTING -d 1.2.3.4 -p tcp --dport 22222 -j DNAT --to 192.168.0.4:22


至于楼主要求设置DMZ区,而又想实现10.10.0.0/24访问192.168.0.5,那就将192.168.0.5改成10.10.0.0/24内的IP吧!这里显然楼主不知道DMZ区的作用。

[ 本帖最后由 marsaber 于 2009-3-16 14:11 编辑 ]
作者: ji.hf_space    时间: 2009-03-16 14:15
标题: 回复 #9 marsaber 的帖子
不好意思九楼的兄弟,我没有看明白你表达的意思,能再详细的指导一下吗?
作者: chenyx    时间: 2009-03-16 14:16
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

这句重要,楼主要写上
作者: marsaber    时间: 2009-03-16 14:17
原帖由 ji.hf_space 于 2009-3-16 14:15 发表
不好意思九楼的兄弟,我没有看明白你表达的意思,能再详细的指导一下吗?

哪点不明白?
一起学习学习。
作者: marsaber    时间: 2009-03-16 14:20
DMZ区,一般存放重要服务器,存在DMZ区的网络另外还会存在另外一个网络(均内网)。
稍稍熟悉安全的网友都知道,85%的攻击来自内部(这数据很多书上都有,如何得来?洋鬼子调查的结果吧)。
DMZ区就是为了防范内部攻击的。
既然192.168.0.5对10.10.0.0/24是开放的,你大可不必将192.168.0.5划分到DMZ区。

个人理解。
欢迎指正。
作者: chenyx    时间: 2009-03-16 14:29
还有一条,应该允许DNS流量通过
作者: ji.hf_space    时间: 2009-03-16 14:30
标题: 回复 #11 chenyx 的帖子
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

这句话的意思是什么呀,
我个人理解,既然防火墙充当网关了。那就没有INPUT的行为了,它只是起到转发的。他提供的功能只是访问控制,不涉及到向防火前INPUT数据包吧。

什么地方理解不正确希望指正!
作者: marsaber    时间: 2009-03-16 14:30
标题: 回复 #14 chenyx 的帖子

对谁而言?
代理服务器的DNS解析吗?
作者: marsaber    时间: 2009-03-16 14:31
标题: 回复 #15 ji.hf_space 的帖子
难道你平时不上去管理吗?
作者: chenyx    时间: 2009-03-16 14:33
原帖由 ji.hf_space 于 2009-3-16 14:30 发表
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

这句话的意思是什么呀,
我个人理解,既然防火墙充当网关了。那就没有INPUT的行为了,它只是起到转发的。他提供的功能只是访问控 ...

你访问外网,外网应答,相对state应该是RELATED,连接建立,state是ESTABLISHED
不允许的话,没有应答怎么建立连接
作者: marsaber    时间: 2009-03-16 14:36
INPUT是针对本机的。
作者: ji.hf_space    时间: 2009-03-16 14:38
标题: 回复 #17 marsaber 的帖子
现在暂时没有考虑远程管理,只是在服务器上管理防火墙,如果是这样,还需要配置
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
吗?
作者: marsaber    时间: 2009-03-16 14:39
你看吧!
如果你根本就不需要远程管理,一直在虚拟控制台下操作,针对本机的DROP就DROP吧!
作者: ji.hf_space    时间: 2009-03-16 14:47
标题: 回复 #21 marsaber 的帖子
我还想问一下,我这么配置之后还有什么安全隐患吗?能达到那个目的吧,就是内网用户可以通过80和443端口访问Internet,是通过nat好一点还是通过forward好一些,他们各自的利弊是什么?而外网无法访问内网,并且内网与外网都可以访问DMZ吗?
还有没有其他的安全隐患了。
作者: cubzsd    时间: 2009-03-16 16:03
本来我想把我的策略发给你看看的,我用的默认也是DROP,可惜LINUX硬盘坏了,文件读取不了,可是外网还能上,系统还在跑,靠牛B

[ 本帖最后由 cubzsd 于 2009-3-16 16:08 编辑 ]

未命名.JPG (262.35 KB, 下载次数: 18)

未命名.JPG

未命名.JPG (18.35 KB, 下载次数: 22)

未命名.JPG

作者: cubzsd    时间: 2009-03-16 16:21
首先给你个思路不知道我说的对不对,如果错了希望大家指点
我认为所有的包必经2个链,即INPUT和FORWARD,所以这2个链的默认规则做DROP就可以了,其余链用默认的放行,少规则,效率应该会高点,没必要所有的路全部先堵死,只要并经之路做检查就OK对否
作者: marsaber    时间: 2009-03-16 17:23
原帖由 ji.hf_space 于 2009-3-16 14:47 发表
我还想问一下,我这么配置之后还有什么安全隐患吗?能达到那个目的吧,就是内网用户可以通过80和443端口访问Internet,是通过nat好一点还是通过forward好一些,他们各自的利弊是什么?而外网无法访问内网,并且 ...


从你规则上看,你是将192.168.0.1上的http和https转发到外网,而不是内网用户可以通过80和443端口访问Internet。
作者: SMEWL    时间: 2009-03-17 08:00
LZ第三步的命令能执行吗?FILTER链怎么可以用NAT的GETTAR呢?第二步中把访问各服务器的包都转给了防火墙自己的DMZ口了,这是要做什么呢?怕是实际不了你的愿望。。。。。
作者: marsaber    时间: 2009-03-18 10:12
原帖由 SMEWL 于 2009-3-17 08:00 发表
LZ第三步的命令能执行吗?FILTER链怎么可以用NAT的GETTAR呢?第二步中把访问各服务器的包都转给了防火墙自己的DMZ口了,这是要做什么呢?怕是实际不了你的愿望。。。。。


LZ的想法确实有些怪异。
应该是思路没有理清、概念没有搞清导致的吧。
他的规则,我不敢看,怕疯掉。
作者: marsaber    时间: 2009-03-18 10:12
已经建议他使用几个虚拟机测试了,估计很快就会出结果了。
作者: liu2g    时间: 2009-03-18 12:20
呵呵, 怎么用FORWARD来做SNAT了, 还没搞清楚每条链的用法吧;
而且所有的链都DROP了, 就靠这几条规则估计是不行的吧, 在DNAT和SNAT之后, FORWARD, POSTROUTING, PREROUTING也要有相应的规则包才能转发, 要不就全都DROP了.
作者: cubzsd    时间: 2009-03-18 12:49
原帖由 liu2g 于 2009-3-18 12:20 发表
呵呵, 怎么用FORWARD来做SNAT了, 还没搞清楚每条链的用法吧;
而且所有的链都DROP了, 就靠这几条规则估计是不行的吧, 在DNAT和SNAT之后, FORWARD, POSTROUTING, PREROUTING也要有相应的规则包才能转发, 要不就全 ...



恩,原来LZ是菜鸟啊,像你这样基本概念都不清楚的,别拿生产环境做试验,你基础都不懂,到时候出了问题你根本没能力搞定,没能力就用现成产品,用CISCO,或者H3C,或者NETSCREEN产品做设置,你根本不清楚IPTABLES转发策略,你的规则运行都不能通过还谈什么调试呢。你搞的网络自己都搞不清楚是语法造成的问题,还是IPTABLES包控制流的问题,自己找3台PC先玩半年再说吧
作者: 疯狂善良    时间: 2009-03-23 09:30
向大家学习,即使楼主防火墙还不熟悉,但精神可嘉
作者: luo118    时间: 2009-03-23 10:06
用VM,多測試一下,結果就出來了
作者: 一棵菠菜    时间: 2009-03-23 11:34
#iptables –A FORWARD –i eth1 –s 10.10.0.0/24 –o eth0 –d 0.0.0.0/0 –p tcp –dport 80 –j SNAT --to-destination 10.0.0.254
#iptables –A FORWARD –i eth1 –s 10.10.0.0/24 –o eth0 –d 0.0.0.0/0 –p tcp –dport 443 –j SNAT --to-destination 10.0.0.254


这2句?????forward 能启用SNAT?????
作者: marsaber    时间: 2009-03-23 22:10
标题: 回复 #33 一棵菠菜 的帖子
这样写本身就是乱的。
作者: yhliu    时间: 2009-03-24 11:44
楼主果然强悍,我算见识了,连DNS都可以不用。不知道你应用这个规则没有?其实你的防火墙还不完整。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2