iptables手册--比较重要,多研究下
- 格式:doc
- 大小:140.00 KB
- 文档页数:28
ptables简介iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。
filter负责过滤数据包,包括的规则链有,input,output和forward;nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;input匹配目的IP是本机的数据包,forward匹配流经本机的数据包,prerouting用来修改目的地址用来做DNAT,post routing用来修改源地址用来做SNAT。
iptables主要参数-A 向规则链中添加一条规则,默认被添加到末尾-T指定要操作的表,默认是filt er-D从规则链中删除规则,可以指定序号或者匹配的规则来删除-R进行规则替换-I插入一条规则,默认被插入到首部-F清空所选的链,重启后恢复-N新建用户自定义的规则链-X删除用户自定义的规则链-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,-s指定源地址-d指定目的地址-i进入接口-o流出接口-j采取的动作,accept,drop,snat,dnat,masquerade--sport源端口--dport目的端口,端口必须和协议一起来配合使用注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写iptable配置实例iptable基本操作iptables -L 列出iptables规则iptables -F 清除iptables内置规则iptables -X 清除iptables自定义规则设定默认规则在iptables规则中没有匹配到规则则使用默认规则进行处理iptables -P INPUT DROPiptables -P OUTPUT ACCEPTiptables -P FORWARD DROP配置SSH规则iptables -A INPUT -p t cp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出。
iptables一、iptables介绍:iptables是复杂的,它集成到linux内核中。
用户通过iptables,可以对进出你的计算机的数据包进行过滤。
通过iptables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。
接下来,我将告诉你如何设置自己的规则,从现在就开始吧。
===================================================================二、iptables命令:维护规则表的命令:1. (-N)创建一个新规则表2. (-X)删除一个空规则表3. (-P)改变内建规则表的默认策略4. (-L)列出规则表中的规则5. (-F)清空规则表中的规则6. (-Z)将规则表计数器清零管理规则表中的规则:1. (-A)添加新规则到规则表2. (-I)插入新规则到规则表的某个位置3. (-R)替换规则表中的规则4. (-D)删除规则表中的某条规则在调试iptables规则时,你也许需要反复修改你的脚本来实现某些特定的功能,这时建议在你的脚本里添加这样几行,以防止重复设置规则:# 清除所有规则iptables -F -t filteriptables -X -t filteriptables -Z -t filteriptables -F -t natiptables -X -t natiptables -Z -t nat# 设置内建规则表的默认策略iptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPTiptables -t nat -P PREROUTING ACCEPTiptables -t nat -P POSTROUTING ACCEPTiptables -t nat -P OUTPUT ACCEPT‚-t‛选项是‚–table‛的简写,它指明了你要对哪类规则表进行操作,默认的是指filter。
1iptables与firewalld的关系RHEL7.0以后,使用firewalld服务取代了iptables服务,但是依然可以使用iptables服务,只是默认不开启了,iptables和firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具,是操作系统上的一种服务,将定义好的规则交给内核中的netfilter(网络过滤器)来读取,从而实现防火墙的功能,firewalld和iptables除了可以可以在inbond和outbond方向做策略限制以外,还能实现snat和dnat功能。
注意:firewalld和iptables同时只能运行一种服务,否则会出现不可预知的情况2iptables安装RHEL7.0以后,iptables默认不开启,需要安装iptables服务安装完成后3实验场景3.1源地址转换需求:源地址1(172.16.202.15)需要访问公网目的地址(192.168.111.245),源地址2(172.16.202.16)不需要访问公网。
内网两台服务器,分别为源地址1(172.16.202.15)和源地址2(172.16.202.16),公网出口处有一台centos 7.1的双网卡服务器,一个接口接内网(172.16.202.14),一个接口接外网(192.168.111.63)。
源地址1上首先需要保证和iptables服务器能够互通,并且有去往192.168.111.245的路由,路由下一跳需要指向iptables内网接口(172.16.202.14),由iptables服务器做源nat,把源地址(172.16.202.15)nat成公网接口地址(192.168.111.63),从而可以访问目的地址(192.168.111.245)。
一、首先在源地址1服务器上配置去往192.168.111.245的路由ip route add 192.168.111.245 via 172.16.202.14 //临时添加路由,重启网卡或者系统后,路由会丢失,建议做路由固化路由固化:在/etc/sysconfig/network-scripts目录下,新建一个route配置文件,vi route-eth0,新增一条路由,192.168.111.245/32 via 172.16.202.14,重启网卡即可生效二、iptables服务器上,配置snat策略iptables -t nat -A POSTROUTING -s 172.16.202.15/32 -d 192.168.111.245/32 -j SNAT --to 192.168.111.63注释:-t table table to manipulate (default: `filter') //这个选项指定命令要操作的匹配包的表。
iptables 原理介绍iptables是一个用于配置Linux内核防火墙的工具。
它是在Linux操作系统中实现防火墙功能的重要组件。
通过iptables,我们可以定义一系列的规则,来过滤网络数据包并进行转发。
本文将深入探讨iptables的原理和工作流程。
iptables 工作原理iptables的工作原理可以分为三个步骤:输入、处理和输出。
当一个数据包进入防火墙时,iptables首先根据一系列的规则进行输入过滤,然后对数据包进行处理,最后再根据规则进行输出过滤。
下面将对每个步骤进行详细说明。
输入过滤输入过滤是iptables的第一步。
当一个数据包进入防火墙时,iptables会按照预定义的规则表对数据包进行匹配。
规则表是由多个链组成的,每个链包含多条规则。
如果数据包与某个规则匹配,那么iptables会根据规则定义的动作来处理数据包,比如允许数据包通过或者丢弃数据包。
如果数据包与规则表中的规则都不匹配,那么iptables会根据默认策略来处理数据包。
处理数据包处理数据包是iptables的第二步。
在这一步,iptables会根据规则表中的匹配规则对数据包进行处理。
处理过程中,iptables会修改数据包的头部信息,比如源IP地址、目的IP地址、源端口、目的端口等。
iptables也可以对数据包进行连接追踪,以便后续的数据包可以根据连接状态进行处理。
输出过滤输出过滤是iptables的最后一步。
当经过处理后的数据包准备离开防火墙时,iptables会在输出链中寻找匹配的规则。
如果找到匹配的规则,iptables会根据规则定义的动作来处理数据包。
如果没有找到匹配的规则,那么iptables会根据默认策略来处理数据包。
iptables规则表由多个链组成,每个链由一系列规则构成。
根据数据包的流向和处理过程,iptables定义了几个重要的链,包括INPUT、FORWARD、OUTPUT等。
下面将对这些链进行详细介绍。
iptables四个表五条链其实关于iptables的使用网上的资料和教程也比较多,主要是要理解其中的路由前和路由后每个表和链所处的位置和作用,明白了也就简单了,以下是我转载的觉得写的比较详细的一篇博客,有时间我将写一篇关于这些表和链的实质性的配置例子。
一、netfilter和iptables说明:1、 netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。
这些规则存储在专用的信息包过滤表中,而这些表集成在Linux内核中。
在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件 netfilter 和 iptables 组成。
(1). netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
(2). iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables包含4个表,5个链。
其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。
2、4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filt er表)。
表的处理优先级:raw>mangle>nat>filter。
filter:一般的过滤功能nat:用于nat功能(端口映射,地址映射等)mangle:用于对特定数据包的修改raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能RAW 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。
iptables手册前言概述这是一篇以介绍在Linux操作系统平台上构建防火墙系统(Netfilter/Iptables)为主的科技文档,旨在帮助使用者在较短的时间内掌握管理和配置要领,为企业的网络安全提供相关的安全保障。
本文是《Linux安全应用——构建以防火墙为核心的安全管理系统》一文的姐妹篇,如果把那篇文章看成是What is it?那么,本文则以技术细节为主,即How to do?关于为什么要使用基于Linux操作系统平台的防火墙系统的原因,本文共分为两部分,第一部分具体介绍了Netfilter/Iptables的运行机制和配置管理方法,这是全文中最核心的一部分。
第二部分给出了一些具体的范例脚本供系统管理员参考。
鉴于笔者水平有限,文中有错误的地方望不吝赐教。
适用对象本文首先是为各个企业的网络系统管理员撰写的,无论是那些已经使用了基于Netfilter/Iptables防火墙系统的企业,还是那些正准备使用它的企业,本文的内容都非常适合为系统管理员们提供参考。
对于那些Linux的个人用户和爱好者,本文也不失为一篇相当有价值的参考文档,其中,相当一部分内容深入浅出的讲解能帮助读者很快的理解和掌握Netfilter/Iptables的精髓。
对于希望通过本文了解Netfilter/Iptables的读者,应至少具备一定的Linux操作系统的应用基础,比如文件操作、网络配置操作等,当然,如果使用者还具备一定的编译核心的能力那是在好不过的了。
为了更好的配置防火墙系统,使用者除了掌握Netfilter/Iptables 本身的配置管理技巧外,掌握一定的TCP/IP网络知识也是必须的,比如在缺省情况下,应该知道SMTP(Simple Mail Transfer Protocol)协议使用TCP25端口做为其对外提供服务的端口,FTP(File Transfer Protocol)协议在建立连接的整个过程中,会与客户端建立两条连接,一条是用户传输数据的,另一条则是用户控制传输的。
Iptables防火墙介绍:Iptables是管理Netfilter的唯一工具,Netfilter直接嵌入在Linux内核。
他可以为个人工作站创建一个防火墙,也可以为一个子网创建防火墙,以保护其他的系统平台(市场上有很大一部分硬件防火墙也是使用iptables系统的)。
Netfilter在内核中过滤,没有守护进程,在OSI模型的第2、3、4层插入策略。
过滤的速度非常快,因为他只读取数据包头,不会给信息流量增加负担,也无需进行验证。
Netfilter提供了一系列的表(tables),每个表由若干个链(chains)组成,而每条链可以由一条或若干条规则(rules)组成。
实际上netfilter 是表的容器,表是链的容器,而链又是规则的容器。
Netfilter表和Netfilter链:表说明:Filter:这个表主要执行数据包过滤。
Nat:主要进行网络地址转换。
Managle:用于修改一些特殊的规则。
链说明:PREROUTING:路由之前,刚到达的数据包。
(nat)INPUT:通过路由,目的地为本机的数据包。
(filter)FORWARD:需要通过本地系统进行转发的数据包。
(filter)(nat和filter)OUTPUT:由本机产生,向外转发,处于POSTROUTING之前的数据包。
POSTROUTIONG:通过路由后,即将离开系统的数据包。
(nat)Netfilter的数据包流程:Iptables 基本语法:iptables 内置了filter、nat 和mangle 三张表,我们可以使用-t 参数来设置对哪张表生效,也可以省略-t 参数,则默认对filter 表进行操作。
图中:这句的意思就是:来自(源地址)192.168.0.1的INPUT链的数据包直接丢弃。
Iptables进程服务命令:service iptables save 保存iptables设置,对iptables规则编辑后一定要保存。
iptable 解读iptables 是一种用于 Linux 系统的防火墙软件,它能够通过配置规则来控制网络数据包的进出。
下面将对 iptables 进行详细的解读。
1.iptables 简介iptables 是一个功能强大的防火墙软件,它能够通过配置规则来控制网络数据包的进出。
它是在 Linux 2.4 版本以后引入的,并且成为了 Linux 内核的一部分。
iptables 具有丰富的功能,例如支持状态检测、支持基于时间的规则、支持多链路规则等。
它可以帮助管理员非常灵活地控制网络数据包的进出,从而提高系统的安全性。
2.iptables 架构iptables 主要包括三个组件:内核模块、用户空间工具和 iptables 守护进程。
内核模块是 iptables 的核心部分,它能够直接与 Linux 内核进行交互。
用户空间工具是用于配置 iptables 的命令行工具,它能够通过与内核模块通信来动态地修改规则。
iptables 守护进程是一个常驻内存的服务,它能够监听网络数据包并根据规则进行处理。
3.iptables 规则iptables 规则是用于控制网络数据包进出的指令集合。
每个规则由多个条件和一个操作组成。
条件是用于匹配网络数据包的属性,例如源 IP 地址、目标 IP 地址、协议等。
操作是当条件匹配成功时所要执行的动作,例如允许数据包通过、拒绝数据包、记录日志等。
4.iptables 链表iptables 链表是用于存储规则的容器。
每个链表都有一组规则,用于处理特定类型的数据包。
例如,PREROUTING 链表用于处理目标地址为本机的数据包,POSTROUTING 链表用于处理源地址为本机的数据包。
管理员可以根据需要自定义链表,并在其中添加规则。
5.iptables 命令行工具iptables 提供了多个命令行工具,用于配置和管理 iptables 规则。
其中最常用的命令行工具是 iptables 和 ip6tables。
实验一:IPTABLES基础使用1.删除系统原自带的防火墙设置rm /etc/sysconfig/iptables –f2.启动iptables/etc/init.d/iptables start( 或service iptables start)3.查看当前防火墙的设置iptables –Liptables –t nat –Liptables –t managle –L4.清空三个表中的所有策略如果防火墙策略中还有其它策规则,请一一清除清除方法:逐一删除如:iptables –t filter –D INPUT 1表示删filter表中INPUT链的第一条规则B. 全部清除如:iptables –t filter –F INPUT或iptables –F INPUT表示将filter表中INPUT链中的所有规则全清空 (不指名表则默认为filter表)iptables –F表示直接将filter中的所有链听规则都清空5.查看目前的默认策略6.设置默认策略将filter表的各条链默认值设为DROP7.允许其它机器可以ping通本机允许其它机器从eth0进入的ping数据包进行测试:回想一下我们教材,为什么会出现这种情况?我们再加入一条语句,然后看看测试情况如何:再来测试一下,看看结果如何:OK,可能ping通了。
想想我们最加入的语句倒底起到了什么作用。
上例中我们的目标地址和源地址都是anywhere,如觉得有必要,可进行更严格的限制(上例中虽然我们已经对网络接口限制到了eth0上,但eth0可能会进行IP的修改,这样我们上面的ping仍旧有效,这可能与你当初设置的愿望不一致)我们只允许外面ping通本机IP:192.168.1.254,我们可以进行以下设置,为方便理解,此处我们先清除掉原来所有的策略,再新增策略。
实际处理时,可直接对原策略进行修改,或都只删除对应的策略,然后再新增,不需要全部清除。
.iptable设置:查看当前默认filter表的规则:iptables -L;iptables - P INPUT/OUTPUT/FORWARD -DROP/ACCEPT(-p设置链的目标规则);添加规则:iptables -A INPUT -i 网卡名称 -j ACCEPT iptables -A OUTPUT -o 网卡名称 -j ACCEPT;iptables -A FORWARD -i 网卡名称-j ACCEPT;iptables -A FORWARD -o 网卡名称 -j ACCEPT(-A添加规则,-i后跟接口名称,-j目标跳转)。
在远程putty到linux主机上首次做iptables规则时需按以下步骤,以免造成远程断开再也登不了远程linux主机的麻烦.1.清除原有filter规则.[root@linux ~]# iptables -F 清除预设表filter中的所有规则链的规则[root@linux ~]# iptables -X 清除预设表filter中使用者自定链中的规则2.清除原有filter规则后的信息应为下面的样子[root@linux ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destination3.保存所做的修改和重启iptables[root@linux ~]# /etc/rc.d/init.d/iptables save[root@linux ~]# service iptables restart4.添加远程ssh端口[root@linux ~]#iptables -A INPUT -p tcp --dport 22 -j ACCEPT[root@linux ~]#iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT5.设定预设规则[root@linux ~]# iptables -p INPUT DROP[root@linux ~]# iptables -p OUTPUT ACCEPT[root@linux ~]# iptables -p FORWARD DROP6.再次保存所做的修改和重启iptables[root@linux ~]# /etc/rc.d/init.d/iptables save[root@linux ~]# service iptables restart==================================================== ==================================================== ================IP 伪装:启动内部对外转址:iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT --to-source $FW_IP (-s表示源地址,/16表示掩码);启动外部对内部转址:iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.255.2:80 //凡对 $FW_IP:80 连线者,则转址至172.16.255.2:80 ;open 外部主机 telnet port 23:iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT;iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT ;开放邮包转递通道:open SMTP port 25# 别人可以送信给自己:iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT;iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT;# 你可以送信给别人:iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport1024:65535 -d any/0 --dport 25 -j ACCEPT ;iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT;开放对外离线下载信件的通道(开放内部网路可以对外部网路的 POP3 server 取信件):open 对外部主机的 POP3 port 110。
前言概述这是一篇以介绍在Linux操作系统平台上构建防火墙系统(Netfilter/Iptables)为主的科技文档,旨在帮助使用者在较短的时间内掌握管理和配置要领,为企业的网络安全提供相关的安全保障。
本文是《Linux安全应用——构建以防火墙为核心的安全管理系统》一文的姐妹篇,如果把那篇文章看成是What is it?那么,本文则以技术细节为主,即How to do?关于为什么要使用基于Linux操作系统平台的防火墙系统的原因,本文共分为两部分,第一部分具体介绍了Netfilter/Iptables的运行机制和配置管理方法,这是全文中最核心的一部分。
第二部分给出了一些具体的范例脚本供系统管理员参考。
鉴于笔者水平有限,文中有错误的地方望不吝赐教。
适用对象本文首先是为各个企业的网络系统管理员撰写的,无论是那些已经使用了基于Netfilter/Iptables防火墙系统的企业,还是那些正准备使用它的企业,本文的内容都非常适合为系统管理员们提供参考。
对于那些Linux的个人用户和爱好者,本文也不失为一篇相当有价值的参考文档,其中,相当一部分内容深入浅出的讲解能帮助读者很快的理解和掌握Netfilter/Iptables的精髓。
对于希望通过本文了解Netfilter/Iptables的读者,应至少具备一定的Linux操作系统的应用基础,比如文件操作、网络配置操作等,当然,如果使用者还具备一定的编译核心的能力那是在好不过的了。
为了更好的配置防火墙系统,使用者除了掌握Netfilter/Iptables本身的配置管理技巧外,掌握一定的TCP/IP网络知识也是必须的,比如在缺省情况下,应该知道SMTP(Simple Mail Transfer Protocol)协议使用TCP25端口做为其对外提供服务的端口,FTP(File Transfer Protocol)协议在建立连接的整个过程中,会与客户端建立两条连接,一条是用户传输数据的,另一条则是用户控制传输的。
资源列表Netfilter/Iptables的官方网站:在Netfilter的官方网站,用户能够下载Iptables的最新的源代码,Iptables的使用说明文档,FAQ和Mail List,这个站点是有关Netfilter/Iptables最权威、最全面的地方,在这里,你几乎能够找到和Netfilter/iptables相关的所有帮助和技术支持。
术语文中包含了一些术语,也许读者对其中的一部分似曾相识,但又并不完全理解其正确的含义,或者和其他相关安全产品的概念混淆了。
这里有一些解释,并说明了本文中如何使用它们。
DNAT - Destination Network Address Translation 目的网络地址转换。
DNAT是一种改变数据包目的IP地址的技术,这种技术经常用于将内部网络(RFC1918定义的地址段)的服务器通过公有的可路由IP地址发布到Internet上,通过对同一个IP地址分配不同的端口,来决定数据的流向。
SNAT - Source Network Address Translation源网络地址转换。
这是一种改变数据包源IP地址的技术,经常用来使多台计算机分享一个Internet地址。
这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解决这个问题。
IPv6使得地球上每一粒沙子大小的空间都能够分配到一个IP地址,因此IPv6不存在地址空间短缺的问题。
State - 状态指明数据包处于什么状态。
状态在RFC 793 - Transmission Control Protocol中定义,或由用户在Netfilter/iptables中自定义。
需要注意的是Netfilter设定了一些关于连接和数据包的状态,但没有完全使用使用RFC 793的定义。
User space - 用户空间,指在内核外部或发生在内核外部的任何东西。
例如,调用iptables -h 发生在内核外部,但iptables -A FORWARD -p tcp -j ACCEPT(部分地)发生在内核内部,因为一条新的规则加入了规则集。
Kernel space - 内核空间,与用户空间相对,指那些发生在内核内部。
target - 这个词在后文中有大量的应用,它表示对匹配的数据包所做的操作,如ACCEPT、DROP、REDIRECT等等。
约定本文中涉及的命令、范例都是以Redhat Linux操作系统平台为基础的,尽管在绝大多数的情况下,Linux的大多数命令都是独立于发行版本的,但每个发行版本之间或多或少的存在微小的区别。
本文中的命令以黑体5号宋体字表示,如下例:#iptables-restore /etc/sysconfig/iptables本文中涉及到的命令、范例脚本都经过我们的严格测试,能够保证使用者按照文中介绍的做法正确配置防火墙,当然,每一个用户的网络环境都是不一样的,具体的配置还需要用户根据自己的具体情况来适当调整。
致谢在撰写本文时,参考了Oskar Andreasson的《iptables tutorial 1.1.19》一文,由于本人英语水平有限,因此额外参考了中国Linux公社里的Linux新鲜社员sllscn的翻译稿,在此向他们两人表示谢意。
第一章构建Netfilter/Iptsbles防火墙系统1.1 获取iptablesiptables可以从下载,该网站是netfilter/iptables最专业的网站,由Harald Welte、Jozsef Kadlecsik、Martin Josefsson、Patrick McHardy等核心成员进行维护,此外,还有众多的iptables的使用者和开发者为网站提供了大量的文档和更新代码。
1.2 编译内核在一般情况下,我们采用的Linux的distribution比如Redhat都会帮我们安装好Iptables,而且netfilter的核心层也被以模块(Modules)的方式编译进了核心,所以,在绝大多数的情况下,我们是不需要对核心进行重新编译的。
当然,我们写这篇文档的用意决不仅限于教会用户使用几个命令来管理iptables,所以,我们还是来描述一下如何编译核心以使Linux在核心层能够支持数据包过滤。
编译核心的准备工作当然是必需有Linux Kernel的源代码,在源代码文件的目录/usr/src/linux-2.4(这个目录一般是个链接文件)中输入:#make menuconfig会出现如下的画面:在图中高亮显示的地方回车进入Networking options的核心配置页面,将高亮显示的部分编译进核心,在该配置页面内,还有一处需要注意,就是Netfilter Configuration的配置页面,在该处回车即可进入配置界面:从图中可以看到,左面尖括号内的“M”代表该选项被编译成核心模块,仅在系统需要时才被装载入核心空间,由于模块化的核心是不占用核心本身的空间的,因此,对于这些选项,除非肯定不会用到的以外,其他的都可以选择编译成核心模块,但有些是必须的,如Connection tracking——用于支持状态链接跟踪功能FTP protocol support——用于支持对Ftp协议的连接跟踪机制IP tables support——用于支持包过滤Connection state match support——用户支持连接状态匹配MASQUERADE target support——支持地址伪装功能Multiport match support——支持多端口匹配,这对于设置过滤规则非常有好处REDIRECT target support——如果你想使用iptables将特定的流量交给特定的代理程序如squid来处理,这个选项需要被编译进核心模块这些选项选择完成后,按照核心编译的方法对配置好的核心进行编译即可:#make dep#make bzImage#make install#make modules#make modules_install1.3 iptables的编译和安装就象我们在上节中说到的一样,如果采用诸如Redhat之类的Linux Distribution,在安装系统时,Iptables已经被做为缺省的软件安装到系统上了,用户不需要另行安装,如果用户需要另外安装新版本的iptables软件,可以到的网站下载最新版本的iptables源代码,目前最新的版本是1.2.9。
从网站上下载的源代码是“tar.bz2”格式的,编译源代码的第一步工作是解压缩,命令如下:#/bin/tar xjvf iptables-1.2.9.tar.bz2解压缩后,进入源代码的安装目录,开始编译:#make KERNEL_DIR=/usr/src/linux/如果一切正常,那么iptables应该编译好了,接下来可以进行安装了,安装命令非常简单:#make install KERNEL_DIR=/usr/src/linux/怎么样?简单吧,当然,如果这时您的系统核心还没有将netfilter/iptables编译进去,那么安装了iptables软件是没有多大意义的。
1.4 iptables的启动和关闭在Redhat Linux上,由于历史的原因,ipchains和iptables是并存的(ipchains是在kerenl版本2.4.x以前的包过滤防火墙系统),因此ipchains和iptables同时运行是不允许的,我们首先要将ipchains的服务停掉:#/sbin/chkconfig –level 123456 ipchains off#/sbin/service ipchains stop当然,既然不使用ipchains了,我们也可以将ipchains从系统中移除,使用命令:#rpm –e ipchains第二步是启动Iptables的服务#/sbin/chkconfig –level 345 iptables on#/sbin/service iptables startchkconfig命令表示在系统启动时,ipchains或iptables在相应启动级别的缺省设置,如果是off,则代表系统启动时不启动ipchains或iptables服务。
反之,则启动。
1.5 iptables的工作原理和基础架构iptables被分为两部分,一部分被称为核心空间,另一部分称为用户空间,在核心空间,iptables 从底层实现了数据包过滤的各种功能,比如NA T、状态检测以及高级的数据包的匹配策略等,在用户空间,iptables为用户提供了控制核心空间工作状态的命令集。