Linux 防火墙 iptables 初学者教程

本文涉及的产品
云防火墙,500元 1000GB
简介: iptables 是专为 Linux 操作系统打造的极其灵活的防火墙工具。对 Linux 极客玩家和系统管理员来说,iptables 非常有用。本文将向你展示如何配置最通用的 Linux 防火墙。

image.png

iptables 是专为 Linux 操作系统打造的极其灵活的防火墙工具。对 Linux 极客玩家和系统管理员来说,iptables 非常有用。本文将向你展示如何配置最通用的 Linux 防火墙。

关于 iptables

iptables 是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables 会查找其对应的匹配规则。如果找不到,iptables 将对其采取默认操作。

几乎所有的Linux发行版都预装了 iptables。在 Ubuntu/Debian 中更新/安装 iptables 的命令为:

sudo apt-get install iptables

现有的一些图形界面软件也可以替代 iptables,如 Firestarter。但 iptables 用起来并不难。配置 iptables 的规则时要特别小心,特别是在你远程登陆服务器的时候。因为这时的一个错误有可能让你和服务器永久失去连接,而你必须要到服务器面前才能解决它。


iptables规则链的类型

iptables 的规则链分为三种:输入、转发和输出。

  • 输入——这条链用来过滤目的地址是本机的连接。例如,如果一个用户试图使用 SSH 登陆到你的 PC/服务器,iptables 会首先匹配其 IP 地址和端口到 iptables 的输入链规则。
  • 转发——这条链用来过滤目的地址和源地址都不是本机的连接。例如,路由器收到的绝大数数据均需要转发给其它主机。如果你的系统没有开启类似于路由器的功能,如 NATing,你就不需要使用这条链。
    有一个安全且可靠的方法可以检测你的系统是否需要转发链:

iptables -L -v

image.png

  • 上图是对一台已经运行了几个星期的服务器的截图。这台服务器没有对输入和输出做任何限制。从中可以看到,输入链和输出链已经分别处理了 11 GB 和 17 GB 的数据,而转发链则没有处理任何数据。这是因为此服务器没有开启类似于路由器的转发功能。
  • 输出——这条链用来过滤源地址是本机的连接。例如,当你尝试 ping howtogeek.com 时,iptables 会检查输出链中与 ping 和 howtogeek.com 相关的规则,然后决定允许还是拒绝你的连接请求。

注意:当 ping 一台外部主机时,看上去好像只是输出链在起作用。但是请记住,外部主机返回的数据要经过输入链的过滤。当配置 iptables 规则时,请牢记许多协议都需要双向通信,所以你需要同时配置输入链和输出链。人们在配置 SSH 的时候通常会忘记在输入链和输出链都配置它。


链的默认行为

在配置特定的规则之前,也许你想配置这些链的默认行为。换句话说,当 iptables 无法匹配现存的规则时,你想让它作出何种行为。

你可以运行如下的命令来显示当前 iptables 对无法匹配的连接的默认动作:

iptables -L

image.png

正如上面所显示的,我们可以使用 grep 来使输出的结果变得更加简洁。在上面的截图中,所有的链默认情况下均接受所有的连接。

通常情况下,你会希望你的系统默认情况下接收所有的网络数据。这种设定也是 iptables 的默认配置。接收网络连接的配置命令是:

iptables --policyINPUT ACCEPT

iptables --policy OUTPUT ACCEPT

iptables --policy FORWARD ACCEPT

你也可以在使用默认配置的情况下,添加一些命令来过滤特定的 IP 地址或端口号。我们稍后在本文介绍这些命令。

如果你想默认情况下拒绝所有的网络连接,然后在其基础上添加允许的 IP 地址或端口号,你可以将默认配置中的 ACCEPT 变成 DROP,如下图所示。这对于一些含有敏感数据的服务器来说是极其有用的。通常这些服务器只允许特定的 IP 地址访问它们。

iptables --policy INPUTDROP

iptables --policy OUTPUTDROP

iptables --policy FORWARD DROP


对特定连接的配置

下面来看看如何对特定的 IP 地址或端口作出设定。本文主要介绍三种最基本和常见的设定。

  • Accept – 接收所有的数据。
  • Drop – 丢弃数据。应用场景:当你不想让数据的来源地址意识到你的系统的存在(最好的处理方法)。
  • Reject – 不允许建立连接,但是返回一个错误回应。应用场景:当你不想让某个 IP 地址访问你的系统,但又想让它们知道你的防火墙阻止了其访问。

为了直观的区分上述三种情况,我们使用一台 PC 来 ping 一台配置了 iptables 的 Linux 电脑:

允许访问:

image.png

丢弃访问:

image.png

拒绝访问:

image.png


允许或阻止特定的连接

在配置完基本的规则链之后,你就可以配置 iptables 来允许或者阻止特定的 IP 地址或者端口。

注意:在这些例子中,我们使用 iptables -A 将额外的规则添加到现存的链中。Iptables 在执行匹配的时候,会从列表的顶端开始搜索。你可以使用 iptables -I [chain] [number] 将新的规则插入到列表的指定位置。


来自同一 IP 地址的连接

下面这个例子展示了如何阻止来自 IP 地址为 10.10.10.10 的所有连接。

iptables -AINPUT -s 10.10.10.10 -j DROP

来自一组 IP 地址的连接

下面这个例子展示了如何阻止来自子网 10.10.10.0/24 内的任意 IP 地址的连接。你可以使用子网掩码或者标准的/符号来标示一个子网:

iptables -A INPUT -s 10.10.10.0/24 -j DROP

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

特定端口的连接

这个例子展示了如何阻止来自 10.10.10.10 的 SSH 连接

iptables -AINPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

你可以将“ssh”替换成其它任何协议或者端口号。上述命令中的 -p tcp 告诉 iptables 连接使用的是何种协议。

下面这个例子展示了如何阻止来自任意 IP 地址的 SSH 连接

iptables -AINPUT -p tcp --dport ssh -j DROP

连接状态

我们之前提到过,许多协议均需要双向通信。例如,如果你打算允许 SSH 连接,你必须同时配置输入和输出链。但是,如果你只想允许来自外部的 SSH 请求,那该怎么做?

下面这个例子展示了如何允许源 IP 地址为 10.10.10.10 同时阻止目的地址为 10.10.10.10 的 SSH 连接:

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

保存更改

上述方法对 iptables 规则作出的改变是临时的。如果你想永久保存这些更改,你需要运行额外的命令(不同 Linux 发行版下的保存命令也不相同):


Ubuntu

sudo /sbin/iptables-save

Red Hat / CentOS

/sbin/service iptables save

或者

/etc/init.d/iptables save

其它命令

列出 iptables 的当前配置:

iptables -L

使用 -v 选项将显示数据包和字节信息;使用 -n 选项将以数字形式列出信息,即不将 IP 地址解析为域名。

换句话讲,主机名,协议和网络都以数字的形式列出。

清除当前所有的配置规则:

iptables -F

相关文章
【Linux】vim使用与配置教程
Vim是一款功能强大的文本编辑器,广泛应用于Linux环境,是开发者和系统管理员的必备工具。本文介绍了Vim的基本操作与简单配置,涵盖命令模式、插入模式和底行模式的使用方法,以及光标定位、复制粘贴、搜索替换等常用技巧。同时,文章还提供了实用的分屏操作和代码注释方法,并分享了通过`.vimrc`文件进行个性化配置(如显示行号、语法高亮、自动缩进等)的技巧,帮助用户提升文本编辑效率。掌握这些内容,能让Vim更好地服务于日常工作与开发需求。
48 3
|
25天前
|
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
本文详细介绍了在VMware虚拟机中安装CentOS 6.8的全过程。首先,需确保已安装VMware并开启V-CPU虚拟化功能,可通过BIOS设置或使用LeoMoon CPU-V工具检测。接着,下载CentOS镜像文件,并在VMware中新建虚拟机,配置CPU、内存、硬盘等参数。最后,加载ISO镜像启动虚拟机,按照提示完成CentOS的安装,包括语言、键盘、存储方式、地区、密码设置及硬盘分区等步骤。安装完成后,以root用户登录即可进入系统桌面,开始学习Linux命令和操作。
106 12
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
|
2月前
|
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
116 32
|
2月前
|
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
64 20
|
2月前
|
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
65 16
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
245 28
Linux磁盘挂接教程
Linux磁盘挂接教程
84 14
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
101 1
|
4月前
|
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
145 0