百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

NETFILTER/IPTABLES详解

sinye56 2024-11-23 22:12 1 浏览 0 评论

自己的一些总结
NETFILTER/IPTABLES详解伴随着linux操作系统的发展,网络防火墙软件已由2.0x支持的ipfwadm,到2.2x支持的 ipchains,发展为当今流行的iptables。作为公司网络构架的一个重要部分,iptables软件的应用价值得到了充分的体现,对数据包过 滤、NAT转发的功能非常强大。相对ipchains而言,更利于创建合理的规则链,概念的把握也更清晰。
要讲iptables,必须先说一下netfilter构架。Netfilter是内置于linux2.4x及linux2.5x的一套构架,它是通过在 kernel中内嵌5个(仅ipv4)钩子函数(hook)发挥作用。这些钩子函数在数据报流过协议栈的几个关键点被调用。通过设置,Kernel会注册 一些使用到这些hook函数的模块,并在必要时调用模块的回调函数,由这些回调函数来处理相应数据,丢弃无用的、保留有用的或者也可更改源数据包的ip包 头。而iptables只是建立在Netfilter下的一套数据匹配、过滤规则集合,一旦符合某一规则,立即执行相应的行动(action)。
以下是netfilter在ipv4中的构架:(极为重要)
(不好意思,以后再加...)
数据进入系统后,首先使用PREROUTING钩子函数,然后内核自动查看路由,选择forward(转发目的ip非本机)或input(目的ip为本 机)。如路由forward,则调用FORWARD钩子函数;input,则调用INPUT钩子函数。注意,一旦使用FORWARD,则数据不再进入 INPUTt函数中,反之亦然。若数据由服务器发出,则进入OUTPUT函数中处理,最后与FORWARD函数处理后的数据一同进入 POSTROUTING钩子函数。从整体上看,凡是进入服务器网卡的数据包必定先要通过PREROUTING,凡从服务器网卡出去的数据包必定最后通过 POSTROUTING。
使用iptables前,先要在内核中修改配置:
以下以linux-2.4.21内核为例:
1.cd /usr/src/linux
2.make menuconfig
3.选networking options->ip: Netfilter Configuration ->自选所需模块。
4.退出保存。
Iptables使用语法:(见man iptables)
iptables [-t table] -[ADC] chain rule-specification [options]
iptables [-t table] -I chain [rulenum] rule-specification [options]
iptables [-t table] -R chain rulenum rule-specification [options]
iptables [-t table] -D chain rulenum [options]
iptables [-t table] -[LFZ] [chain] [options]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target [options]
iptables [-t table] -E old-chain-name new-chain-name
iptables使用3个默认表:filter,nat,mangle。其中filter为系统缺省操作表。
Filter表用于防火墙设置,对匹配条件的数据包可以选择access,drop,reject等的处理方式。Nat表用于网络地址转发,可以将源、目 的ip地址转变为指定的ip地址。Mangle表可以实现对数据报头的修改或给数据报附上一些带外数据,当前mangle表支持修改TOS位及设置skb 的nfmard字段。但由于某些中间层设备会忽略tos位的值,因此实际应用较少。
Iptables中的每个默认表都有相应的系统缺省规则链,分别对应于以上所说的hook函数。Filter表中有 input,forward,output链;nat表中有prerouting,forward,postrouting链;mangle表中有 prerouting,output链。
Iptables可以创建自定义链,实际上他必须建立在系统默认的链的基础上才能发挥作用,主要将相关联的规则集集中描述到同一个自定义链中,使管理者日常维护的条理更清晰。
常用语法解释:
iptables –t 表名 –A/I/D/R/ 链名 【匹配条件】 -j 行为
表名、链名不再重复,介绍一下“匹配条件”:
-p 指定协议(tcp/icmp/udp/...) etc. –p icmp (可以视为加载了相应的处理模块)
-s 源地址(ip address/masklen) etc. –s 10.1.2.0/24
-d 目的地址(ip address/masklen) etc. –d 10.1.2.3/32
-i 数据报输入接口 etc. –I eth0
-o 数据报输出接口 etc. –o eth1
一些模块加载后,还可以进一步指定模块所支持的子选项,如:
iptables …… -p tcp –sport 80 …… -j ……
iptables …… -m mac –mac-source 00:11:22:33:44:55 …… -j ……
鉴于filter表的表述比较简单,故不再敷述。以下介绍nat表。
Nat:Network Address Translation 网络地址转换
linux以前的内核仅仅支持有限的NAT功能,被称为伪装(masquerade)。Netfilter则支持任何一种NAT。一般来讲NAT可以分为源NAT和目的NAT。
源NAT在数据报经过postrouting时修改数据报的源地址。伪装是一个特殊的SNAT。
目的NAT在数据报经过output或prerouting 时修改数据报目的地址。端口转发和透明代理都是DNAT。
可以举例说明:
iptables -t nat -A POSTROUTING –s 10.0.0.1/32 -j SNAT --to-source 1.2.3.4
iptables –t nat –A PREROUTING –d 1.2.3.4 –j DNAT –to-destination 10.0.0.1
公司对iptables使用还包括:masquerade及redirect。
MASQUERADE:
用于具有动态IP地址的拨号连接的SNAT,类似于SNAT,但是如果连接断开,所有的连接跟踪信息将被丢弃,而去使用重新连接以后的IP地址进行IP伪装。我认为与常用路由器的PAT 功能相类似。
Etc. iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
REDIRECT:
重定向数据报为目的为本地,和DNAT将目的地址修改为接到数据报的接口地址情况完全一样。
Etc. iptables –t nat –A PREROUTING –s 10.0.0.0/24 –d ! localhost –dport 80 –j REDIRECT –to-port 3128
以上指定了到达非本机ip的其他http包,在刚进入服务器时,更改数据包的目的ip为服务器的ip,目的端口改为3128。我们配合squid的使用,可以实现用户上网的透明代理。
Mangle表到目前的应用不很普遍,暂不介绍。
任何时候在任何nefilter规则链中,数据报都可以被排队转发到用户空间去。实际的排队是由内核模块来完成的(ip_queue.o)。
数据报被发送给用户空间进程。该进程能对数据报进行任何处理。处理结束以后,用户进程可以将该数据报重新注入内核或者设置一个对数据报的目标动作(如丢弃等)。
这是netfilter的一个关键技术,使用户进程可以进行复杂的数据报操作。从而减轻了内核空间的复杂度。用户空间的数据报操作进程能很容易的适用ntfilter提供的称为libipq的库来进行开发。
最后,提醒诸位,最好将每一条iptables规则统一写到/etc/sysconfig/iptables文件中,iptables每次启动时将读取其中的脚本,并一次性同时生效。单一的加入iptables规则将逐一生效,并刷新整个规则链,处理多条规则时极不合理。
可以有命令:iptables-save 将当前激活的所有规则写入/etc/sysconfig/iptables文件中。

相关推荐

Linux在线安装JDK1.8

首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...

Linux安装JDK,超详细

1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...

Linux安装jdk1.8(超级详细)

前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...

Linux系统安装JDK教程

下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...

干货|JDK下载安装与环境变量配置图文教程「超详细」

1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...

Linux下安装jdk1.8

一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...

Linux上安装JDK

以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...

Linux系统的一些常用目录以及介绍

根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...

Linux系统目录结构

一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...

Linux文件查找

在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...

嵌入式linux基本操作之查找文件

对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...

linux系统查看软件安装目录的方法

linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...

Linux下如何对目录中的文件进行统计

统计目录中的文件数量...

Linux常见文件目录管理命令

touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...

Linux常用查找文件方法总结

一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...

取消回复欢迎 发表评论: