(原创)这个iptables用起来很不错!大家分享

发表于:2007-07-04来源:作者:点击数: 标签:
我想下面的脚本很容易看懂!当然如果没看懂提出来,我很乐意解答!当然,也很希望你们可以指出错误!很感谢大家的指导,特别是platinum! 环境:redhat9加载了stringtime等模块,加载方法参照 http://bbs.chinaunix.net/forum/viewtopic.php?t=525493 etho接

我想下面的脚本很容易看懂!当然 如果没看懂提出来,我很乐意解答!当然,也很希 望 你们可以指出错误 !很感谢大家的指导 ,特别是platinum!

环境:redhat9 加载了string time等模块,加载方法参照 http://bbs.chinaunix.net/forum/viewtopic.php?t=525493

etho 接外网──ppp0
eth1 接内网──192.168.0.0/24

[color=blue:34c560ecec]
#!/bin/sh
#
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
###########################INPUT键###################################
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT
#允许内网samba,smtp,pop3,连接
iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT
#允许dns连接
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
#允许外网vpn连接
iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃
iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃
iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "
iptables -A INPUT -p icmp -j DROP
#禁止icmp通信-ping 不通
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE
#内网转发
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
#防止SYN攻击 轻量
#######################FORWARD链###########################
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT
#允许 vpn客户走vpn网络连接外网
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
#星期一到星期六的8:00-12:30禁止qq通信
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
#星期一到星期六的8:00-12:30禁止qq通信
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
#星期一到星期六的13:30-20:30禁止QQ通信
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
#星期一到星期六的8:00-12:30禁止qq网页
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
#星期一到星期六的13:30-20:30禁止QQ网页
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROP
iptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院" -j DROP
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROP
iptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP
#禁止ay2000.net,宽频影院,色情,广告网页连接 !但中文 不是很理想
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
#禁止BT连接
iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP
#只允许每组ip同时15个80端口转发
#######################################################################
sysctl -w net.ipv4.ip_forward=1 &>/dev/null
#打开转发
#######################################################################
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null
#打开 syncookie (轻量级预防 DOS 攻击)
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null
#设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)
sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null
#设置支持最大连接树为 30W(这个根据你的内存和 iptables 版本来,每个 connection 需要 300 多个字节)
#######################################################################
iptables -I INPUT -s 192.168.0.50 -j ACCEPT
iptables -I FORWARD -s 192.168.0.50 -j ACCEPT
#192.168.0.50是我的机子,全部放行!
############################完#########################################
###########################枫影-乡下猫#################################
[/color:34c560ecec]

 wind521 回复于:2005-08-30 11:31:54
不错,网友可以拿下去自己去实验一下

 leenfm 回复于:2005-08-30 11:46:12
好东西````

 jiecho 回复于:2005-08-30 11:55:15
[color=blue:e4d8fe7a2f]iptables -I INPUT -s 192.168.0.50 -j ACCEPT
iptables -I FORWARD -s 192.168.0.50 -j ACCEPT
#192.168.0.50是我的机子,全部放行! [/color:e4d8fe7a2f]


鄙视你! :D  :D  :D  :D  :D  :D

 枫影谁用了 回复于:2005-08-30 12:03:31
[quote:5c5ce356f5="jiecho"]


鄙视你! :D  :D  :D  :D  :D  :D[/quote:5c5ce356f5]

 :D  :D

 platinum 回复于:2005-08-30 12:04:12
点评一下

[b:904eb6397f]先说几个创意很好的地方[/b:904eb6397f]
[code:1:904eb6397f]
1、iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
[/code:1:904eb6397f]
这种思路不错,运用灵活,且多个模块一起使用,用 -p udp --dport 53 做数据分敛,可以降低由于 string 模块造成的效率低下问题,可见是认真考虑过的

2、文中用到了 time、ipp2p、string、connlimit 等模块,大大扩大了 iptables 的功能,不错!

3、利用了 sysctl 实现了一些修改 TCP/IP 的内核参数,实现一些自己的目的,不错,但要注意内存是否够大


[b:904eb6397f]但也有一些不足,说一下[/b:904eb6397f]
[code:1:904eb6397f]
1、insmod ipt_MASQUERADE 
[/code:1:904eb6397f]
如果用 insmod 加载模块,必须制定模块路径以及模块全名,否则要用 modprobe

[code:1:904eb6397f]
2、modprobe ip_conntrack_ftp
[/code:1:904eb6397f]
这个是在本机上开 ftp 服务要用到的,如果做 nat 还应该加载 ip_nat_ftp

[code:1:904eb6397f]
3、iptables -A INPUT -i eth1 -p tcp -m multiport --dports 
[/code:1:904eb6397f]
443,139,80,21,53,110,25 -j ACCEPT
DNS 服务是 UDP/53


[code:1:904eb6397f]
4、iptables -F FORWARD
[/code:1:904eb6397f]
这个其实没必要了,因为在 script 一开始的时候就已经有了 iptables -F,意思是清空 filter 表中所有链的规则

5、filter 表中 FORWARD 链的默认规则问题
我没有看到 FORWARD 表中有设置默认规则的迹象,也许是你一时倏忽了

6、关于一些限制的阀值问题
有的值我感觉过小,有可能会造成网络不通的现象,阀值其实是个双刃剑,这个需要多测试才知道


[b:904eb6397f]说一下需要改进的地方[/b:904eb6397f]
文中有大量这样的代码
[code:1:904eb6397f]
iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
[/code:1:904eb6397f]
其实完全可以用 -N 建立一个新链,把所有规定时间内的 UDP/53 都转过去,然后统一处理,这样相对效率会高一些



总的来说还是很不错的,在很短的时间内能把 iptables 学习到这种程度可见是下了一番苦心
继续努力哦 :D

 枫影谁用了 回复于:2005-08-30 12:07:17
[quote:c10d69476e="platinum"]这个其实没必要了,因为在 script 一开始的时候就已经有了 iptables -F,意思是清空 filter 表中所有链的规则

5、filter 表中 FORWARD 链的默认规则问题
我没有看到 FORWARD 表中有设置默认规则的迹象,也许是你..........[/quote:c10d69476e]

谢谢platinum的指导!我继续努力!
上面的提到问题,请看这个贴http://bbs.chinaunix.net/forum/viewtopic.php?t=601964
我出现了这个问题!所以我才加载!当然,请你指教

 ioly 回复于:2005-08-30 12:46:27
长见识来了! :arrow:  :arrow:

 枫影谁用了 回复于:2005-08-30 13:44:44
已经改正了白金兄提出的几个错误 ! :mrgreen:

 platinum 回复于:2005-08-30 14:18:58
http://bbs.chinaunix.net/forum/viewtopic.php?t=601993&show_type=
这样做可不好。。。。

 ipaddr 回复于:2005-08-30 14:38:17
学习,

 枫影谁用了 回复于:2005-08-30 15:14:10
[quote:a4642e35c1="platinum"]http://bbs.chinaunix.net/forum/viewtopic.php?t=601993&show_type=
这样做可不好。。。。[/quote:a4642e35c1]

一开始发错地方!以为你是那个版 块的!后来发现你不是那个版的版主,可是我我不能删除那个贴!只能改!所以就。。。。 :em10:

我给那个版主发短信了,麻烦他删除 那个贴!

 别爱我我没钱 回复于:2005-08-30 16:54:54
学习ing

 qufo 回复于:2005-08-30 17:06:26
朋友的贴子,顶起来,好贴。

 枫影谁用了 回复于:2005-08-30 18:33:53
[quote:0a64941d8c="qufo"]朋友的贴子,顶起来,好贴。[/quote:0a64941d8c]

嘿嘿!飞碟!问你个问题,你的bsd用这个脚本跑起来会不会很吃力?

 platinum 回复于:2005-08-30 19:33:05
[quote:5470ee6704="枫影谁用了"]

嘿嘿!飞碟!问你个问题,你的bsd用这个脚本跑起来会不会很吃力?[/quote:5470ee6704]
BSD 不能运行这个 script,BSD 没有 iptables 命令,用的是 ipfw 等

 ycfei 回复于:2005-08-31 03:06:14
好贴。。

 枫影谁用了 回复于:2005-08-31 07:58:24
[quote:80627ce9ad="platinum"]
BSD 不能运行这个 script,BSD 没有 iptables 命令,用的是 ipfw 等[/quote:80627ce9ad] :em10: 
我真笨 :em02:

 thatday 回复于:2005-08-31 08:46:18
好,疯猫,我也帮你顶!
我也要努力学习,呵呵。。

 枫影谁用了 回复于:2005-08-31 08:52:08
[quote:babfad928a="thatday"]好,疯猫,我也帮你顶!
我也要努力学习,呵呵。。[/quote:babfad928a]

你小子强啊!到现在才发了两个贴?怎么不把处女贴发到这里来!!! :em10:

 yzhkp 回复于:2005-09-05 16:23:39
请问,您的iptables真的吧qq给封闭了么???

 枫影谁用了 回复于:2005-09-05 17:10:18
[quote:5458d505e4="yzhkp"]请问,您的iptables真的吧qq给封闭了么???[/quote:5458d505e4]


是的!(但不是很全面)很多封的方法!可以抓包!QQ

 platinum 回复于:2005-09-05 17:15:31
[quote:20e1f8d7bd="枫影谁用了"]


是的!(但不是很全面)很多封的方法!可以抓包!QQ[/quote:20e1f8d7bd]
只能封一部分,很片面很少的一部分

 枫影谁用了 回复于:2005-09-05 17:26:56
[quote:1479735209="platinum"]
只能封一部分,很片面很少的一部分[/quote:1479735209]


嗯!我这边收集了一些qq服务器的ip!起码现在公司 是上不了qq ,不过用代理还是可以上!懒得去搞! :em17:

 platinum 回复于:2005-09-05 17:49:30
[quote:123a5d7a90="枫影谁用了"]


嗯!我这边收集了一些qq服务器的ip!起码现在公司 是上不了qq ,不过用代理还是可以上!懒得去搞! :em17:[/quote:123a5d7a90]
那样是不行的
1、你把服务器地址都封了,用户可以用代理
2、你把端口都封了,用户可以用 TCP/80 的代理

 sway2004009 回复于:2005-09-05 20:46:09
支持。。。
谢谢,收下了。

 sway2004009 回复于:2005-09-05 22:01:13
我有好多功能都没有,比如ipp2p, connlimit都好像不支持。
我的iptable 是1.2.8的。
不知道楼主用的是什么版本的。

 yjyjyj608 回复于:2005-09-06 10:17:39
不错,好东西,收藏

 jiusheng88 回复于:2005-09-06 10:58:02
都是高手

 lijietz 回复于:2005-09-06 11:07:11
为啥要封qq?!
这种公司管理太落后了.

 yzhkp 回复于:2005-09-06 15:05:20
原来都是封ip啊. 北斗quicklinux那里提供了一种方法:不知道咋地~~~
http://www.quicklinux.net/index.php?categ=14&parent=12&p=downloads&area=1

 wchun 回复于:2005-09-10 15:25:36
有个问题要问楼主。
我在web服务器上使用了connlimit限制了--connlimit-above 1
为什么在实际应用中打开网页很慢,很多图片都显示不出来。
难道不能用一个连接来打开web页面?

 liusha2005 回复于:2005-09-10 18:01:16
学习

 bladefenix 回复于:2005-09-10 20:40:40
留名。。 方便以后看

 joecen 回复于:2005-09-10 22:03:28
[quote:00a6d79396="wchun"]有个问题要问楼主。
我在web服务器上使用了connlimit限制了--connlimit-above 1
为什么在实际应用中打开网页很慢,很多图片都显示不出来。
难道不能用一个连接来打开web页面?[/quote:00a6d79396]

其实你自己可以用netstat测试一下,一般你用IE打开一个网页会有多少个连接出现。

 枫影谁用了 回复于:2005-09-10 22:22:03
[quote:149ea52c22="wchun"]有个问题要问楼主。
我在web服务器上使用了connlimit限制了--connlimit-above 1
为什么在实际应用中打开网页很慢,很多图片都显示不出来。
难道不能用一个连接来打开web页面?[/quote:149ea52c22]

你的环境怎么样?说一下,我的不会!

 枫影谁用了 回复于:2005-09-10 22:24:29
[quote:977f042977="sway2004009"]我有好多功能都没有,比如ipp2p, connlimit都好像不支持。
我的iptable 是1.2.8的。
不知道楼主用的是什么版本的。[/quote:977f042977]

可以的!我在r9 fc3 as3 as4都可以成功的运行!但是在2.6内核下不能打上string!
其它可以!iptables可以编译成1.3.0以上!

不知道 你具体遇到那方面的问题?

 枫影谁用了 回复于:2005-09-10 22:28:05
[quote:773f129d97="platinum"]
那样是不行的
1、你把服务器地址都封了,用户可以用代理
2、你把端口都封了,用户可以用 TCP/80 的代理[/quote:773f129d97]


大大,为啥要管得这么死!你真把qq全封死了,人家就用skype,唉,[color=red:773f129d97][size=24:773f129d97][b:773f129d97]退一步海阔天空[/b:773f129d97][/size:773f129d97][/color:773f129d97]

 attiseve 回复于:2005-09-10 22:49:11
请问:
time、ipp2p、string、connlimit
这些模块怎么加载?

 枫影谁用了 回复于:2005-09-10 22:52:35
[quote:55784951ce="attiseve"]请问:
time、ipp2p、string、connlimit
这些模块怎么加载?[/quote:55784951ce]


请看主贴上给的连接!

还可以用CU搜索的方法查找版主platinum 
写的教程,非常棒,如果你在加载过程有问题不妨提出来!

 attiseve 回复于:2005-09-10 22:54:59
[quote:22c9da8144="枫影谁用了"][/quote:22c9da8144]
有些问题不是技术能解决的。关键靠管理和引导。

 枫影谁用了 回复于:2005-09-10 23:11:35
[quote:6032ba4159="attiseve"]
有些问题不是技术能解决的。关键靠管理和引导。[/quote:6032ba4159]

啥意思?什么管理和引导?

 kentel 回复于:2005-09-11 09:17:52
好帖子,长见识了,顺便问一下,你使用的 ip2p对常见的应用能控制么,比如说emule(edonkey),bt等,还有就是现在的bt0.59使用了dht

 txkss 回复于:2005-09-11 09:43:12
我搞不明白为什么要加载这几个模块啊
默认它们不加载吗?
另外就是这几个模块的作用是什么啊
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

谢谢

 枫影谁用了 回复于:2005-09-11 10:13:36
[quote:4a51842122="txkss"]我搞不明白为什么要加载这几个模块啊
默认它们不加载吗?
另外就是这几个模块的作用是什么啊
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

谢谢[/quote:4a51842122]


要内核支持,如果这些模块你在编译内核时选择的是M的话,就要加载,如果你编译进内核,那一般就不用加载了,直接可以用!
[color=red:4a51842122]ipt_MASQUERADE[/color:4a51842122]就是起“数据包伪装”的功能的模块。
[color=red:4a51842122]modprobe ip_conntrack_ftp
modprobe ip_nat_ftp[/color:4a51842122]
加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT

不知道 我这样解释你可不可以明白
[color=orange:4a51842122]关于有状态功能,重点在于后三个模块:
ip_conntrack模块能够使防火墙具有连接跟踪能力。(通过输入 "cat /proc/net/ip_conntrack" 可以查看您的机器参与的活动网络连接。)

加载这个模块后,基本上所有有状态的返回包都能识别,例:telnet,http,QQ,mail,ping,dns等。

实际上,加载了ip_conntrack模块,ftp已经能够登陆,并能使用象pwd,cd等命令,但当使用ls命令显示文件内容时,就会timeout。原因在于

显示文件列表的包防火墙无法识别,就会进入默认策略----禁止,此时就需要加载ip_conntrack_ftp模块。

ip_conntrack_ftp模块使防火墙能够识别FTP某类特殊的返回包。

如果防火墙上对所有出去的返回包作了伪装,就需要加载ip_nat_ftp模块。
ip_nat_ftp模块在出去的包作了伪装以后,必须加载,否则防火墙无法知道返回的包该转发到哪里。[/color:4a51842122]

 txkss 回复于:2005-09-11 11:14:04
谢谢老哥 
非常感谢
我在接着往下看你写的规则呢

 lixu 回复于:2005-09-11 19:31:14
[code:1:166d511dfa]
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP 
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP 
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP 
[/code:1:166d511dfa]

请问楼主,你这几句封bt的规则管用吗?我也想封掉bt~~

 welldrong 回复于:2005-09-12 09:45:30
有效,效果还不错滴说~~~

 xhc 回复于:2005-09-12 15:45:37
有封DUDU 下载的吗 
我的网终架构和楼主一样
以下是我的配置
iptables -F 
iptables -X 
iptables -t nat -F 
iptables -t nat -X 
iptables -P INPUT ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -t nat -P PREROUTING ACCEPT 
iptables -t nat -P OUTPUT ACCEPT 
iptables -t nat -P POSTROUTING ACCEPT 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.200
iptables -t nat -A PREROUTING  -p tcp --dport 22 -i ppp0 -j ACCEPT 
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 3389 -j DNAT --to 192.168.0.200
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP 
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP 
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP 
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -j DROP 
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "kele8" -j DROP 
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
/etc/rc.d/init.d/iptables save 
/etc/rc.d/init.d/iptables start

 xhc 回复于:2005-09-12 15:46:38
随便说一样我的iptables 是1.3.3

原文转自:http://www.ltesting.net