Iptables安全防火墙企业实战

news2024/11/20 9:28:37

1. IPtables入门简介

  • Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。Iptables主要工作在OSI七层的二、三、四层。

  • Iptables 是Linux 内核集成的 IP 信息包过滤系统。如果Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

  • Iptables防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

  • 虽然Netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成

  • Netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

  • Iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

//查询系统是否有filter模块
[root@localhost ~]# lsmod | grep filter
iptable_filter         12810  1
br_netfilter           22256  0
bridge                151336  1 br_netfilter
ip_tables              27126  2 iptable_filter,iptable_nat

2. IPtables表与链功能

  • Iptables的规则链分为三种:输入、转发和输出。
  • 输入——这条链用来过滤目的地址是本机的连接。例如,如果一个用户试图使用SSH登陆到你的PC/服务器,iptables会首先匹配其IP地址和端口到iptables的输入链规则。
  • 转发——这条链用来过滤目的地址和源地址都不是本机的连接。例如,路由器收到的绝大数数据均需要转发给其它主机。如果你的系统没有开启类似于路由器的功能,如NATing,你就不需要使用这条链。
  • 输出——这条链用来过滤源地址是本机的连接。例如,当你尝试ping jfedu.net时,iptables会检查输出链中与ping和jfedu.net相关的规则,然后决定允许还是拒绝你的连接请求
  • 注意:当ping一台外部主机时,看上去好像只是输出链在起作用。但是请记住,外部主机返回的数据要经过输入链的过滤。当配置iptables规则时,请牢记许多协议都需要双向通信,所以你需要同时配置输入链和输出链。人们在配置SSH的时候通常会忘记在输入链和输出链都配置它。

3. IPTABLES数据包流程

在这里插入图片描述
数据包先经过PREOUTING,由该链确定数据包走向:

  • 目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①—>②;
  • 若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①—>③—>④—>⑥;
  • 主机发送数据包时,流程则是⑤—>⑥;
  • 其中PREROUTING和POSTROUTING指的是数据包的流向,如上图所示POSTROUTING指的是发往公网的数据包,而PREROUTING指的是来自公网的数据包。
    在这里插入图片描述

4. IPTABLES四张表&五条链

在这里插入图片描述

  • iptables具有Filter, NAT, Mangle, Raw四种内建表。

5. Linux下IPtables下Filter表

Filter表是iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

  • INPUT链 – 处理来自外部的数据;
  • OUTPUT链 – 处理向外发送的数据;
  • FORWARD链 – 将数据转发到本机的其他网卡设备上。

6. Linux下IPtables下NAT表

  • NAT (网络地址转换) 技术在平时是很多见的,如家庭中在使用路由器共享上网时,一般用的就是 NAT 技术,它可以实现众多内网 IP 共享一个公网 IP 上网。
  • NAT 的原理,简单的说就是当内网主机访问外网时,当内网主机的数据包要通过路由器时,路由器将数据包中的源内网 IP 地址改为路由器上的公网 IP 地址,同时记录下该数据包的消息;
  • 外网服务器响应这次由内而外发出的请求或数据交换时,当外网服务器发出的数据包经过路由器时,原本是路由器上的公网 IP 地址被路由器改为内网 IP 。
  • SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如上图所示,如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。NAT表有三种内建链:
  1. PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
  2. POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  3. OUTPUT链 – 处理本机产生的数据包。

7. Linux下IPtables命令图解

在这里插入图片描述

8. Linux下IPtables命令剖析

8.1. 命令

参数解释
-A顺序添加,添加一条新规则
-I插入,插入一条新规则 -I 后面加一数字表示插入到哪行
-R修改, 删除一条新规则 -D 后面加一数字表示删除哪行
-D删除,删除一条新规则 -D 后面加一数字表示删除哪行
-N新建一个链
-X删除一个自定义链,删除之前要保证次链是空的,而且没有被引用
-L查看
-E重命名链
-F清空链中的所有规则
-Z清除链中使用的规则
-P设置默认规则

8.2. 匹配条件

  • 隐含匹配:
参数内容
-ptcp udp icmp
–sport指定源端口
–dport指定目标端口
-s源地址
-d目标地址
-i数据包进入的网卡
-o数据包出口的网卡
  • 扩展匹配:
参数解释
-m state --state匹配状态的
-m mutiport --source-port端口匹配 ,指定一组端口
-m limit --limit 3/minute每三分种一次
-m limit --limit-burst 5只匹配5个数据包
-m string --string --algo bmkmp --string"xxxx"
-mtime–timestart 8:00 --timestop 12:00表示从哪个时间到哪个时间段
-mtime–days表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx匹配源MAC地址
-m layer7 --l7proto qq表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配

8.3. 动作

-j

动作解释
DROP直接丢掉
ACCEPT允许通过
REJECT丢掉,但是回复信息
LOG --log-prefix“说明信息,自己随便定义” ,记录日志
SNAT源地址转换
DNAT目标地址转换
REDIRECT重定向
MASQUERAED地址伪装

9. Linux下IPtables企业案例解析

[root@localhost ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

指令解释
:INPUT ACCEPT [0:0]该规则表示INPUT表默认策略是ACCEP ([ 0:0 ]里记录的就是通过该规则的数据包和字节总数。)
:FORWARD ACCEPT [0:0]该规则表示FORWARD表默认策略是ACCEPT
:OUTPUT ACCEPT [0:0]该规则表示OUTPUT表默认策略是ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT意思是允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。
-A INPUT -i lo -j ACCEPT意思就允许本地环回接口在INPUT表的所有数据通信,-i 参数是指定接口,接口是lo,lo就是Loopback(本地环回接口)
-A INPUT -j REJECT –reject-with icmp-host-prohibited在INPUT表中拒绝所有其他不符合上述的规则的数据包并且发送一条host prohibited的消息给被拒绝的主机。
-A FORWARD -j REJECT --reject-with icmp-host-prohibited在FORWARD表中拒绝所有其他不符合上述的规则的数据包并且发送一条host prohibited的消息给被拒绝的主机。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A 添加一条规则

-j 后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)

--dport 限制目标的端口号码。

-p 协议:设定此规则适用于哪种封包格式 主要的封包格式有: tcp, udp, icmp 及 all 。

-m state –state 模糊匹配一个状态,

NEW 用户发起一个全新的请求

ESTABLISHED 对一个全新的请求进行回应

RELATED 两个完整连接之间的相互关系,一个完整的连接,需要依赖于另一个完整的连接。

INVALID 无法识别的状态

  • iptables是从/etc/sysconfig/iptables中读取规则的,其中默认规则优先级最低,然后就是从上往下开始匹配规则。使用命令创建规则是临时有效的,重启服务规则就失效了,需要执行service iptables save这条命令把规则保存在/etc/sysconfig/iptables文件里。

10.IPtables命令实战

  • WEB服务器,开启80端口
 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • 允许icmp包通过,也就是允许ping
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT 
  • 删除WEB服务器,开启80端口这条规则
//查看规则
[root@localhost ~]# iptables -t filter -L -n --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
7    DROP       icmp --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       icmp --  0.0.0.0/0            0.0.0.0/0
//删除开启80规则
[root@localhost ~]# iptables -t filter -D INPUT 6
数字6是第六条规则
  • 将本机的8080端口转发至其他主机,主机IP:192.168.0.141,目标主机IP和端口:192.168.0.142:80,规则如下
iptables -t nat -A PREROUTING  -d 192.168.0.141/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.142:80

iptables -t nat -A POSTROUTING -d 192.168.0.142/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.141

//开启iptables forward转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
  • 上面的操作执行完成后需要把命令保存至/etc/sysconfig/iptables文件,执行service iptables save

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用通俗易懂的话来解释什么是Socket

前言 我在去年就学习过Java中Socket的使用,但对于Socket的理解一直都是迷迷糊糊的。看了网上很多关于Socket的介绍,看完还是不太理解到底什么是Socket,还是很迷。直到最近在学习计算机网络,我才对Socket有了一个更深地理解。之前…

sqoop数据导出、脚本使用

目录 准备表与数据 数据导出 脚本调用 准备表与数据 mysql表 CREATE TABLE user (id int(20),name varchar(20) )ENGINEINNODB DEFAULT CHARSETutf8; hive表 create table users( id bigint, name string ) row format delimited fields terminated by "\t";…

消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】

1、安装 1.1 拉取镜像 docker pull rabbitmq:management1.2 查看镜像 docker images1.3 创建容器 docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management1.4 浏览器访问 登录进去后的效…

【C++】16.红黑树

1.红黑树 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或B lack。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因而…

UNIAPP实战项目笔记60 前端使用token来验证是否已经登录

UNIAPP实战项目笔记60 前端使用token来验证是否已经登录 获取数据库中用户是否有token值,并存入 store.user.token中,有值代表已经登录 detail页面 通过验证token拦截未登录用户bin跳转到登录页面 实际案例图片 后端接口文件 index.js var express require(express); var rou…

Python-入门基础篇(1)

这里使用的编译器是pycharm 打开pycharm 新建项目 选择一个文件路径(文件名字不要带中文) 新建一个.py 文件 这里就要编写代码啦 Python入门最基础的一些函数 print() 该函数可以输出内容到控制台。在括号中输入要输出的内容,用逗号隔开…

RocketMQ延迟消息源码分析

写作目的 第一个原因:最近玩哔哩哔哩遇到一个RocketMQ的Contributor,一开始不知道他是Contributor,后来问到延迟消息的时候这块还不是很了解,他告诉我学习要系统,你既然了解事务消息那我理解应该也了解延迟消息&#…

BGP路由实验

要求1 使用 Preval 策略 [r4]ip ip-prefix PV permit 192.168.10.0 24 [r4]route-policy PV permit node 10 [r4-route-policy]if-match ip-prefix PV [r4-route-policy]apply preferred-value 100 [r4]route-policy PV permit node 20 [r4-bgp]peer 24.0.0.2 route-policy…

redis网络模型

用户空间和内核空间IO五种IO模型阻塞IO非阻塞IOIO多路复用selectpollepollweb服务流程信号驱动IO异步IOIO模型比较redis网络模型redis为什么是单线程redis单线程网络模型流程用户空间和内核空间 为安全,将用户应用和系统应用分隔开,产生用户空间和内核空…

thanos prometheus 的高可用、长期存储二进制部署

1.简介 http://thanos.io/ thanos 是具有长期存储功能的开源、高可用性 Prometheus的集群组件。 全局查询视图 跨多个 Prometheus 服务器和集群查询指标 无限保留 使用对象存储扩展系统,不限时间保留指标。 Prometheus兼容 兼容 Prometheus api,用于…

我在windows10下,使用msys64 mingw64终端

系列文章目录 文章目录系列文章目录前言一、MSYS2是什么?前言 msys2官网 MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。 同时它也是一个在Cygwin (POSIX 兼容性层&#xff09…

软件测试简历如何编写?还在乱写?精细优化让自己脱颖而出......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 简历是我们向面试官…

教育大数据总体解决方案(6)

触控录播主机集成视频编码、实时导播、音频处理、图像跟踪、电子云台等功能,无需额外的辅助跟踪设备。支持5路视频信号的采集录制、画面自动跟踪及全自动/半自动导播切换,让教师免于分心调控,专注于课堂教学。 整机采取一体化设计及三合一按键…

【数据结构与算法】栈和队列(StackQueue)

TOC 数据结构—栈 栈的概念 要想学习一个东西,概念是一定要看并且理解的,那么栈是个什么玩意呢? 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#x…

v851s g2d 模块 sample 深究

1. g2d 模块概述 g2d 主要功能: 1)旋转:支持90、180、270旋转; 2)镜像反转:H / V; 3) scale:放缩 4)格式转换:yuv 转 rgb 等,多种格式相互间转换; 5)透明叠加功能:实现两个rgb图片叠加; 6)矩形填充,等诸多功能; 2. g2d 配置 1)源码目录:tina-v853-docker/…

Zabbix自定义监控mysql数据库、自动注册服务器及部署代理服务器

目录 一、zabbix自定义监控数据库 1、编写监控脚本 2、服务端测试 3、web页面配置 ①创建自定义监控项 ②创建触发器 ③创建图形 ④测试自定义监控是否成功 二、zabbix自动注册 1、什么是自动注册 2、环境准备 3、 zabbix客户端配置 4、web页面配置自动注册 5、…

Windows系统生产力工具介绍

介绍 本文主要介绍在windows系统上如何安装一些常用的生产力软件,这些软件大多数都是开源免费使用的,包括markdown编辑器、知识管理软件、图片和视频工具、系统工具等,以及程序员专用的开发工具。根据本人的使用经验,将会不定期更…

OpenGL之深入解析屏幕成像和渲染原理

一、CPU 与 GPU CPU 内部组成:GPU 内部组成(ALU:算术逻辑单元,是能实现多组算术运算和逻辑运算的组合逻辑电路):CPU 和 GPU 因为设计之初需求就不一样,所以它们的组成不同,在计算机中的分工也不同。可以看到,GPU 有更多的 ALU,而 CPU 有 Control 单元和 Cache 单元,…

TensorFlow 深度学习第二版:6~10

原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只…

金融风险计量:数据平滑方法及逆平滑分析

摘要及声明 1:本文从风险分析的角度简单介绍数据平滑方式,重点介绍低频数据的逆平滑分析; 2:本文主要数据通过爬虫获取; 3:模型实现基于python3.8; 处理金融数据时我们经常会遇到有噪音的数…