ChinaUnix首页 > 精华文章 > 网络安全 > 正文

[精彩] 请问版主如何利用iptables实现定时功能


http://www.chinaunix.net 作者:qpbvd  发表于:2004-04-07 00:40:39
发表评论】 【查看原文】 【网络安全讨论区】【关闭

如何利用iptables实现定时功能
这个问题我已经问了好几天了,大侠们可能是认为太简单太小儿科的问题, 对我来说却是很难的, 我找了很多文章, 由于英文水平太差都看不明白,而中文的东西以找不到相关的内容.
烦请大侠们帮帮我
万分感谢



 billcxj 回复于:2003-10-27 13:31:43

关于定时功能的防火墙,
windows 下的  isa   倒可以,在一般的中小公司可以用,


 qpbvd 回复于:2003-10-27 15:31:38

真怪了我用的是linux ,Windows下的软件能用吗


 t920 回复于:2003-10-27 17:03:26

首先需要说明的是,你所需要的time参数,在发行版的iptables里是没有的,只有在extensions里才有。这些extensions由不同的开发者提供,而time patch由Fabrice MARIE<fabrice@netfilter.org>;
提供,估计你要向他所要该patch或去国外的网站搜一搜才能得到。

如果安装time patch成功就可以使用了。方法如下:
# iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT

# iptables --list 
Chain INPUT (policy ACCEPT)
target     prot opt source           destination
ACCEPT     all  --  anywhere         anywhere        TIME from 8:0 to 18:0 on Mon,Tue,Wed,Thu,Fri 


Supported options for the time match are :


--timestart value
->; minimum HH:MM

--timestop value
->; maximum HH:MM

--days listofdays
->; a list of days to apply, from (case sensitive) 

Mon 
Tue 
Wed 
Thu 
Fri 
Sat 
Sun 

hohoho应该能看懂吧!!


 qpbvd 回复于:2003-10-27 18:28:50

多谢了,看是看懂了,但实现起来却很不容易


 qpbvd 回复于:2003-10-27 22:17:34

本人在最新版的iptables 的extensions目录下看到一个libipt_time.c 不知能否自己加工成可用的模块
望高人指点


 t920 回复于:2003-10-27 22:48:52

你可以看一下这篇文章,不过我也没有按照上面的方法做过,所以不知道行不行,你要是配成功了,别忘了把详细的步骤贴出来。
hohohoho然后让斑竹加个原创精华!!!

×××××××iptables扩展功能的增加×××××××××××




--------------------------------------------------------------------------------

iptables有许多很有实际用途的功能是未被现在的内核支持的,其中我最感兴趣的就是iplimit,可以用来限定同一IP(或同一段IP)同时连接服务器(或某端口)的数目。 

经过许多天的试验,终于搞定。 

服务器环境:redhat7.2 

1. 从www.redhat.com下载并安装最新的内核源码 

kenrel-source-2.4.20-13.7-i386.rpm。 
rpm -Uvh kenrel-source-2.4.20-13.7-i386.rpm 

2. 进入/usr/include目录,执行以下操作: 
mv asm asm_old 
mv linux linux_old 
mv scsi scsi_old 
ln -s /usr/src/linux-2.4/include/asm ./asm 
ln -s /usr/src/linux-2.4/include/linux ./linux 
ln -s /usr/src/linux-2.4/include/scsi ./scsi 

3. 从www.netfilter.org下载patch-o-matic-20030107.tar.tar并解压到 

/usr/local/patch-o-matic-20030107,执行以下操作: 
export KERNEL_DIR="/usr/src/linux-2.4" 
./runme extra 
按提示只需要安装自己想要的那些扩展功能补丁,我就只选择了iplimit。 

4. 返回/usr/src/linux-2.4,执行make mrproper,然后用make menuconfig设置内核选项,依次进入"Networking options"->;"IP: Netfilter Configuration",选择您刚才加入的扩展功能,在这里我只要把iplimit选定成M模式就可以了。然后: 
make dep 
make bzImage 
make install 
make modules 
make modules_install 
最后再用新内核重启系统。 
5. 到www.netfilter.org下载最新的iptables源代码包,解压到 

/usr/local/iptables-1.2.8,执行以下操作: 
make KERNLE_DIR="/usr/src/linux-2.4" 
make install KERNLE_DIR="/usr/src/linux-2.4" 
make install-devel 

安装完成,现在您可以输入命令检查一下你要的功能是否已经可以使用了: 
iptables -A INPUT -p tcp --dport 22 --syn -m iplimit --iplimit-above 3 -j REJECT 
这样,从同一个IP到服务器的SSH的连接就只不能超过3个了。 这个功能如果应用在网站上限制某些人下载网站内容是很有帮助的,比apache加载连接数限制模块的方法有效得多。 

(注意:我在安装时是先下载的相应内核的rpm安装之后再进行源码包安装的,因为在安装新内核的过程中可能需要其它的支持包需要安装,利用rpm的依赖性检查将这些软件显示出来并安装,可能会减少直接用源码编译安装遇到的问题,纯属个人意见。)




http://www.fengnet.com/showart.asp?art_id=387&cat_id=9


 t920 回复于:2003-10-29 20:41:25

up一下,不知道楼主的问题解决了没有,如果成功了贴出来看看。
hohohoho
偶比较懒,等着save as呢!!!!


 qpbvd 回复于:2003-11-01 16:18:26

关于 iptables ----time  参数添加的过程实录(原创)

-------------------------------------------------------------------------------- 

iptables  中有一个未直接包含的重要参数 time ,利用这个参数我们就可以按需要完成防火墙中需要定时的各种规则的配置。虽然有时我们也可以利用cron来完成相关的功能,但仅就防火墙的配置而言,time参数的利用会带来极大的便利。 

在成功之前经历了多次的失败,虽如此却使自己得到了提高。 
由于公开发布的linux内核文件中,有关iptables中的各种参数里并不包含time 参数,必须通过内核升级的方式打上这个补丁,因此工作前要下载相关的文件。
http://www.netfilter.org
以root登录

第一次实验的系统配置如下

red flag 4.0 桌面版
内核是kernel-2.4.20
iptables 版本是 iptables-1.2.7a
本人下载了相关的文件
1.  iptables-1.2.8.tar.bz2
2.  patch-o-matic-20030912.tar.bz2
进入下载文件所在目录,解压后开始升级
#cd patch-o-matic
里边有几个文件及好些个文件夹,每个文件夹中包含了若干个不同功能的iptables功能模块文件,其中所需的time模块在base文件下
打开README文件,里边提示了简捷的安装示例,运行命令如下:
KERNEL_DIR=/usr/src/linux-2.4  ./runme base

 “/usr/src/linux-2.4  是本机系统内核文件所在目录”
命令运行后会出现一个模块选择界面,初次使用的人会摸不着头脑的,大致如下:

-----------------------------------------------------------
本区域中写出了相着的模块名、功能及语法示例
。。。。。。。。
。。。。。。。。
。。。。。。。。
。。。。。。。。
------------------------------------------------------------
本区域给出各种选项:
其中选项的功能是选择下一个模块,Y是确定Q是退出
Y/ N/ R/.........../ Q/ ?/_

具体方法就是首先看看当前的模块是否是你需要的,如果不是就按N键后回车,继续显示下一模块的相关信息。有意思的是time模块居然是最后一个,当出现了time模块后,将里边的相关语法示例抄录下来以备应用。
随后按Y键表示安装这一模块,最后按Q退出。

下一步是重新编译内核
进入到内核文件所在目录/usr/src/linux-2.4,执行如下命令
make mrproper (这一步起什么作用本人也不清楚,也是照着抄来的)
make menuconfig  
由于我在是kde下工作,所以这个命令有变化
make xconfig 
设置内核选项,
进入Networking options
打开IP: Netfilter Configuration 
你会发现里边增加了time选项,我直接选了Y 将time模块编入内核,这样就用不着在实际使用时modprobe time了选好后保存退出。 
make dep 
make bzImage 
编译失败 :cry: 

。。。

重装系统,仍是在这一步失败。利用同一系统在不同另外两台机器上也是在这一步失败。

第二次实验的系统配置如下

Red Hat 9.0 
内核是kernel-2.4.20
iptables 版本是 iptables-1.2.7a
本人下载了相关的文件
1.  iptables-1.2.8.tar.bz2
2.  patch-o-matic-20030912.tar.bz2
在不同的机器上仍是在
bzImage
这一步失败。 :cry:  :cry: 
。。。。
第三次实验的系统配置如下

Debian 3.0
内核是kernel-2.2.20
iptables 版本是 iptables-1.2.6a
本人下载了相关的文件
1.  iptables-1.2.8.tar.bz2
2.  patch-o-matic-20030912.tar.bz2
3.  kernle-source-2.4.21-5.686.tar.bg
首先在线对内内核升级
apt-get install kernle-image-2.4.21-5-686
升级完成后重起机器
进入
patch-o-matic目录
KERNEL_DIR=内核文件所在目录  ./runme base
按照实验一的步骤装入相关模块后,退出
开始编译内核
进入内核文件所在目录
make mrproper 
make xconfig     或  make menuconfig
make dep
make bzImage
make install
 :P 令人担心的事没有出现,一路顺风
下边是装入模块文件
make modules
make modules_install

最后升级iptables
f进入下载的并解压的iptables文件目录
make KERNLE_DIR=内核文件所在目录 
make install KERNLE_DIR=内核文件所在目录 
make install-devel  

最后reboot
检验
iptabls -A INPUT -m time --timestart 8:00 --timestop 12:00 --days su -j ACCEPT

没有出现错误提示
iptables -L 看到了time的相关记录

希望此文能对有此需要的朋友一点帮助,同时感谢在此实验过程中提供帮助的朋友。


 t920 回复于:2003-11-01 17:15:38

终于可以save as啦!!!


hohohohohoho


 YeLLoW 回复于:2003-11-04 12:21:32

感谢!!


 nikle 回复于:2003-11-04 12:27:47

你也可以利用cron 来和iptables结合使用,将iptables 的规则写成一可执行文件,用cron来调用。


 qpbvd 回复于:2003-11-04 21:21:04

利用cron 来和iptables结合使用,将iptables 的规则写成一可执行文件,用cron来调用!
没错,但在实际使用中往往是很麻烦的假如有几个不同的时段,应用不同的规则,你就会发现妙处了。


 neatcat 回复于:2003-11-05 09:59:57

厉害。


 cart 回复于:2004-04-07 00:40:39

#!/bin/sh
while [ 1 ] ; do
hours="`date +%H`"
minutes="`date +%M`"
                if [ "$minutes" -eq "30" -a  "$hours" -eq "8" ] || [ "$minutes" -eq "00" -a "$hours" -eq "13" ]
                then
                {
                echo "time is working"
                /etc/rc.d/Rhd.day.pub
                sleep 7200
                }
                else :
                        {
                        if [ "$minutes" -eq "00" -a "$hours" -eq "17" ] || [ "$minutes" -eq "00" -a "$hours" -eq "12" ]
                then
                {
                echo "time is resting"
                /etc/rc.d/Rhd.night.pub
                sleep 3000
                }
                        else :
                        sleep 20
                        echo "happy time"
                        fi
                        }
                fi
done
从早上上班到晚上下班的时间不可以上qq,晚上可以上,我们老板要求的。
我好烦哦。




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=188675
转载请注明作者名及原文出处