摘要:本文介绍了如何使用“iptables -A”命令添加 iptables 防火墙规则。

本文分享自华为云社区《Linux IPTables:如何添加防火墙规则(使用允许 SSH 示例)》,作者:Tiamo_T 。

本文介绍了如何使用“iptables -A”命令添加 iptables 防火墙规则。

“-A”用于追加。如果它让你更容易记住“-A”作为添加规则(而不是附加规则),那就没问题了。但是,请记住,“-A”在链的末尾添加了规则。

同样,记住 -A 在末尾添加规则非常重要。

通常,最后一条规则是丢弃所有数据包。如果您已经有一个丢弃所有数据包的规则,并且如果您尝试在命令行中使用“-A”来创建新规则,您最终会在当前的“丢弃所有数据包”规则之后添加新规则,这将使您的新规则几乎毫无用处。

一旦您掌握了 iptables,并且当您在生产中实现它时,您应该使用 shell 脚本,您可以在其中使用 -A 命令添加所有规则。在那个 shell 脚本中,你的最后一行应该总是“丢弃所有数据包”规则。当您想要添加任何新规则时,请修改该 shell 脚本并将您的新规则添加到“丢弃所有数据包”规则之上。

句法:

iptables -A chain firewall-rule
  • -A 链 - 指定应附加规则的链。例如,对传入数据包使用 INPUT 链,对传出数据包使用 OUTPUT。
  • firewall-rule – 各种参数构成防火墙规则。

如果您不知道链是什么意思,最好先阅读iptables 基础知识

防火墙规则参数

以下参数可用于所有类型的防火墙规则。

-p 用于协议

  • 指示规则的协议。
  • 可能的值为 tcp、udp、icmp
  • 使用“all”允许所有协议。当您不指定 -p 时,默认情况下将使用“所有”协议。使用“all”并始终指定协议并不是一个好习惯。
  • 使用名称(例如:tcp)或编号(例如:6 表示 tcp)作为协议。
  • /etc/protocols 文件包含所有允许的协议名称和编号。
  • 你也可以使用--protocol

-s 是源

  • 指示数据包的来源。
  • 这可以是 IP 地址、网络地址或主机名
  • 例如:-s 192.168.1.101 表示具体的ip地址
  • 对于网络掩码,使用 /mask。例如:“-s 192.168.1.0/24”表示该网络的网络掩码为 255.255.255.0。这匹配 192.168.1.x 网络。
  • 当您不指定来源时,它将匹配所有来源。
  • 您还可以使用 –src 或 –source

-d 是目的地

  • 指示数据包的目的地。
  • 这与“-s”相同(除了它代表目标主机、IP 地址或网络)
  • 您还可以使用 –dst 或 –destination

-j 是目标

  • j 代表“跳转到目标”
  • 这指定了匹配此防火墙规则的数据包需要发生什么。
  • 可能的值为 ACCEPT、DROP、QUEUE、RETURN
  • 您还可以指定其他用户定义的链作为目标值。

-i 用于接口

  • i 代表“输入接口”
  • 您可能会忽略这一点并假设“-i”用于接口。请注意 -i 和 -o 都用于接口。但是,-i 用于输入接口,-o 用于输出接口。
  • 指示传入数据包通过 INPUT、FORWARD 和 PREROUTING 链进入的接口。
  • 例如:-i eth0 表示此规则应考虑通过接口 eth0 传入的数据包。
  • 如果您不指定 -i 选项,则系统上所有可用的接口都将被考虑用于输入数据包。
  • 您也可以使用 –in-interface

-o 用于输出接口

  • o 代表“输出接口”
  • 指示通过 INPUT、FORWARD 和 PREROUTING 链发送传出数据包的接口。
  • 如果您不指定 -o 选项,则系统上所有可用的接口都将被视为输出数据包。
  • 你也可以使用--out-interface

防火墙参数的附加选项

上面的一些防火墙参数依次具有可以与它们一起传递的自己的选项。以下是一些最常见的选项。

要使用这些参数选项,您应该在防火墙规则中指定相应的参数。例如,要使用“–sport”选项,您应该在防火墙规则中指定“-p tcp”(或“-p udp”)参数。

注意:所有这些选项前面都有两个破折号。例如,sport 前面有两个连字符。

–sport 用于源端口(用于 -p tcp 或 -p udp)

  • 默认情况下,所有源端口都匹配。
  • 您可以指定端口号或名称。例如,要在防火墙规则中使用 SSH 端口,请使用“–sport 22”或“–sport ssh”。
  • /etc/services 文件包含所有允许的端口名称和编号。
  • 在规则中使用端口号比使用端口名更好(为了性能)。
  • 要匹配端口范围,请使用冒号。例如,22:100 匹配从 22 到 100 的端口号。
  • 您也可以使用 –source-port

–dport 用于目标端口(用于 -p tcp 或 -p udp)

  • 一切都与 –sport 相同,除了这是针对目标端口。
  • 您也可以使用 –destination-port

–tcp-flags 用于 TCP 标志(用于 -p tcp)

  • 这可以包含以逗号分隔的多个值。
  • 可能的值有:SYN、ACK、FIN、RST、URG、PSH。您也可以使用 ALL 或 NONE

–icmp-type 用于 ICMP 类型(用于 -p icmp)

  • 当您使用icmp协议“-p icmp”时,您还可以使用“-icmp-type”参数指定ICMP类型。
  • 例如:“-icmp-type 0”用于“Echo Reply”,“-icmp-type 8”用于“Echo”。

允许传入 SSH 连接的示例防火墙规则

现在您了解了防火墙规则的各种参数(及其选项),让我们构建一个示例防火墙规则。

在这个例子中,让我们只允许传入的 SSH 连接到服务器。所有其他连接都将被阻止(包括 ping)。

警告:使用防火墙规则可能会导致您的系统无法访问。如果您不知道自己在做什么,您可能会将自己(和其他所有人)锁定在系统之外。因此,仅在没有人使用的测试系统上进行所有学习,并且如果您被锁定,您可以访问控制台以重新启动 iptables。

1. 删除现有规则

如果您已经有一些 iptables 规则,请在删除现有规则之前进行备份。

删除所有现有规则并允许防火墙接受所有内容。使用我们之前讨论过的iptables flush清理所有现有规则并从头开始。

测试以确保您能够从外部 ssh 和 ping 此服务器。

完成此示例后,您将只能通过 SSH 连接到此服务器。您将无法从外部 ping 此服务器。

2. 只允许 SSH

仅允许与此服务器的传入 SSH 连接。您可以从任何地方通过 ssh 连接到此服务器。

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

上面的 iptables 命令有以下 4 个组件。

  • “-A INPUT”——这表明我们正在向 INPUT 链追加(或添加)一条新规则。因此,此规则适用于传入流量。
  • “-i eth0” – 将根据此规则检查通过接口 eth0 的传入数据包。
  • “-p tcp –dport 22” – 此规则适用于 TCP 数据包。这有一个名为“-dport 22”的 tcp 选项,它表示服务器上此规则的目标端口是 22(即 ssh)。
  • “-j ACCEPT”——跳转到接受,它只是接受数据包。

简单来说,上述规则可以表述为:所有通过 eth0 for ssh 传入的数据包都将被接受。

3.丢弃所有其他数据包

一旦您指定了接受数据包的自定义规则,您还应该有一个默认规则来丢弃任何其他数据包。

这应该是您在 INPUT 链中的最后一条规则。

要丢弃所有传入的数据包,请执行以下操作。

iptables -A INPUT -j DROP

4.查看SSH规则和测试

要查看当前的 iptables 防火墙规则,请使用“iptables -L”命令。

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
DROP all -- anywhere anywhere

从上面的输出中可以看出,它依次具有以下两条规则。

  • 接受所有传入的 ssh 连接
  • 丢弃所有其他数据包。

与其从命令行添加防火墙规则,不如创建一个包含规则的 shell 脚本,如下所示。

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP # sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP # iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
DROP all -- anywhere anywhere

与 iptables append/add 命令类似,iptables 可用的其他命令很少。

点击关注,第一时间了解华为云新鲜技术~

Linux IPTables:如何添加防火墙规则的更多相关文章

  1. CMD命令行netsh添加防火墙规则

    1.为e:\f.exe 添加防火墙规则(参考:https://www.cnblogs.com/zhen656/p/4275270.html),需要管理员权限. >netsh advfirewal ...

  2. CentOS 7下iptables配置添加修改规则端口方法(转)

    简介: Linux CentOS 7默认没有安装iptables,默认的防火墙是firewalld,云吞铺子分享CentOS 7系统下iptables安装.iptables规则配置(放行或者禁用端口) ...

  3. 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)

    #!/bin/bash#设置变量定义需要添加到防火墙规则的服务和端口号#使用 firewall-cmd --get-services 可以查看 firewall 支持哪些服务 service=&quo ...

  4. iptables原理及防火墙规则语法基础

     Iptables 防火墙 学习总结: 三张表介绍: filter负责过滤数据包,包括的规则链有,input(进),output(出)和forward(转发); nat则涉及到网络地址转换,包括的规则 ...

  5. 设置主机防火墙规则(iptables规则设置及其与firewalld的生死纠葛)

    一.什么是firewalld防火墙? firewalld防火墙在Linux主机里其实就是一道隔离工具,它只对进出主机的请求做判断处理.也就是说它只管进出,至于你进来后做了什么,就不在firewalld ...

  6. Linux防火墙基础与编写防火墙规则

    Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根 ...

  7. CentOS6.7 防火墙规则(Iptables)

    查看防火墙的状态 /etc/init.d/iptables status 开启防火墙 /etc/init.d/iptables start 关闭防火墙 /etc/init.d/iptables sto ...

  8. Azure上Linux VM误配防火墙的恢复方法

    在实际运维中,防火墙把自己挡在机器外面的情况会时有发生.如何快速的恢复对运维人员是很重要的. 本文将介绍如何用Azure Extension实现不通过ssh对VM进行操作的方法. 之前写过一遍Blog ...

  9. CentOS7 firewalld防火墙规则

    在CentOS7里有几种防火墙共存:firewalld.iptables.ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等. f ...

  10. [moka同学摘录]iptables防火墙规则的添加、删除、修改、保存

    文章来源:http://www.splaybow.com/post/iptables-rule-add-delete-modify-save.html 本文介绍iptables这个Linux下最强大的 ...

随机推荐

  1. PoW、PoS、DPoS和PBFT简介

    1. 概览 PoW(工作量证明).PoS(权益证明).DPoS(委托权益证明)和PBFT(拜占庭容错)是区块链和分布式系统领域中常见的共识算法.下面将详细介绍这些共识算法的原理和特点: PoW(工作量 ...

  2. 谈谈流计算中的『Exactly Once』特性

    本文翻译自 streaml.io 网站上的一篇博文:"Exactly once is NOT exactly the same" ,分析了流计算系统中常说的『Exactly Onc ...

  3. 你还在为SFTP连接超时而困惑么?

    1. 前言 在最近的项目联调过程中,发现在连接上游侧SFTP时总是需要等待大约10s+的时间才会出现密码输入界面,这种长时间的等待直接导致的调用文件接口时连接sftp超时问题.于是决定自己针对该问题进 ...

  4. STM8 STM32 GPIO 细节配置问题

    在MCU的GPIO配置中我们经常需要预置某一 IO 上电后为某一固定电平, 如果恰好我们需要上电后的某IO为高电平, 那么在配置GPIO的流程上面需要特别注意. 配置如下: (以下问题仅在STM8 / ...

  5. Windows Terminal 简单美化

    需要用到的软件/插件 oh-my-posh posh-git PSReadLine 安装 oh-my-posh oh-my-posh 是 shell 主题引擎,使用 winget 来安装 oh-my- ...

  6. Linux下通过AnySetup配置防火墙

    软件 AnySetup 主要功能 主要功能是对Linux操作系统下的基本配置进行管理.多种服务配置进行管理.安全配置进行管理等.如:操作系统的升级管理,软件包的安装.更新和卸载管理,软件仓库源的管理, ...

  7. GitHub Desktop安装与使用教程

    一.安装 1.下载 下载地址 2.安装 下载之后GitHub Desktop是没有安装步骤的,而是开始安装之后,稍等片刻就安装成功了. 然后登陆个人GitHub账号就可以进行一下操作了. 二.新建仓库 ...

  8. [ABC263C] Monotonically Increasing

    Notes For two integer sequences of the same length $A_1,A_2,\dots,A_N$ and $B_1,B_2,\dots,B_N$, $A$ ...

  9. [ABC274G] Security Camera 3

    Problem Statement There is a grid with $H$ rows from top to bottom and $W$ columns from left to righ ...

  10. tomact

    常见的java相关的web服务器软件:   *webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费.   *webSphere:IBM公司,大型的JavaEE ...