首页 > 系统相关 > Netfilter和iptables的实现机制(Linux)

Netfilter和iptables的实现机制(Linux)

时间:2023-11-10 17:04:23浏览次数:45  
标签:iptables -- 规则 指定 Linux 数据包 链接 Netfilter

一:Netfilter

Netfilter是是集成到Linux内核协议栈中的一套防火墙系统。它有4种类型,包括filter、nat、mangle、raw,具体是哪一种表,取决于数据包的处理方式。4种类型如下表所示:

表类型

说明

包含的链接

filter

显示所有区域及其配置信息的列表

INPUT、FORWARD、OUTPUT

nat

显示默认区域

PREROTING、OUTPUT、POSTROTING

mangle

将默认区域更改为指定区域

PREROTING、OUTPUT(2.4.18版本之后新增INPUT、FORWARD、POSTROTING)、

raw

执行命令指定区域

PREROUTING、OUTPUT

每个表都有不同类型的链接,称为规则集。链接种类的选择取决于数据包的访问点。链接类型及说明如下表所示。

链接类型

说明

INPUT

应用于传入数据包到本地主机的链接

OUTPUT

应用于从本地主机输出数据包的链接

FORWARD

应用于通过本地主机转发数据包的链接

PREROUTING

在路由决定之前应用的链接

POSTORUTING

在路由决定之后应用的链接

要转发的数据包(FORWARD)数据包,必须将内核参数net.ipv4.ip_forward的值设为1.用户可以为链接指定规则,在规则种也可以使用“指定地址以外的地址”这种“否定”方式。可以为链接种设置的规则指定字段有:协议、源地址、目标地址、源端口、目标端口、TCP标志、接收端口、传输接口和状态。数据包与链接中设置的规则匹配时的处理方法有目标指定,可以指定的目标根据表和链接不同而不同。主要目标如下表所示:

指令和设置值

指令和设定值

指令和设定值

说明

ACCEPT

全部

全部

权限

REJECT

全部

INPUT、OUTPUT、FOEWARD

拒绝,返回ICMP错误信息

DROP

全部

全部

丢弃,不返回ICMP错误信息

DNAT

nat

PREROUTING、OUTPUT

重写目标地址

SNAT

nat

POSTROUTING

重写源地址

MASQUEERADE

nat

POSTROUTING

重写源地址,动态地址设置

LOG

全部

全部

记录日志,继续转到下一条规则而不结束

用户定义链

全部

全部

-

Netfilter可以让用户完全控制防火墙配置和信息包过滤,也就是说我们可以制定自己的规则来满足需求。

二:iptables和Netfilter的关系

iptables是应用层,其实质是一个定义规则的配置工具,而核心的数据包拦截和转发是Netfilter负责的。iptables命令可以指定一个表和一个链接,并且可以在链接中设置一个或多个规则。Netfilter顺序地将链表中设置的多个规则应用于数据包来执行过滤。如果规则匹配,则该规则中设置的目标(ACCEPT、REJECT、DROP等)进行处理,如果规则不匹配,则进行下一个规则,对于不符合任何规则的分组,都适用于链接默认策略(ACCEPT、DROP)。

格式:iptables [-t 表 ]  {子命令}  链接规则 -j 目标

iptables命令的子命令如下表所示。

子命令

说明

-append -A

追加到现有规则的末尾

--insert -I

指定要添加到现有规则开头的规则编号时,将其插入到指定编号处

--list -L

显示规则,如果指定了链接,则显示该链接规则,如果未指定链接,则显示所有链接的规则

--delete -D

删除指定链接的规则

--policy -P

指定链接的默认策略,指定ACCEPT或DROP

规则匹配条件说明如下表所示。

指定项目

指定匹配条件选项

说明

协议

[!]-p 、--protocal协议

指定top、udp、icmp、all

源地址

[!]-s、--source源地址

指定源地址,如果未指定则指定所有地址

目标地址

[!]-d、--destination

指定目标地址。如果未指定则指定所有地址

源端口

[!]--sport 端口号 -m multiport

PREROUTING、OUTPUT

[!]--source-ports、--sports端口

指定源端口,如果未指定则指定所有端口

INPUT、FOTWARD、OUTPUT

目标端口

[!]--dport 端口号 -m mutiport

PREROUTING、OUTPUT、POSTROUTING

[!]destination-ports、--spors端口

指定目标端口或所有端口(如果未指定)

PREROUTING、OUTPUT(2.4.18版本之后,新增INPUT、FORWARD、POSTROUTING)

TCP标志

[!]--tcp-flags 参数1 参数2

PREROUTING、OUTPUT

[!]--syn

--tcp-flags指定参数1评估的标志,以逗号分隔,参数·2设置

PREROUTING、OUTPUT

接收接口

[!]-i、--in-interface网络接口

可以在INPUT、FORWARD、PREROUTING中指定

传输接口

[!]-o、--out-interface网络接口

可以在OUTPUT、FORWARD、POSTROUTING中指定

状态

[!]--state

连接跟踪机制可以确定连接状态

CentOS中单独设置iptables命令的方法如下:

  • 安装iptables.service软件包:yum install iptables.service。
  • 禁用firewalld.service:systemctl disable firewalld.
  • 启用iptables.service:systemctl enable iptables。
  • 重启系统:systemctl reboot。
  • Ubuntu系统单独设置iptables命令的方法如下。
  • 安装iptables.service软件包:apt install iptables-persistent。
  • 禁用ufw: ufw disable。
  • 重启系统:systemctl reboot。

以Ubuntu系统为例,设置iptables规则,如下图所示。指定22端口号表示允许项目的端口22号发送分组;指定80端口表示接收人允许端口的数据包到80号,指定iptables -P INPUT DROP命令将默认策略设置为丢弃,拒绝22和80以外的数据包,使用iptbales -L命令指定-v选项可以显示详细的设置状态。

通过以下的命令,如果可以看到允许接收来自ssh和http的数据包,说明之前设置的iptables规则已成功。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP 
iptables -L -v

                              Netfilter和iptables的实现机制(Linux)_源地址

在CentOS7以后,系统使用firewalld服务替代了iptables服务,但是依然可以使用iptables来管理内核的Netfilter。其实iptables服务和firewalld服务都是真正的防火墙。,只是用来定义防火墙规则的管理工具,将定义好的规则交由内核中的Netfilter(网络过滤器)来读取,从而实现真正的防火墙功能。

标签:iptables,--,规则,指定,Linux,数据包,链接,Netfilter
From: https://blog.51cto.com/u_15912723/8304704

相关文章

  • Linux程序后台运行
    一、第一种方法(加“&”符号)如果想让程序在后台运行,执行程序的时候,命令的最后面加“&”符号。#执行文件./test.py&#查看是否在后台运行ps-ef|greptest#后台的程序需要关闭时,需要kill命令停止killall[程序名]注意:这种方法,查看运行日志很不方便(不推荐)二、第二种方法(noh......
  • Linux login_shell和non-login shell区别
    转载地址:linux中的loginshell和non-loginshell重点解析-CSDN博客我们使用linux的时候会发现,当我们进入系统一进入bash,就有一堆变量可以使用,这些东西都是从哪来的呢?这就要归功于linux系统里面的配置文件了。当我们的系统启动之后,它们就会开始读取我们的配置文件让我们后续可以......
  • linux 扩容home
    title:Linux扩容home分区挂载date:2023/10/1320:46:25toc:truecategories:Linux命令excerpt:"LinuxLinux扩容home分区挂载"tags:Linuxhttps://zhuanlan.zhihu.com/p/307657410格式化分区mkfs.ext4/dev/sdb1创建目录sudomkdir/media/home......
  • Linux平台下的进程地址空间
    “地址空间”在之前讨论C++内存管理,以及平常写C/C++程序时,有如下的存储空间布局:虽然不是所有的实例都按照上图所示的分区排布,但这是一种最典型的做法,足以说明问题。这个示意图与在C++内存管理中所示的相似,但还是需要说明一下:(方便起见,暂时将这个空间称为程序的“地址空间”)在32位......
  • 【docker】Mac M1 构建 x64 linux镜像
    亲测教程,跨平台镜像构建[toc]首先首先你需要有一个Dockerfile比如:这里以一个python项目举例FROMpython:3.10-slimWORKDIR/appCOPYrequirements.txtrequirements.txtRUNpipinstall--no-cache-dir-rrequirements.txtCOPY..CMD["python","bin/run.py"]构建......
  • linux diff求两个文件的差集
    awk从文本中过滤出需要的ipqueryId_20231109214653_ipBatchQueryResult.json{"id":0,"ip":"121.204.216.130","type":1,"domain":"","agreement":"","mode":"","postalCo......
  • Linux系统常用审计命令
    1、https://blog.51cto.com/u_10401840/5927529Linux中常见日志以及位置/var/log/cron记录了系统定时任务相关的日志/var/log/auth.log记录验证和授权方面的信息/var/log/secure同上,只是系统不同/var/log/btmp登录失败记录使用lastb命令查看/var/log/wtmp登录失成功记录......
  • 《Unix/linux系统编程》教材第6章学习笔记
    |第5章|信号和信号处理信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。在讨论信号和信号处理之前,先来回顾中断的概念和机制,这有助于正确......
  • Linux基础命令(一)
    cd命令 绝对路径:cd/home/admin查看当前目录:pwd返回上一目录:cd..回到admin:cd~返回倒数第二个目录:cd-ls命令:查看目录内容ls:查看普通文件ls-a:查看所有文件(隐藏文件.xxxx)ls-l(ll):查看文件详细信息ls-lh:人性化显示详细列表ls权限drwxr-xr--:d代表文件夹 -代......
  • Linux常用命令-docker
     1、进入容器: dockercontainerexec-it容器id/bin/bash①直接进入容器中的mongodb:sudodockerexec-itmongomongosh②dockerexec-itcontainerName/bin/bash2、容器开机自启动:①docker开机自启动:systemctlenabledocker.servic......