分享
 
 
 

使用Linux 2.4实现NAT服务

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

---- 在即将推出的Linux 2.4内核中,实现IP包过滤(IP filter)/网络地址翻译(NAT)功能的ipchains被Netfilter所取代。Netfilter产生的动机是源于ipchains代码结构的不合理性。如Netfilter的作者所说“当我开发IPChains时,……在那一瞬间,我意识到包过滤代码并没有处在一个合适的位置……简而言之,出于负责到底的原则,我还是完成了IPChains的开发。”事实上,这种结构的不合理性是从2.0系列内核的ipfwadm继承下来的。为此,Netfilter采用了全新的机制。与ipchains相比,Netfilter并不是具体实现包过滤的程序,而是一套框架结构。各种包过滤、NAT功能模块都可建立在这套框架结构之上,从而提供了更好的灵活性和可扩展性。

、Netfilter基础

---- Netfilter提供了一系列的“表”(tables),表由若干“链”(chains)组成,链相当于以前的ipchains,系统缺省的表为“filter”,表中包含了INPUT、FORWARD和OUTPUT 3个链,图1所示是数据包在filter表中的流程。各个链的含义见表1。

表1

链名 功能

INPUT 处理所有发向本机的数据包

OUTPUT 处理所有从本机发出的数据包

FORWARD 处理所有经本机路由的数据包

---- 链由一系列规则组成,每一条规则中可以设置决定数据包走向的“目标”(targets),常用的目标是ACCEPT、DROP、REJECT等,含义如表2。下面举几个例子来说明这些概念。

表2

目标 含义

ACCEPT 接受数据包,将其传递至表中的下一个链

DROP 丢弃数据包,不返回任何信息

REJECT 丢弃数据包,并返回一个目标地址不可达信息

---- #iptables -A INPUT -s 192.168.1.1 -j ACCEPT

---- 这条命令的含义是在INPUT链中增加(-A)一条规则,即对所有来自(-s)192.168.1.1的数据包全部接受(-j ACCEPT,-j是跳转的意思),并转到表中的下一条链继续执行。而以下这条命令则表示丢弃(-j DROP)所有来自192.168.0.0 16位掩码子网的数据包。

---- #iptables -A INPUT -s 192.168.0.0/16 -j DROP

---- 用这个缺省的filter表就可以实现包过滤。表3 列出了几种使用iptables防止各种攻击的命令,其中,“-p tcp”和“-p icmp”是指定数据包的类型,紧随其后的选项指定数据包的具体类型。“-m limit”表示“若匹配,则限制为”,“-limit”是具体的限制条件,例如“1/s”表示每秒钟只允许通过一个数据包,这个选项可以有效防止各种DoS(DDoS)攻击。

二、了解NAT

---- NAT是通过一个特殊的表来实现的。即nat表,表中有3条链,分别是PREROUTING、ROUTING和POSTROUTING。数据包的流向如图2所示。PREROUTING链用于DNAT;POSTROUTING链用于SNAT; Routing是路由链。

三、使用Netfilter共享Internet拨号连接

---- 1. 典型环境

---- 一个小型局域网络,由2台客户机(1台台式机和1台便携机)、1台文件/打印服务器和1台拨号服务器(安装Linux)组成。使用Modem拨号方式连接Internet。以上每台机器装有一块网卡连到Hub,所有的网卡使用保留IP(192.168.1.x),拨号服务器通过串口连接外置Modem,IP地址为拨号时动态分配。网络结构如图3所示。

---- 2.编译内核

---- 以下所有命令均以root身份执行。首先需要在拨号服务器上编译内核进行有关的设定,内核版本要求在2.3.x以上,本文以最新的2.4.0-test11为例,使用make menuconfig方式编译。与Netfilter相关的选项都在“Networking Options”部分,在其中做如下选择。

---- ...

---- [*] Kernel/User netlink socket

---- [ ] Routing messages

---- < * > Netlink device emulation

---- [*] Network packet filtering (replaces ipchains)

---- [ ] Network packet filtering debugging

---- [ ] Socket Filtering

---- ...

---- 在其中的“IP: Netfilter Configuration”子项中做如下选择。

---- ...

---- < M > Connection tracking (required for masq/NAT)

---- < M > FTP protocol support (NEW)

---- < M > IP tables support (required for filtering/masq/NAT) (NEW)

---- < > limit match support

---- < M > MAC address match support

---- < > Netfilter MARK match support

---- < M > Multiple port match support

---- < M > TOS match support

---- < > Connection state match support

---- < > Unclean match support (EXPERIMENTAL)

---- < > Owner match support (EXPERIMENTAL)

---- < M > Packet filtering

---- < M > REJECT target support

---- < M > MIRROR target support (EXPERIMENTAL)

---- < M > Full NAT

---- < M > MASQUERADE target support

---- < M > REDIRECT target support

---- < M > Packet mangling

---- < M > TOS target support

---- < M > MARK target support

---- < M > LOG target support

---- < > ipchains (2.2-style) support

---- < > ipfwadm (2.0-style) support

---- ...

---- 有些项并不是必须的,您可以根据自己的需要做取舍。比如,ipchains和ipfwadm两项是基于Netfilter框架开发的向前兼容的模块。但不能和iptables同时使用。保存配置并退出后,可以使用如下命令编译内核和模块。

---- #make dep clean modules modules_install bzImage

---- 需要注意的是,目前多数系统缺省的模块工具(module utilities)与2.4内核不兼容,主要是因为2.4内核的模块目录结构有了很大变化。您可运行“insmod -V”检查当前的模块工具版本,如果在2.3.12以下,请到http://www.kernel.org/pub/linux/utils/kernel/modutils/v2.3/ 下载最新的版本并安装。

---- 3. 安装Netfilter(iptables)

---- 这一步是安装iptables的运行库、帮助文件和可执行程序。请到http://Netfilter.kernelnotes.org/ 下载最新的iptalbes源文件,下面以1.1.2版为例,安装过程如下。

---- (1)解开[url=http://www.pccode.net].net" class="wordstyle"源码包。

---- #bzip2 -dc iptables-1.1.2.tar.bz2 | tar vxf -

---- (2)进入[url=http://www.pccode.net].net" class="wordstyle"源码目录。

---- #cd iptables-1.1.2/

---- (3)编译并安装。

---- #make;make install

---- 4.启动NAT

---- 如果以上两步顺利,就可以试着启动NAT了。首先插入所需模块,运行如下命令(这里要注意顺序)。

---- #insmod ip_tables

---- #insmod ip_conntrack

---- #insmod iptable_nat

---- #insmod ipt_MASQUERADE

---- 以上4个模块中,ip_tables是iptables主模块,实现Netfilter的接口框架;ip_contrack是连接跟踪模块,是后面两个模块所需要的;iptable_nat是实现NAT功能的模块;ipt_MASQUERADE则是实现IP伪装的。

---- 模块插入后,用如下命令启动NAT。

---- #iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

---- 命令中,“-t nat”说明对NAT表操作;“-A POSTROUTING”说明是添加POSTROUTING链中的规则;“-o ppp0 -j MASQUERADE”表示对所有通过ppp0(Internet拨号连接)接口向外发送的包进行IP伪装。

---- 最后,还需要启动内核的IP转发功能,运行如下命令。

---- #echo "1" > /proc/sys/net/ipv4/ip_forward

---- 如果经测试启动成功,可以将以上操作合并到一起制作为一个如下所示的脚本文件,在每次开机时自动运行。

---- #!/bin/bash

---- # 插入模块

---- insmod ip_tables

---- insmod ip_conntrack

---- insmod iptable_nat

---- insmod ipt_MASQUERADE

---- # 设置NAT

---- #iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

---- # 启用IP转发

---- echo "1" > /proc/sys/net/ipv4/ip_forward

---- 本文只是简单地介绍了iptables的主要用途,事实上,iptables的应用非常多,相应的参数也比较复杂,具体可以参考其帮助手册。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有