iptables教程

1.iptables安装

1.1 iptables和iptables-service的关系

iptables 是基于内核的,和 iptables-services 没有关系,不用安装任何工具包就可以使用 iptable 命令添加的防火墙规则,

但是iptables添加的规则是临时的,基于内存的,在系统重启后会消失,所以需要 iptables.service 服务来对添加的规则进行保存,

这样在系统重启后重载对应的防火墙规则。

1.2 安装iptables和iptables-service

第一步:1、关闭防火墙
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

第二步:查看 iptables 是否安装,安装iptables-services
[root@localhost ~]# rpm -qa iptables
iptables-1.4.21-34.el7.x86_64                              # 系统默认装有 iptables
[root@localhost ~]# yum install iptables                   # 有新版本会安装最新版本
[root@localhost ~]# rpm -qa iptables
iptables-1.4.21-35.el7.x86_64
[root@localhost ~]# yum install iptables-services          # 安装 iptables-services 
[root@localhost ~]# rpm -qa iptables-services
iptables-services-1.4.21-35.el7.x86_64

第三步:启动iptables
[root@localhost ~]# systemctl enable iptables.service        # 设置 iptables 开机启动
[root@localhost ~]# systemctl start iptables                 # 开启 iptables
[root@localhost ~]# systemctl status iptables                # 查看 iptables 状态
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
   Active: active (exited) since Fri 2023-10-06 13:05:53 CST; 2s ago
   
第四步:#防火墙相关模块 加载到内核中,写入到开机自启动.
cat >> /etc/rc.local <<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state 
EOF
sysctl -p

2.查看 iptables 的链和规则

查看规则的命令格式为:

iptables [-t tables] [-L] [-nv]

-t :后面接 table ,filter/nat/mangle ,若省略此项目,则使用默认的 filter

-L :列出某个 table 的所有链或某个链的规则

-n :直接显示 IP,速度会快很多

-v :列出更多的信息,包括通过该规则的数据包总位数、相关的网络接口等

列出 filter table INPUT 链的规则:

$ sudo iptables -L INPUT

列出 nat table 三条链的规则:

$ sudo iptables -t nat -L -n

列出 filter table 三条链的规则:

$ sudo iptables -L

红框中的内容为链的名称及其默认策略,filter 表中所有链的默认策略都是 ACCEPT。红框下面的行代表什么呢?

target:代表进行的动作,ACCEPT 是放行,REJECT 是拒绝,DROP 则是丢弃数据包。

port:代表使用的协议,主要有 tcp、udp 和 icmp 三种。

opt:额外的选项说明。

source:规则针对的来源 IP。

destination:规则针对的目标 IP。

因为默认情况下没有添加自定义的规则,所以上图中这些行下面都是空的。

3.清除本机防火墙规则

清除规则的命令格式如下:

iptables [-t tables] [-FXZ]

-F:清除所有已制定的规则

-X:删除所有使用者自定义的 chain(其是 tables)

-Z:将所有的 chain 的计数与流量统计都清零

如果我们要制订一套防火墙规则,一般会先清除现有的规则,然后从头开始创建新的规则。下面让我们清除本机 filter 表中的所有规则:

$ sudo iptables -F

$ sudo iptables -X

$ sudo iptables -Z

4.定义默认策略(policy)

如果一个数据包没有匹配到一个链中的任何一个规则,那么将对该数据包执行这个链的默认策略(default policy),默认策略可以是 ACCEPT 或 DROP。

链中默认策略的存在使得我们在设计防火墙时可以有两种选择:

设置默认策略 DROP 所有的数据包,然后添加规则接受(ACCEPT)来自可信 IP 地址的数据包,或访问我们的服务监听的端口的数据包,比如 bittorrent、FTP 服务器、Web 服务器、Samba 文件服务器等等。

设置默认策略 ACCEPT 所有的数据包,然后添加规则丢弃(DROP)特定的数据包。比如来自一些恶意 IP 的数据包,或访问某些端口的数据包,在这些端口上我们并没有提供公开的服务。

一般情况下,上面的第一个选项用于 INPUT 链,因为我们希望对访问的资源进行权限控制。而第二个选项常用于 OUTPUT 链,因为我们通常信任离开机器的数据包(该数据包来自本机)。

设置默认策略的命令格式如下:

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

-P 选项用来定义默认策略(Policy)。注意,这是大写字母 P。ACCEPT 表示接受数据包,DROP 表示丢弃数据包。

一般情况下,我们会把 filter 表的 INPUT 链的默认策略制订的严格一些,比如设为 DROP。而 FORWARD 和 OUTPUT 可以宽松些,设为 ACCEPT。比如我们可以通过下面的命令把 filter 表的 INPUT 链的默认策略设置为 DROP:

$ sudo iptables -P INPUT DROP

5.添加规则

我们可以通过规则来匹配数据包,具体的匹配条件包括 IP、网段、网络接口(interface)和传输协议(tcp、udp 等)。

添加规则的命令格式如下:

iptables [-t tables] [-AI chain] [-io interface] [-p 协议] [-s 来源 IP] [-d 目标 IP] -j [ACCEPT,DROP,REJECT,LOG]

-t :后面接 table ,filter/nat/mangle ,若省略此项目,则使用默认的 filter

-A:针对某个规则链添加一条规则,新添加的规则排在现有规则的后面。

-I:针对某个规则链插入一条规则,可以为新插入的规则指定在链中的序号。如果不指定序号,则新的规则会变成第一条规则。

-i:指定数据包进入的那个网络接口,比如 eth0、lo 等,需要与 INPUT 链配合使用。

-o: 指定传出数据包的那个网络接口,需要与 OUTPUT 链配合使用。

-p: 指定此规则适用于那种网络协议(常用的协议有 tcp、udp、icmp,all 指适用于所有的协议)。

-s:指定数据包的来源 IP/网段,可以指定单个 IP,如 192.168.1.100,也可以指定一个网段,如 192.168.1.0/24。还可以通过 !表示非的意思,如 ! 192.168.1.0/24 表示除了 192.168.1.0/24 之外的数据包。

-d:指定数据包的目标 IP/网段,其它与 -s 选项相同。

--sport:限制来源的端口号,可以是单个端口,也可以是一个范围,如 1024:1050

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

-j:指定匹配成功后的行为,主要有 ACCEPT、DROP、REJECT 和 LOG。

下面我们来看几个例子。

放开本机接口 lo:

$ sudo iptables -A INPUT -i lo -j ACCEPT

只接受来自内网中某个网段的数据包:

$ sudo iptables -A INPUT -i eth2 -s 192.168.10.0/24 -j ACCEPT

接受/丢弃来自指定 IP 的数据包:

$ sudo iptables -A INPUT -i eth3 -s 192.168.100.5 -j ACCEPT

$ sudo iptables -A INPUT -i eth3 -s 192.168.100.6 -j DROP

利用 ! 进行排除,源ip不是172.16.1.0/24的都丢弃

$ sudo iptables -A INPUT ! -s 172.16.1.0/24  -j DROP

注意,因为只有 tcp 协议和 udp 协议使用了端口号,所以在使用 --sport 和 --dport 时,一定要指定协议的类型(-p tcp 或 -p udp)。

$ sudo iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

丢弃所有通过 tcp 协议访问本机 80,443 端口的数据包:

$ sudo iptables -A INPUT -m multiport -p tcp --dport 80,443 -j DROP

丢弃来自 192.168.1.0/24 的 1024:65535 端口的访问本机 ssh 端口的数据包:

$ sudo iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP

禁止192.168.1.9/24 ping本机

$ sudo iptables -A INPUT -s 192.168.1.9/24 -p icmp -j DROP

查看 filter 表的规则:

$ sudo iptables -L -v

iptables-save 命令提供了另外一种风格的输出:

$ sudo iptables-save

6.自定义链

下面是一个抵御洪水攻击的案例:

1.在filter表中建一个名为tcp_packets的链:

iptables -N syn-flood

2.然后可以在自定义链中添加规则:

iptables -A syn-flood -m limit --limit 100/s --limit-burst 150 -j RETURN

iptables -A syn-flood -j DROP

3.然后再把它作为jump的目标,这样我们就会从INPUT链跳入syn-flood链:

#iptables -I INPUT -j syn-flood 

7.常见的插件模块

7.1 state模块,匹配网络状态(TCP/IP连接状态)

iptables -A INPUT [-m state] [--state INVALID,ESTABLISHED,NEW,RELATED]

  • NEW:已经或将启动新的连接
  • ESTABLISHED:已建立的连接
  • RELATED:正在启动的新连接
  • INVALID:非法或无法识别的

只要是已建立连接或正在启动的新连接接受:

$ sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

$ sudo iptables -A OUPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

7.2 limit模块,限制并发及速率

iptables -A INPUT --limit 3/minute --limit-burst 5

意思是开始时有5个通行证,用完之后,1分钟只生成3个令牌,即每20秒生成一个,

这期间没有剩余令牌的时候,到来的封包,无法匹配此条规则,就会继续往下匹配其他规则,

如果有令牌了,则新到的封包就会匹配此条规则

--limit 指定要隔多长时间才能签发一个新的通行证。

--limit-burst 指定刚开始时有多少通行证可用,不指定默认为5

iptables -F iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -P INPUT DROP

上面代码执行后,其他几台机器同时ping此台机器,刚开始的时候,几台机器加起来有5个ping有回应,后面就每隔6秒才有某一台的ping有回应 

8.保存 iptables 的配置

注意,我们通过 iptables 命令设置的规则都保存在内存中,也就是说系统重启的话所有的配置都会丢失。

我们可以通过 iptables-save 命令把 iptables 的配置保存到文件中:

$ sudo iptables-save > /etc/sysconfig/iptables

在需要时再通过 iptables-restore 命令把文件中的配置信息导入:

$sudo iptables-restore < /etc/sysconfig/iptables

9.生产环境中iptables的设置

1.默认策略(policy)应该是DROP(应该先放行远程登录等一系列权限后,再设置默认策略,防止拒绝远程连接)

#清空默认规则(iptables -F命令会把所有规则情况,但是不会修改默认规则,如果默认规则当前是DROP,执行iptables -F会导致立马无法连接机器,因为所有数据包都被拒绝了) iptables -F #1.允许本机回环lo接口数据流量流出与流入 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT #2.允许ssh连接 iptables -A INPUT -p tcp --dport ssh -j ACCEPT #3.允许访问本机80,443端口 iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT #4.修改INPUT链默认的规则为拒绝 iptables -P INPUT DROP #5.内存里规则保存到默认的规则文件里 iptables-save > /etc/sysconfig/iptables

10.iptables 实现NAT功能

10.1 NAT实现内部服务器提供上网功能

iptables -t nat -A POSTROUTING  -s 172.16.1.7   -j SNAT  --to-source 10.0.0.61

1. 指定nat表,配置POSTROUTING链

2. 源ip是172.16.1.7这台主机进行共享上网,如果是多台(-s 172.16.1.0/24)

3. 指定使用SNAT功能,源地址转换.

4. 通过SNAT功能把数据包中的源ip地址改为防火墙公网的ip地址.(10.0.0.61)

5.如果公网ip不固定, -j SNAT --to-source 10.0.0.61 可以写为 -j MASQUERADE 伪装成公网ip.

环境介绍:

172.16.1.7 想要上网的机器,有2个网卡,eth0为外围,eth1为内网

172.16.1.61 实现NAT功能的防火墙机器,eth0为外围,eth1为内网

172.16.1.7 操作步骤

1.把机器上能上网的网卡关闭

sed -i 's/ONBOOT=yes/ONBOOT=no/' /etc/sysconfig/network-scripts/ifcfg-eth0

2.把不能上网的这张网卡配一个网关地址,地址为实现NAT的防火墙机器IP

vim eth1

GATEWAY=172.16.1.61

3.重启network

systemctl restart network

172.16.1.61操作步骤

1.由于是要把数据从eth1网卡转发到eth1,所以要开启ip_forward功能(内核转发功能)

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

sysctl -p

2.防火墙转发规则配置

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

测试:

172.16.1.7 上ping 8.8.8.8看能不能通

10.2 NAT实现外部访问相应的端口转发到内部特定的端口(端口映射)

iptables -t nat -A PREROUTING -p tcp --dport 6666 -j DNAT --to-destination 172.16.1.7:80

只要访问本机的6666端口,就会把请求转发到 172.16.1.7:80端口

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SK海力士计划于2024年第四季度启动GDDR7大规模生产

SK海力士&#xff0c;作为HBM市场的领头羊&#xff0c;于6月13日宣布&#xff0c;公司目标于2024年第四季度开始其GDDR7芯片的大规模生产。 与此同时&#xff0c;美光科技在Computex展会上也宣布推出其GDDR7图形内存&#xff0c;目前正处于样品测试阶段。据AnandTech报道&#…

CRC计算单元

CRC计算单元 CRC是Cyclic Redundancy Check,循环冗余校验的缩写. 是一种检测数据错误的技术,主要用在数据通信和数据存储的方面. 但是这种技术只能检测到传输或存储的数据是否有误,没有将错误纠正的功能. 而CRC计算单元是一个独立的具备CRC计算功能的外设. AT32 MCU片上CRC计…

当JS遇上NLP:开启图片分析的奇幻之旅

前言 在当今科技飞速发展的时代&#xff0c;JavaScript&#xff08;JS&#xff09;作为广泛应用的编程语言&#xff0c;展现出了强大的活力与无限的可能性。与此同时&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也正在经历着深刻的变革与进步。 当这两者碰撞在一…

phpcms仿蚁乐购淘宝客网站模板

phpcms仿蚁乐购网站模板&#xff0c;淘宝客行业模板免费下载&#xff0c;该模板网站很容易吸引访客点击&#xff0c;提升ip流量和pv是非常有利的。本套模板采用现在非常流行的全屏自适应布局设计&#xff0c;且栏目列表以简洁&#xff0c;非常时尚大气。页面根据分辨率大小而自…

《现代通信原理与技术》--数字信号的最佳接收实验报告

《现代通信原理与技术》 数字信号的最佳接收实验报告 实 验&#xff1a;数字信号的最佳接收实验报告 目录 摘要......................................................................................................3 引言........................................…

Linux---系统的初步学习【 项目二 管理Linux文件和目录】

项目二 管理Linux文件和目录 2.1项目知识准备 ​ 文件是存储在计算机上的数据集合。在Windows系统中&#xff0c;我们理解的文件可以是文本文档、图片、程序、音乐、视频等。在Linux中&#xff0c;一切皆文件&#xff0c;也就是除了Windows中所理解的文件&#xff0c;目录、字…

如何申请小程序SSL证书

在互联网时代&#xff0c;数据安全和用户隐私保护变得尤为重要。SSL证书作为网站、应用或小程序与用户之间建立安全连接的关键工具&#xff0c;其重要性不言而喻。SSL证书能够加密数据传输&#xff0c;防止信息被窃取&#xff0c;提升用户信任度&#xff0c;对于小程序开发者来…

u-boot(六) - 详细启动流程

一&#xff0c;u-boot启动第一阶段 1&#xff0c;启动流程 ENTRY(_start) //arch/arm/lib/vectors.S ----b resets //arch/arm/cpu/armv7/start.S --------b save_boot_params ------------b save_boot_params_ret //将cpu的工作模式设置为SVC32模式&#xff08;即管理模式&a…

【PHP开发工程师系统性教学】——thinkPHP的分页操作,不管有几页,用这个你想分几页就分几页

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

力扣384. 打乱数组

Problem: 384. 打乱数组 文章目录 题目描述思路复杂度Code 题目描述 思路 打乱数组的主要算法&#xff1a; 从1 - n每次生成[i ~ n - i]的一个随机数字&#xff0c;再将原数组下标位置为i的元素和该随机数字位置的元素交换 复杂度 打乱数组的主要算法 时间复杂度: O ( n ) O(…

YOLOv8可视化界面,web网页端检测

YOLOv8可视化界面&#xff0c;web网页端检测。支持图片检测&#xff0c;视频检测&#xff0c;摄像头检测等&#xff0c;支持检测、分割等多种任务&#xff0c;实时显示检测画面。支持自定义数据集&#xff0c;计数&#xff0c;……

编译原理:语法分析

目录 引言上下文无关文法 CFG: Context-Free Grammar定义推导方法最左推导和最右推导 分析树分析树->抽象语法树常见的上下文无关文法文法设计二义性文法扩展巴科斯范式&#xff1a;EBNF extended Backus Normal Form 文法和语言分类相关术语直接推导推导*推导句型、句子、语…

酷开科技丨酷开系统智慧中心,解锁AI智能家居生活的无限可能

想象一下&#xff0c;未来的AI电视不再是冷冰冰的机器&#xff0c;而是家庭的智能伙伴。它学习你的喜好&#xff0c;预测你的需求&#xff0c;用声音和触感与你交流。它控制家中的灯光、温度&#xff0c;甚至帮你订购生活用品。 在探索智能家居的未来发展时&#xff0c;酷开系…

计算机图形学入门11:图形管线与着色器

1.什么是图形管线 把场景中的物体经过一系列的处理&#xff0c;最后一张图像的形式在屏幕上显示出来&#xff0c;这一系列过程就是图形管线(Graphics Pipeline)&#xff0c;也叫实时渲染管线(Real-time Rendering Pipeline)。如下图所示&#xff0c;为整个渲染管线的过程。 渲染…

WPF学习(1)--类与类的继承

在面向对象编程中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和方法。继承使我们能够创建一个通用类&#xff0c;然后根据需要扩展或修改它以创建更具体的类。以下是…

基于改进字典学习的旋转机械故障诊断方法(MATLAB)

在过去的二十年里&#xff0c;稀疏表示在各个领域引起了广泛的关注。它的核心思想是将信号描述为尽量少的字典原子&#xff0c;在计算机视觉、生物学、特征提取和机械故障诊断方面显示出强大而可靠的能力。SR通常分为两个步骤&#xff1a;构建字典和学习稀疏系数。对于稀疏系数…

借力AI,助力网络钓鱼(邮件)检测

引言 互联网时代&#xff0c;邮件系统依然是人们工作、生活中的很重要的一部分&#xff0c;与此同时&#xff0c;邮件系统的发展带来的钓鱼邮件问题也成为网络中的最大的安全隐患之一。本文将为大家解开网络钓鱼&#xff08;邮件&#xff09;的神秘面纱&#xff0c;一探究竟&a…

证照之星是一款很受欢迎的证件照制作软件

证照之星是一款很受欢迎的证件照制作软件&#xff0c;证照之星可以为用户提供“照片旋转、裁切、调色、背景处理”等功能&#xff0c;满足用户对证件照制作的基本需求。本站证照之星下载专题为大家提供了证照之星电脑版、安卓版、个人免费版等多个版本客户端资源&#xff0c;此…

软件性能测试基本概述

大家好&#xff0c;在性能测试的世界里&#xff0c;确保软件系统的高效运行至关重要。性能测试不仅仅是为了评估软件系统的性能&#xff0c;更是为了保障用户体验、提高系统稳定性和可靠性。本文将带您一览性能测试的基本概述&#xff0c;从性能测试的定义、重要性&#xff0c;…

OpenGL3.3_C++_Windows(5)

变换 && 3D空间的2D图形 /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/GLM库从0.9.9版本起&#xff0c;默认会将矩阵类型初始化为一个零矩阵&#xff08;所有元素均为0&#xff09;&#xff0c;而不是单位矩阵&#xff08;对角元素为1&#…