iptables基础概念

1.基础概念。

防火墙,其实说白了讲,用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。

目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。

对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。

2.Iptables 基础知识

1)规则 – 用于确定要匹配的封包和目标的标准,或用于确定如何处理这些封包的操作。

2)链 – 规则列表,将按顺序检查,第一个匹配生效。

3)策略 – 如果在内置链中没有规则匹配,将执行的默认操作, ACCEPT 或 DROP 。

4)表 – 用于特定目的的链集合: filter 用于阻止通信, nat 用于修改封包的目标或表面源。

3.目标(当封包匹配规则时,要采用的操作)

1)ACCEPT (接受) – 封包通过链

2)DROP (丢弃) – 封包被丢弃,如同其从未出现

3)REJECT (拒绝) - 封包被拒,并且防火墙发送错误消息(默认情况下是 ICMP 端口不可到达息)

4)LOG (记录) - 关于封包的信息记录到系统日志;继续检查链中的下一项规则

4.Netfilter 的表和链

    4.1链

PREROUTING:在进行路由选择前处理数据包

INPUT:处理入站的数据包

OUTPUT:处理出站的数据包

FORWARD:处理转发的数据包

POSTROUTING:在进行路由选择后处理数据包

    4.2表

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

nat表:修改数据包中的源、目标IP地址或端口

filter表:确定是否放行该数据包(过滤)

规则表的先后顺序:raw→mangle→nat→filter 

    4.3规则链的先后顺序: 

入站顺序:PREROUTING→INPUT

出站顺序:OUTPUT→POSTROUTING

转发顺序:PREROUTING→FORWARD→POSTROUTING

    4.4还有三点注意事项:

1).没有指定规则表则默认指filter表。

2).不指定规则链则指表内所有的规则链。

3).在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。

5.iptables 命令

  1)iptables 用于设置或查看内核内存中的规则。

  iptables 选项                定义

   -F                         从链中删除所有规则

-vnL --line-numbers          在数字模式下,完整地列出所有规则

  -A CHAIN <rule> -j <target>    将规则添加到链的末尾

  -I CHAIN # <rule> -j <target>   将规则作为规则 # 插入链;如果没有 # ,则作为第一个规则

  -D CHAIN #                  将规则 #从链中删除

-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)

 示例:

  # iptables -vnL --line-numbers

  # iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

  # iptables -I  INPUT 1 -s 192.168.0.233 -j REJECT

  # iptables -D INPUT 1

  # iptables -F INPUT    清空

/etc/init.d/iptables  save  将修改后的策略保存到/etc/sysconfig/iptables

    2)自定义链名

 iptables    -N redhat:添加自定义链名

iptables    -D redhat 1:删除自定义链下的策略

iptables    -X redhat:删除自定义链

iptables    -A INPUT -s !192.168.0.4 -p tcp --dport 23 -j REJECT:只有4可以连接

    2)规则(匹配标准)语法

iptables 规则包括匹配标准,可以与在封包中找到的标题信息进行比较。

概念                指令

源IP 或网络           -s 192.168.0.0/24

目标IP 或网络        -d 10.0.0.1

UDP/TCP 和端口    -p udp --sport 68 --dport 67

ICMP 和类型          -p icmp --icmp-type echo-reply

入站网络接口          -i eth0

出站网络接口          -o eth0

连接跟踪                -m state --state ESTABLISHED,RELATED

  示例:

# iptables -A FORWARD -s 192.0.2.0/24 -d 10.0.0.1 -j DROP

# iptables -A FORWARD -p udp --sport 68 --dport 67 -j ACCEPT

# iptables -A FORWARD -p icmp --icmp-type echo-reply -j ACCEPT

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

连接跟踪存储关于之前看到的通信消息,以做出匹配决定。允许连接后,信息放置在连接跟踪表中,直至超时、连接关闭或看到更多匹配的通信(重要计时器)。尽管这需要更多的内核内存,但是好处在于可以简化规则设计。

状态                定义

NEW                封包开始新通信,将规则添加到连接跟踪表

ESTABLISHED       与连接跟踪表中的规则匹配的任一封包

RELATED           在某种程度上与 ESTABLISHED 通信“相关”的通信 ;如 FTP 等协议

INVALID            无法确定的封包;通常,这些封包应被拒绝或丢弃

    注意:

为使 RELATED 规则起作用,您可能需要在 /etc/sysconfig/iptables-config 中启用相应的程序模块。

运行 iptables 命令更改内存中的 netfilter 内核模块规则,但如果重新引导,则不会持续。

运行 service iptables save 将采用内存中的当前规则,并将其写入 /etc/sysconfig/iptables 。

    示例:

# modprobe nf_conntrack_ftp

# modprobe nf_conntrack_tftp

# iptables -F

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT

# iptables -A INPUT -m state --state NEW -p tcp --dport 69 -j ACCEPT

# iptables -A INPUT -m state --state NEW,INVALID -j DROP

注意:如果不加载相应的内核模块,那么跟踪状态将不法生效。

6.永久生效:

1. 编辑文件: /etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp nf_conntrack_tftp"

2. 保存策略:

# service iptables save

3. 开机自启:

# chkconfig iptables on

注意:在实际环境中更推荐把所有策略保存到自定义脚本中,并把脚本加入 /etc/rc.local 实现开机自启。

7.完整配置

# 1.删除现有规则
iptables -F

# 2.配置默认链策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# 3.允许远程主机进行SSH连接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 4.允许本地主机进行SSH连接
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 5.允许HTTP请求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

总结

Iptables是一个非常重要的工具,它是每一个防火墙上几乎必备的设置,也是我们在做大型网络的时候,为了很多原因而必须要设置的。学好Iptables,可以让我们对整个网络的结构有一个比较深刻的了解,同时,我们还能够将内核空间中数据的走向以及linux的安全给掌握的非常透彻。我们在学习的时候,尽量能结合着各种各样的项目,实验来完成,这样对你加深iptables的配置,以及各种技巧有非常大的帮助。

时间: 2024-12-22 19:03:20

iptables基础概念的相关文章

linux基础概念和个人笔记总结(1)

防伪码:青,取之于蓝而青于蓝:冰,水为之寒而寒于水 各位亲爱的朋友们,本次分为6次更新,共12章节,请大家务必温故而知新,重在消化理解,熟练掌握linux基础概念与命令 一.linux系统管理与维护 1.分区:/boot(100-200m) swap:(交换分区,建议是物理分区的1.5-2倍) /:剩余空间 root是管理员用户,区分于administrator 2.对初学者建议:关闭iptables a.chkconfig iptables off b.打开/etc/sysconfig/sel

LVS 实验笔记1 一些基础概念

基础概念 rsync 同步软件 效率不高 inotify 通知 三种集群: LB: load balance 提高服务器的并发能力 HA: 高可用 high availability不会因为一台服务器宕机导致服务不可用 HP:high perfomence  高性能计算集群 并行处理集群 分布式文件系统 将大任务切割为小任务,分别进行处理 health check:健康检查 NFS:net filesystem 共享存储设备 DAS:直接附加存储 块级别交换数据 直接连到多态主机,性能好,但是要

【k8s】基础概念

基础概念: 将Docker应用于具体的业务实现,是存在困难的——编排.管理和调度等各个方面,都不容易.于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理. K8S,就是基于容器的集群管理平台,它的全称,是kubernetes. 一个K8S系统,通常称为一个K8S集群(Cluster). 这个集群主要包括两个部分: 一个Master节点(主节点) 一群Node节点(计算节点) Master节点主要还是负责管理和控制.Node节点是工作负载节点,里面是具体的容器. Maste

kubernetes基础概念知多少

kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用.高扩展性和可预测性的方式来管理容器应用的生命周期.通过k8s,用户可以定义程序运行方式.部署升级策略.动态伸缩容,使得用户以一种更灵活可靠的方式来管理应用程序. 关于k8s,是一种对应用服务的打包.部署.监控等一整套生命周期的自动化管理平台,目前各大公司已在生产环境部署使用,同时k8s社区比较活跃,在未来一段时间内会越来越流行,可以说是以后服务部署的事实标准,对于Java开发者来说,你可以

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

分布式学习——基础概念篇

概述 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和集中式处理正好是相反的的体系架构,集中传输集中到式处理顾名思义就是将所有的信息都一个统一的信息中心进行处理:分布式处理就是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机利用通信网络连接起来,让各个计算机各自承担同一个工作任务的不同部分,在控制中心的管理下,同时运行,共同完成同一个工作任务. 提到分布式处理就不能不提到

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

js基础--javascript基础概念之数组

js基础--javascript基础概念之数组 在ECMAScript 中 ,数组是很常用的数据类型,js中的数组和其他很多语言的数组有明显的区别.js的数组可以保持任何类型的数值,一个数组中可以保存着多个不同类型的数值.js数组大小(长度)是可以调整的.可以随着数据的添加自动增长数组长度. 创建数组: 一.数组字面量 数组字面量由一对包含数组项的方括号[]表示. var array = [ 'kin', 'cheong', 'change', 'hello', 'haha', 'hi' ];