版权声明:原创作品,谢绝转载!否则将追究法律责任。
|
其实不论从nat,包过滤,ALG,稳定性,安全性,来说,用linux做一个防火墙,是一个不错的规划,当然还有价格
Iptables防火墙原理
防火墙技术分为三种
1、包过滤,在ACL中使用ip地址或端口号进行过滤
2、ALG,应用层网关,工作类是代理服务器,linux的squid和win的ISA都是出色的ALG
3、状态化包过滤,使用ACL,通过了解连接状态来确定访问行为
iptables支持包过滤和状态化包过滤
具体防火墙技术相当深奥,不是一言两语可以说清楚
我们用一个实例来分析吧,这个需要对路由和nat要有一定了解才行
实例1:
一个企业使用linux作为网管和防火墙,如果难度再大点就加个DMZ区域
这样就要3块网卡
通过了解DMZ特性
1、不可以访问内网 2、内网和外网可以访问 3、不可以访问外网
通过这三个特性配置DMZ的网段就可以了
DMZ是不允许访问内网的,避外网通过攻破DMZ,进而攻击内网
DMZ位于网络的哪个位置?内网和外网之间
在硬件设备上就是他自动帮你实现了这些功能,在linux就需要你了解原理,然后自己手动配置,达到相同的效果
如果涉及到DMZ的话,肯定还会有状态化包过滤
好像说深了点点,我们继续刚才的课题
作为网关需要设置全局的默认网关到外面那个网卡eth1
内网我们使用eth0
内网所有主机网关指向linux的eth0的IP地址,然后在服务器打开ip转发
vim /etc/sysctl.conf
他是内存正在运行的一些参数的配置文件, 禁ping那个参数可以写到这里,每次开机读取
net.ipv4.ip_forward = 0值改成1
更新系统内核参数
sysctl -p
现在我们的IP包已经可以出到广域网了,但是广域网上的路由器会丢弃我们内网的IP地址, 所以我们要做nat
好了,开始说到iptables了
要做nat就需要用到iptables的nat表
我们是从里面到外面的包,所以要修改源IP,就叫做源NAT
红帽的官方教材上讲iptables也是用的这个图
我们要出去,就是postrouting
现在我们来配置这条命令
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.8.0/24 -j MASQUERADE
我们来讲解这条命令
iptables 是命令本身
-t 是执行表,iptables有两个表,一个是filter:过滤的表
一个是nat,就是NAT表,Network Address Translator
然后-A,-A的意思就是添加一条链
这里添加的链是POSTROUTING链,就是源NAT
-o 是出去的网卡设备,我们使用的是eth1网卡
-s 是源地址,我们设置内网的192.168.8.0/24网段
-j是动作,MASQUERADE 动态源地址转换(动态IP的情况下使用)
如果我们使用的静态外网地址,就可以这样写
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 1.1.1.1
把出去的地址都转换成1.1.1.1
好了,现在内网用户可以通过linux网关上网了
这个时候我们为了保证内网安全,我们就需要控制进来的包了
现在我们不考虑DMZ,或者是内部有服务器的问题,这样,外部进来的包,我们默认都要丢弃
比方说,你的代理:192.168.0.1 而我的pc在另外一个网段,192.168.8.88 gw192.168.8.188
这样的话就还需要一个网卡了,通过这个网卡来路由撒
为了防止外网伪装内网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
127开头的(lookback地址)
169.254开头的(WINDOWS保留地址)
先要把10.0.0.0
172.16-31.0.0 192.168.0.0 全部禁止,这几条放在最上面
然后再考虑对外要开放的端口号,最后默认策略要是DROP
变成命令就是这样
iptables -t filter -A INPUT -s 10.0.0.0/8 -j DROP
iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP iptables -t filter -A INPUT -s 172.17.0.0/16 -j DROP 省略 iptables -t filter -A INPUT -s 192.168.0.0/24 -j DROP
这样把私有网段先全部禁止了
现在外网的私有网段已经ping不通eth1网卡了
而内网192.168.8.0/24网段正常
然后我们开放一个80端口
iptables -t filter -A INPUT -p tcp -i eth1 --dport 80 -j ACCEPT
允许所有IP,当然上面禁止的私有IP不行,都可以访问eth1接口IP的80端口
然后就是最后一条,默认都DROP,INPUT就是从外网进来的
iptables -t filter -P INPUT DROP
没有匹配的包全部丢弃
现在内网也ping不通eth1网卡IP地址
但是上网没问题
外网的就OK了,现在我们来配置内网的防火墙
那个还需要做一个PREROUTING,目标NAT
为了防止内网用户攻击外网的用户,所以需要在内网做一些策略
iptables -t filter -A INPUT -i eth1 -j DROP
保存iptables规则
service iptables save
service iptables restart
###############Michael分割线#################
本文出自 “ 王乾De技术Blog[爱生活,爱学习]” 博客,谢绝转载!
本文出自 51CTO.COM技术博客
|
上一篇 RHCE课程-RH253Linux服务器架设笔记九-tcp_wra.. 下一篇 Java EE WEB工程师培训-JDBC+Servlet+JSP整合..
类别:Linux/Unix ┆ 技术圈( 1) ┆
阅读( 3191) ┆ 评论( 20) ┆ 推送到技术圈 ┆ 返回首页
相关文章
文章评论
[1楼]
鲜橙加冰
2009-05-22 17:27:10
莫非是沙发?
对了,顺便和楼主讨论个问题。PREROUTING 在我测试中无法阻断udp那种视频收看,不知道你遇到过这样的问题没
对了,顺便和楼主讨论个问题。PREROUTING 在我测试中无法阻断udp那种视频收看,不知道你遇到过这样的问题没
博主回复:
udp视频收看,没测试过,你试下禁止端口
2009-05-23 10:18:31
短消息通知评论者
[2楼]
鲜橙加冰
2009-05-23 21:28:46
他们用80端口
博主回复:
80端口?那就封那个视频网站吧
2009-05-24 09:36:33
短消息通知评论者
[3楼]
鲜橙加冰
2009-05-24 23:59:29
哈哈。。我就是那么干的。
博主回复:
恩,直接禁止域名时,iptables会自动转换成ip,呵呵~
2009-05-25 19:46:27
短消息通知评论者
[4楼]
黎仔
2009-05-28 21:07:19
有的图被水印档住重要内容了
短消息通知评论者
[5楼]
devilangel
2009-06-22 08:28:24
正在学习IPTABLES 学习了!!!
短消息通知评论者
[6楼]
sakula00544
2009-07-09 15:55:26
-o 是指一个设备名
-i 也是指一个设备名,这二个有什么区别嘛?
-i 也是指一个设备名,这二个有什么区别嘛?
短消息通知评论者
[7楼]
szsaihe
2009-07-15 18:34:46
第一次看博主的文章,很不错!
短消息通知评论者
[8楼]
chenym321
2009-09-03 21:46:41
iptables的内容有点少,好像讲师讲课的时候根本就没讲这些,没有分什么内外网
短消息通知评论者
[9楼]
Think_A
2009-10-17 13:43:26
谢谢版主提供的资料~!
短消息通知评论者
[10楼]
[匿名]51CTO游客
2009-11-16 19:48:01
-i 是 input interface -o 是 output interface
在iptables 是有明显区别的 根据数据包和iptables链条选择不同的参数-i或-o
在早期的2.4的内核里面的 ipchains 是不区分的,
在iptables 是有明显区别的 根据数据包和iptables链条选择不同的参数-i或-o
在早期的2.4的内核里面的 ipchains 是不区分的,
短消息通知评论者
[11楼]
[匿名]51CTO游客
2009-11-17 20:10:23
iptables -t filter -A INPUT -p tcp --dort 22 -j LOG --log-prefix "iptables" --log-level 5
iptabels -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
vim /etc/syslog.conf
kern.=notice /var/log/iptables
:x
/etc/init.d/iptables save
/etc/init.d/iptables restart
/etc/init.d/syslog restart
iptables 's LOG functions
iptabels -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
vim /etc/syslog.conf
kern.=notice /var/log/iptables
:x
/etc/init.d/iptables save
/etc/init.d/iptables restart
/etc/init.d/syslog restart
iptables 's LOG functions
短消息通知评论者
[12楼]
[匿名]51CTO游客
2009-11-17 20:11:23
netfilter is a kernel's architecture
iptables is a users's tools
so we calld netfiler/iptables
this is key point
iptables is a users's tools
so we calld netfiler/iptables
this is key point
短消息通知评论者
[13楼]
[匿名]51CTO游客
2009-11-17 20:13:34
input 是对所有进入本机的包进行处理的
output 是对所有从本机出去的包进行处理的
forward 是对所有局域网用户的数据包进行处理的 (所谓的经过本机)
prerouting 是专门进行dnat 和 端口的REDIRECT的
postrouting 是进行 snat 和 masquerade 的
这个 是重点,每个 chian是 是做什么的至少要说啊
output 是对所有从本机出去的包进行处理的
forward 是对所有局域网用户的数据包进行处理的 (所谓的经过本机)
prerouting 是专门进行dnat 和 端口的REDIRECT的
postrouting 是进行 snat 和 masquerade 的
这个 是重点,每个 chian是 是做什么的至少要说啊
短消息通知评论者
[14楼]
[匿名]51CTO游客
2009-11-17 20:16:55
iptables -t filter -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -i eth1 -j DROP
假设这样的两条命令给在iptables中写着,那么会产生不同的效果
即使 内网可以访问www 而外网不可以访问www
请不要忽略 iptables中的 -i 和-o的选项, 如果在2.4的 内核中 ipchains 中 您忽略这个问题,似乎还可以原谅,但是在iptables中这个 是非常重要的问题,iptables到底理解没有,就看对这两个参数的理解了,还有就是 每个 tables中的chains 是做什么的 ,这个是 netfilter、iptables的 核心内容吧
iptables -t filter -A INPUT -p tcp --dport 80 -i eth1 -j DROP
假设这样的两条命令给在iptables中写着,那么会产生不同的效果
即使 内网可以访问www 而外网不可以访问www
请不要忽略 iptables中的 -i 和-o的选项, 如果在2.4的 内核中 ipchains 中 您忽略这个问题,似乎还可以原谅,但是在iptables中这个 是非常重要的问题,iptables到底理解没有,就看对这两个参数的理解了,还有就是 每个 tables中的chains 是做什么的 ,这个是 netfilter、iptables的 核心内容吧
短消息通知评论者
[15楼]
[匿名]51CTO游客
2009-11-17 20:17:18
-i 是 input interface -o 是 output interface
在iptables 是有明显区别的 根据数据包和iptables链条选择不同的参数-i或-o
在早期的2.4的内核里面的 ipchains 是不区分的,
在iptables 是有明显区别的 根据数据包和iptables链条选择不同的参数-i或-o
在早期的2.4的内核里面的 ipchains 是不区分的,
短消息通知评论者
[16楼]
[匿名]51CTO游客
2009-11-17 20:32:41
vim /etc/sysctl.conf
ip_forward=1
sysctp -p
iptables -X
iptables -Z
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE
iptables -t filter -A FORWARD -s 192.168.3.0/24 -i eth0 -o eth1 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -m state --state established.related -j ACCEPT
iptables -t filter -P FORWARD DROP
iptables -t nat -P POSTROUTING DROP
iptables -t nat -P PREROUTINg DROP
ip_forward=1
sysctp -p
iptables -X
iptables -Z
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE
iptables -t filter -A FORWARD -s 192.168.3.0/24 -i eth0 -o eth1 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -m state --state established.related -j ACCEPT
iptables -t filter -P FORWARD DROP
iptables -t nat -P POSTROUTING DROP
iptables -t nat -P PREROUTINg DROP
短消息通知评论者
[17楼]
[匿名]51CTO游客
2009-11-17 20:41:54
i think that you really donnnt understand the netfilter/iptabes
such as ech chains functions and pots floating
and hope that you can understuand what's the really mean of the input output forward
such as ech chains functions and pots floating
and hope that you can understuand what's the really mean of the input output forward
短消息通知评论者
[18楼]
[匿名]51CTO游客
2009-11-17 20:46:45
您的 iptables 有问题的哦
我还没有见过 使用 就是用一个input 链就敢说自己有内外网段的哦
根据iptables的 数据包的流向 您所谓的 内网的数据包不可能通过input
不管是进站包 还是出站包都只会通过 filter表的 forward链条出去
还是建议您在深刻理解下 到底什么是 netfilter /iptables 和 每个链条到底是什么作用,这个非常重要,要不然您写的这些只能和网上有些人写的文章差不多,--没有真正的理解 netfilter 的核心思想
i think that you really donnnt understand the netfilter/iptabes
such as ech chains functions and pots floating
and hope that you can understuand what's the really mean of the input output forward
至今见过真正理解netfilter/iptables的 就是 台湾的 vbird 和 netman
建议您最好去瞧瞧.
否则应该不会出现您文章中的 只不过是编辑一个 input chians 就敢说自己 已经划分好了 内网 lan 和外网 wan
我还没有见过 使用 就是用一个input 链就敢说自己有内外网段的哦
根据iptables的 数据包的流向 您所谓的 内网的数据包不可能通过input
不管是进站包 还是出站包都只会通过 filter表的 forward链条出去
还是建议您在深刻理解下 到底什么是 netfilter /iptables 和 每个链条到底是什么作用,这个非常重要,要不然您写的这些只能和网上有些人写的文章差不多,--没有真正的理解 netfilter 的核心思想
i think that you really donnnt understand the netfilter/iptabes
such as ech chains functions and pots floating
and hope that you can understuand what's the really mean of the input output forward
至今见过真正理解netfilter/iptables的 就是 台湾的 vbird 和 netman
建议您最好去瞧瞧.
否则应该不会出现您文章中的 只不过是编辑一个 input chians 就敢说自己 已经划分好了 内网 lan 和外网 wan
短消息通知评论者
[19楼]
[匿名]51CTO游客
2009-11-17 20:49:35
* filter:主要跟 Linux 本机有关,这个是预设的 table 喔!
o INPUT:主要与封包想要进入我们 Linux 本机有关;
o OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
o FORWARD:这个咚咚与 Linux 本机比较没有关系,他可以封包『转递』到后端的计算机中,与 nat 这个 table 相关性很高。
* nat:主要跟 NAT 主机的设定有关
o PREROUTING:在进行路由判断之前所要进行的规则
o POSTROUTING:在进行路由判断之后所要进行的规则
o OUTPUT:与发送出去的封包有关
o INPUT:主要与封包想要进入我们 Linux 本机有关;
o OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
o FORWARD:这个咚咚与 Linux 本机比较没有关系,他可以封包『转递』到后端的计算机中,与 nat 这个 table 相关性很高。
* nat:主要跟 NAT 主机的设定有关
o PREROUTING:在进行路由判断之前所要进行的规则
o POSTROUTING:在进行路由判断之后所要进行的规则
o OUTPUT:与发送出去的封包有关
短消息通知评论者
[20楼]
[匿名]51CTO游客
2009-11-17 20:57:24
iptables -t filter -A INPUT -p tcp -i eth1 --dport 80 -j ACCEPT
这条rulers您认为这样写怎么样呢
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -m state --state established,related -j ACCEPT
这条rulers您认为这样写怎么样呢
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -m state --state established,related -j ACCEPT