【linux基础】22、iptables(上)

一、网络安全模型

1、防火墙简介

防火墙(Firewall):也称防护墙,它是一种位于内部网络与外部网络之间的网络安全系统。

工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是二者的结合

主机防火墙:工作于主机边缘,只能对一台主机起到保护作用

网络防火墙:工作于网络边缘,对多台主机起到保护作用

主机防火墙 + 网络防火墙

硬件防火墙:能高效地处理网络报文,CPU是特制的,在硬件基础上能直接处理报文(解包)

网络层:网络防火墙

应用层:网关或代理服务器(更安全,检测机制更复杂,更为贴近实际应用,效率不高)

IDS:入侵检测系统

HIDS:OSSEC    主机入侵检测系统

NIDS:snort    网络入侵检测系统,

Filesystem:tireware  文件系统级别检测

IPS:IDS + Firewall 入侵防御系统

honeypot:蜜罐  #诱捕

Nessus,nmap  嗅探(扫描)工具

2、iptables

iptables/netfilter:网络层防火墙,支持实现连接追踪(状态检测)

是基于软件形式实现的一种防火墙的软件程序

iptables的前身叫ipfirewall(内核1.x时代),这是一个从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现详细的访问控制功能。

iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables:防火墙规则编写工具    #用户空间

netfilter:framework(框架)网络过滤器,真正让规则实现   #内核空间

3、规则

规则(rules)其实就是网络管理员预定义的条件,是iptables的基础。

规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

4、工作原理

数据包从外网传送到防火墙后,防火墙在IP层向TCP层传送之前,将数据包转发给检查模块进行处理。其过程如下。

⑴ 首先与第一个过滤规则比较。

⑵ 如果与第一个规则相同,则对它进行审核,判断是否要转发该数据包,这时审核的结果是转发数据包,则将数据包发送到TCP层进行处理,否则就将它丢弃。

⑶ 如果与第一个过滤规则不同,则接着与第二个规则相 比较,如果相同则对它进行审核,过程与上一步相同。

⑷ 如果与第二个过滤规则不同,则继续与下一个过滤规 则比较,直到与所有的过滤规则比较完成。要是不满足所有过滤规则,就将数据丢弃。

二、iptables的工作机制

1、五链

iptables在网络必然经过的地方,选取了5个位置,来作为控制的地方。这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。

这五个位置分别是:

PREROUTING   路由前

数据报文进入TCP/IP协议栈路由选择前会被PREROUTING“钩”住,分析其数据包对其相应操作,注意:PREROUTING链不能对数据包进行过滤,PREROUTING链是整个netfilter框架中的第一关

INPUT       流入

通过PREROUTING后进行路由选择如果数据包是进入本机内部,则转发到INPUT链,INPUT链能够通过事先定义好的规则对数据包进行筛选如果被匹配则执行相应动作,INPUT链可以对数据包进行过滤,INPUT链是数据报文进入用户空间的必经之路

FORWARD     转发关卡

通过PREROUTING后进行路由选择如果数据包只是通过本机进行转发,则转发到FORWARD链,FORWARD链能够通过事先定义好的规则对数据包进行匹配检查并执行相应动作,INPUT链可以对数据包进行过滤,正是有了FORWARD链iptables才能够作为一个网络防火墙运行在网络边缘对进出网络的数据报文进行过滤

OUTPUT      流出

数据包从用户空间的进程通过路由选择特定的网卡接口后转到OUTPUT链,OUTPUT链能够通过实现定义好的规则对数据报文进行匹配检查并执行相应动作,OUTPUT链可以对数据包进行过滤

POSTROUTING  路由后

数据包从OUTPUT或FORWARD转发而来,到达netfilter框架中的最后一关,分析数据包并执行对应动作,和POSTROUTING一样不能对数据包进行过滤

数据经过netfilter流程图:

#OUPUT这里出去应该也要经过路由决策

在路由前和路由后由于没有经过路由决策不会发生过滤作用的,而且我们的(INPUT\FORWORD\OUTPUT)已经可以基本是实现路径的全部封锁控制了。那我们为什么还要放置他们呢?

这个主要是因为我们在做SNAT和DNAT的时候,源地址转换必须在路由之后转换,目标地址转换必须在路由之前转换,这即是他们存在的意义。

2、四表

netfilter过滤数据包的规则是通过四张表的来定义

或者说四个功能

filter

整个iptables最关键的表,实现数据包的过滤;可以由INPUT,FORWARD,OUTPUT这三个能够实现过滤功能的链组成

nat

NAT(Network Address Translation)网络地址转换,

在iptables中也可以实现NAT的相关功能, 例如SNAT(源地址转换),DNAT(目标地址转换),MASQUERADE等功能;nat表可以由PREROUTING, OUTPUT, POSTROUTING组成

mangle

mangle可以对匹配到的报文的数据报进行拆解,做出修改,重新封装等操作;一般我们用的很少,五个链都能实现mangle的功能

raw

raw关闭NAT的连接追踪机制,防止在高并发的访问下服务器的内存溢出导致故障;可由PREROUTING,OUTPUT实现,用的更少。

3、定义规则的”潜规则”

添加规则时的考量点

实现哪些功能: 判断添加在哪张表上

报文的流经路径:判断添加在哪个链上和链上规则的次序

1)同类规则(访问同一程序),匹配范围小的放在上面

2)不同类的规则(访问不同应用), 匹配到报文频率高的放上面

3)将那些可由一条规则描述的多个规则合并成一个

4)设置默认策略

4、防火墙的策略

防火墙策略一般分为两种:

一种叫“通”策略,一种叫“堵”策略,

通策略其实就是白名单,默认端口是关着的,必须要自己指定用户的才能进来。

堵策略可以理解是黑名单,规定范围的人不可以进来。那里但是你必须有身份认证,否则不能进。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。

5、检查和处理机制

检查条件:       #根据什么来检查

IP:源地址,目标地址

TCP:SPORT,DPORT,Flags

UDP:SPORT,DPORT,Flags

ICMP:ICMP-TYPE

扩展检查机制:

还可以根据time,协议,string,state(connection-tracking)

处理机制:      #匹配到规则的数据包该怎样处理

DROP(悄悄丢弃),REJECT(返回消息明确拒绝),ACCEPT(接受)

SNAT,DNAT:

RETURN:跳转回

REDIRECT:做端口映射

LOG:日志

时间: 2024-12-25 10:27:21

【linux基础】22、iptables(上)的相关文章

【原创】Linux基础之iptables

iptables 1.4.21 官方:https://www.netfilter.org/projects/iptables/index.html iptables is the userspace command line program used to configure the Linux 2.4.x and later packet filtering ruleset. It is targeted towards system administrators. iptables是一个命令

linux基础之iptables

Linux iptables相关: iptables用法 iptables [-ttable] command chain(链) [cretiria(匹配标准)] –jaction -t [raw,mangle,net ,filter] Command: 对链,或者对链中的规则进行管理操作 链中规则: -A  添加一条规则 -I   # 在第几条规则后插入一条规则 -R  # 修改第几条规则 -D  # 删除第几条规则 链: -N  增加 -X  删除空链 -E  重命名一条自定义链 -F  清

Linux基础命令(上)

实验环境:centos7, xshell6 一.Linux命令分类及格式Linux命令大体上可以分为两类,一是内部命令,另一类是外部命令.内部命令:指的是集成与Shell解释器程序内部的一些特殊指令,也称为内建指令.内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器程序被运行,内部指令也就自动载入内存了,用户可直接使用.内部命令无需从硬盘中读取文件,因此执行效率较高. 外部命令:指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中

php基础22:上传并且保存文件

<?php /* 文件上传的限制 && 保存被上传的文件 在这个脚本中,我们增加了对文件上传的限制.用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb: 上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本.这个临时的复制文件会在脚本结束时消失.要保存被上传的文件,我们需要把它拷贝到另外的位置: */ if ((($_FILES["file"]["type"]=="image/gif"

linux基础之iptables (二) SNAT和DNAT

iptables要实现内网和外网通信,有两种方式: nat: Network Address Translation,安全性,网络层+传输层 proxy: 代理,应用层 nat: SNAT: 只修改请求报文的源地址 DNAT:只修改请求报文的目标地址 nat表: PREROUTTING: DNAT OUTPUT POSTROUTING: SNAT 实例: 以三台电脑搭建环境,其中一台作为外网主机,一台作为网关,一台作为内网主机 1. 以192.168.1.4这台电脑作为连接内网和外网的接口,et

Linux基础命令:(6)线上查询与文件阅读的命令

6.线上查询的命令:(1)man命令:用来查询和解释一个命令的使用方法以及这个命令的说明事项.[man 命令的名称](2)locate命令:定位文件和目录.(3)whatis命令:用来查询某个命令的含义[whatis 命令的名称]:比较适用 7.文件阅读的命令:(1)head命令:用来查看文件的开头部分.[head 文件名,默认是10行](2)tail命令:与head命令相反.有助于查看日志文件结尾的最后10行来阅读重要的系统信息. Linux基础命令:(6)线上查询与文件阅读的命令

Linux基础知识(2)

Linux基础知识: 一.程序管理: (1)程序的组成部分: (2)二进制程序: (3)配置文件: (4)库文件: (5)帮助文件: 二.程序包管理器: X: (1)程序的组成文件打包成一个或有限几个文件: (2)安装: (3)卸载: (4)查询: 三.安装Linux: 虚拟机安装Linux系统 需要设置计算机的CPU, 内存, IO等 四.虚拟化软件程序: vmwareworkstation和virtualbox虚拟机都可以安装系统 五.CentOS的镜像站点: http://mirrors.

linux基础知识的总结

例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结,由于水平有限.难免有疏忽或者不准确的地方.希望大家可以直接指出来,我会及时改正.一切为了知识的传播.^_^ ? *********************************************************************************************

Linux基础的调优及安全设置

基础的调优及安全设置. a简单优化Linux 1.关闭Selinux [[email protected] selinux]#cd /etc/selinux/ [[email protected] selinux]# sed -i s#SELINUX=enforcing#SELINUX=disabled#g config [[email protected] selinux]# cat config # This file controls the state of SELinux on the

Linux基础系统优化

Linux基础系统优化 >>> https://www.cnblogs.com/pyyu/p/9355477.html Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和ip等参数 ifup,ifdown    脚本命令,更简单的方式启动关闭网络 ip 符合指令,直接修改上述功能 在我们刚装好linux的时候,需要用xshell进行远程连接,那就得获取ip地址,有时候网卡默认是没启动的,