大家都知道,防火墙技术的几大类型,不外是数据包过滤和ip过滤+ids……。WINDOWS下的东东,相必大家都早已熟悉,比如NORDON和我们的天网,以及各大安全公司的自家产品!相对来说free的LINUX世界,这些东西大家了解都比较少,SO今天慕容就拿"无辜"的ipchains来 诠释ing!
防火墙和ids系统的大多特征,不外是规则的定义。linux中,允许一个数据包进入/禁止进入系统,都决定于规则是否允许。其实ipchains也不外如so 网络编程和网络协议的实现都离不开tcp和udp,这里tcp/ip和udp的图形mod我就不画出来了,大家自己都最好看看(推荐tcp/ip的三卷)linux中,执行数据关检验工作的工具被叫做ipchians(其实就是将ip和数据关的英文复数形式缩写在一起的),相信大家在默认安装linux时候都装了此工具,如果没有,可以到http://www.rustcorp.com/ipchians下去down,或者干脆找google的麻烦啦
一:编译和安装
#所载目录/usr/local/src中, 汗,现在的ipchians版本不知道是多少了,我的linux比较old,拿redhat6.0开刀的,大家最好用新的
[root@swapbox src]#tar -xvzf ipchians-1.3.9.tar.gz
#cd ipchians-1.3.9
#make;make install
……………………详细不再叙述,老套ing
二:数据校验过程图
输入数据 |-------| 是 | | |------------- | 否 |--------| |---| |---|
- ------------|合法吗?|-------->|数据关校验 |------>|判断是否真实数据|----->|转发数据关|--->|出关|-->|传输|
|-------| |<规则1><规则2>.| | ------------| |<规则1,2,>| |----| |---|
|
| 是
|----|
|执行 |
|----|
三:操作
参数
---------------------------------------------------------------------------------------------
-A 被选中数据关末尾添加一个/多个规则。如加的规则适合多个ip/port的组合,许把这些新规则添加到每个种组合
-D 对应上面参数,删除一个/多个规则。
-R 被选中数据关中转换一个规则。如源/目的地址名匹配多个数据项,替换无效,ipchians将会返回一个出错信息。
-I 给定规则编号中,插入规则
-L 列出数据关中,已经设置好的全部规则
-F 类似-D参数,清空被选中数据关已经设置好的规则
-Z 对ipchians对计数器清0
-N 建立一个新的数据关
-X 删除一个数据关
-P 某指定的数据关设置为缺省的检验状态
---------------------------------------------------------------------------------------------
参数关系
--------------------------------------------------------------------------------------------
Chian ipchian程序的一个执行副本将要对之进行控制的数据关名字,缺省下:输入数据关,转发和输出数据关
Rulespec 规则定义,
Rulenum 准备对之进行设置的规则的编号(假设该规则号已经存在)
Target 如果系统kernel发现一个数据包匹配了本数据关中某个规则,将安装此处定义采取行动。
常用target有:accept,reject,deny(其中deny命令比较温和,拒绝包的同时,还象发信方返回一个icmp信息,嘿嘿)
Options 可用在每一个规则中的附加可选参数
----------------------------------------------------------------------------------------------
例子:
[roor@swapbox]#ipchian -A chian rulespec options
[roor@swapbox]#ipchian -D chian rulespec options
[roor@swapbox]#ipchian -P chian target options
...................
四:规则定义
rule specification -------->缩写rulespec 是由一系列彼此独立的命令行参数组成的,如下:
-p protocal 定义本规则将对哪些类型的ip数据包起作用。包括/etc/protocols文件中的协议,还可使用数字值来代表那些没有/etc/protocols
文件里列出的协议。如在protocol前加一个(!)作前缀,就表示"非"。如"-p !icmp"就是代表"除icmp之外的所有协议"
-s source/mask port 定义本规则将匹配什么样的源ip地址。例如:"-is 192.168.42.0/24 1024:65535"定义192.168.42.0网络中
任何主机的1024到65535范围内的端口。同样前加(!)都不表示"非"。例如:"-s !192.168.42.7"
--source-port port 在没指定ip地址情况下定义一个端口(端口范围)port1:port2 ----下限:上限。
比如:"--source-port 0:1023"
-d destination/mask port 与-s参数选项的作用完全一样,只是本参数用来定义目的ip地址而非源地址。
--destination-port port 与--source-port参数完全一样,用来定义目的端口而非源端口
--icmp-type typename 对icmp数据包设置一个规则。例如:"ipchains -h icmp"即可看到一个各种类型的清单。
-j target 定义规则匹配时将要采取的行动为target,比如,accept,deny等
-i interface 定义此规则将对哪一个接口设备起作用,比如eth0,eth1等,"-i !ppp1"
-f 设置规则作用于任何数据包分段,因为不可能每个分段都包含ip分段头信息,so分段ing!可联合i来使用,比如,我们准备拒绝除
eth0外的所有设备的数据分段,"!-f -i eth0 -j ALLOW"
--------------------------------------------------------------
附加可选参数(linux下什么都好,就是tmmd的参数和命令太多,还是GUI的世界快乐)
-b 设置本规则起双向作用
-v 版本啦
-n 给出数字方式输出,普通模式下,列出所有规则/使用-v来改变规则都会十所有ip地址名字被解析。
-l kernel内记录所有匹配规则的数据包
-x 使用-l操作打印规则数字。默认情况下,精确到最接近1000或者1000000
-y 只匹配syn的数据包,ack或者FIN位被设置的数据包不在考虑范围内。tcp表中的syn位是用来初始化一个连接的。
五:应用事例
1.使来自192.168.1.8的连接被丢弃,但允许从本地连接,
[roor@swapbox]#ipchian -A input tcp -s 192.168.1.8 -j DENY -Y
2.阻断任何对8080端口的连接,并记录所有尝试连接,
[roor@swapbox]#ipchian -A input -p tcp --destination-port 8080 -j DENY -l
3.除端口123外任何来自swap.feelids.com的所有数据包。许2次匹配
[roor@swapbox]#ipchian -A input -p tcp -s swap.feelids.com 123 -j ACCEPT
[roor@swapbox]#ipchian -A input -p tcp -s swap.feelids.com -j DENY
六:安全对策/解决方案
ipchains的包过滤技术有一些很不错的功能,比如,日常所碰到的"死亡之ping"或者其他包轰炸等,而且可过滤掉本网络内不需要的服务!
过滤ping
[roor@swapbox]#ipchian -A input -p icmp -j DENY -f
过滤服务,比如:portmapper(111的port),telnet(23),ftp(21),比较"流氓"的finger(79),auth身份验证(113),x-windows(6000-6010)等
hoho,好象东东太多了,so,拿脚本来实现吧
可用vi ipchains-filter.sh
或者emacs ipchians-filer.sh 来实现
#!/bin/sh
# firewall for ppp0 on tcp ports filter 111 123 23 21 79 113 and 6000-6010
#deny any incoming icmp echo-reply packets
#get loged, chmod 0755 ipchains-filter.sh | ipchains-filter.sh a+x ipchains-filter.sh &./ipchians-filter.sh
#use,It's my soal, script baby.........i love you
IPC=/sbin/ipchians
$IPC -F input
$IPC -A input -p tcp --destination-port 111 -j DENY -l -i ppp0
$IPC -A input -p tcp -s swap.feelids.com 123 --destination-port 123 -j ALLOW -l -i ppp0
$IPC -A input -p tcp --destination-port 123 -j DENY -l -i ppp0
$IPC -A input -p tcp --destination-port 23 -j DENY -l -i ppp0
$IPC -A input -p tcp --destination-port 21 -j DENY -l -i ppp0
$IPC -A input -p tcp --destination-port 79 -j DENY -l -i ppp0
$IPC -A input -p tcp --destination-port 113 -j DENY -l -i ppp0
$IPC -A input -p tcp --destination-port 6000:6010 -j DENY -l -i ppp0
^-^
注意:-l是为了在syslogd中加一条log地!
再加一个脚本 remove-ipchians.sh
vi remove-ipchains.sh
#!/bin/sh
#chmod 0755 remove-ipchians.sh
#remove all of the input files form the firewall
/sbin/ipchians -F input
^-^
------------------------------------------------>
好累ing,暂时就写到这里吧,学校被封了,夸张的是哥们那有linux玩,so,写点拙作出来,因为怎么看关于ipchians的paper都好少而这个东东虽然好用,又满累人的,算是送给admin们的礼物吧!写的不好和不对了,扔点eggs(反:写好有什么奖励没?咚,谁扔鸡蛋了?)
怎么算也是swap的一"帆"累人的笔记,copy时候给点面子,嘿嘿,把偶大名也++喽!