Linux防火墙iptables命令与应用

一、基本概念

Linux防火墙的本质是一个将出入的数据流流量打包起来过一遍筛子,没有设置规则的数据包会被直接丢弃,经过规则的数据包则被放行。

iptables是Linux防火墙的一个工具,用于配置Linux内核的网络数据包过滤表、NAT表和mangle表,控制信息流进流出的控制中心。

iptables规则由链、表、匹配和动作4个基本元素组成:

  • 链:是由预定义名称组成的规则列表,每个数据流都必须经过一个或多个链才能处理。
  • 表:由iptables规则组成的有序规则集合。
  • 匹配:在选择匹配时,iptables会检测数据流中数据包的头部信息(被称作“匹配项”),根据这些信息来匹配数据流
  • 动作:iptables根据匹配结果执行一个动作。

二、iptables基本命令

当需要更新防火墙规则,通常执行如下命令:

iptables -t    [匹配模式] -j 

其中,各个选项的含义如下:

  • -t 表示防火墙表名称,默认为filter表。
  • add表示新增、insert表示插入、append表示追加、delete表示删除、replace表示替换等。
  • 表示在哪个防火墙链中应用规则,通常为INPUT、FORWARD、OUTPUT。
  • [匹配模式] 表示需要对数据流的哪些特定数据包进行防火墙动作。
  • -j 表示进行匹配后应该执行哪个动作。

三、链类型详解

Linux防火墙iptables可以支持3种基本链,每种链都有自己的处理方式和钩子:

  • INPUT:处理目的主机为本机的数据流。
  • OUTPUT:处理源主机为本机的数据流。
  • FORWARD:处理两个不同的主机之间的数据流。通常在一台网关主机上设置,并且该主机需要有两个网卡来处理进入和发出的流量。

四、防火墙规则

4.1默认策略

Linux防火墙iptables可以使用三种默认策略,即DROP、ACCEPT和REJECT。

#将所有规则的默认策略设置为drop
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#将所有规则的默认策略设置为accept
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

REJECT与DROP相似,但是会给源主机发送一个错误响应消息,表示连接被拒绝。这比DROP更加安全,因为DROP会导致连续重试。

4.2 IP地址过滤规则

IP地址过滤是一个黑白名单的过程,在这个过程中,iptables会根据源IP地址和目的IP地址来过滤数据包。例如:

#允许来自192.168.1.4的TCP连接
iptables -A INPUT -s 192.168.1.4 -p tcp -j ACCEPT

#禁止来自192.168.1.6的UDP连接
iptables -A INPUT -s 192.168.1.6 -p udp -j DROP

#将指定的IP地址列入黑名单
iptables -A INPUT -s 192.168.1.5 -j DROP

4.3 端口过滤规则

iptables也可以根据端口号过滤数据包,允许或者禁止指定端口的访问:

#允许来自B主机的80、8080端口的TCP连接
iptables -A INPUT -s 192.168.1.5 -p tcp --dport 80,8080 -j ACCEPT

#禁止所有的3389端口的TCP连接
iptables -A INPUT -p tcp --dport 3389 -j DROP

4.4 发送标记(Masquerading)

使用iptables的Masquerading规则来允许防火墙主机将内部IP地址转换为公共IP地址(NAT):

#允许eth1上的IP地址能够访问外部网络,将其IP地址发送标记
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

4.5 内部端口转发规则

当需要将外部请求转发到内部网络的指定端口时,可以使用iptables的端口转发规则:

#将外部TCP请求转发到本机的8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

五、常见问题及解决方案

5.1 如何永久保存iptables设置?

为了防止重启系统而导致iptables规则被重置,需要执行如下步骤永久保存iptables设置:

#安装iptables-persistent
sudo apt-get install iptables-persistent

#保存当前的规则
sudo netfilter-persistent save

#重新加载已经保存过的规则
sudo netfilter-persistent reload

5.2iptables不生效怎么办?

当iptables设置不生效时,有一些常见的原因和解决方法:

  • 检查设置的规则是否正确,可以通过iptables -L命令查看规则。
  • 检查规则的顺序是否正确,规则以顺序执行。
  • 检查iptables服务是否已经启动,可以通过systemctl status iptables查看iptables服务的运行状态。
  • 检查是否有其他的程序干扰iptables规则的生效,例如firewalld和ufw。

5.3 如何使用iptables限制SSH登录次数?

为了防止SSH暴力破解,需要设置iptables来限制登录次数:

#将所有SSH登录请求发送到另一个新链进行处理
iptables -N SSH_CHECK

#将SSH连接计数器设置为0
iptables -A SSH_CHECK -m recent --name SSH --set --rsource -j DROP

#当连接次数达到限制时,禁止SSH登录
iptables -A SSH_CHECK -m recent --name SSH --update --seconds 60 --hitcount 3 --rsource -j DROP

#将SSH_CHECK链接到INPUT链
iptables -A INPUT -p tcp --dport ssh -j SSH_CHECK

六、结论

iptables是一个强大的工具,可以使系统更加安全,但同时也需要仔细考虑规则的设置,以确保应用程序的正常运行。

原创文章,作者:RCKHB,如若转载,请注明出处:https://www.506064.com/n/363899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
RCKHBRCKHB
上一篇 2025-03-12 18:48
下一篇 2025-03-12 18:48

相关推荐

  • Python命令大全及说明

    Python是一种高级编程语言,由Guido van Rossum于1989年底发明。它具有良好的语法结构和面向对象的编程思想,具有简洁、易读、易学的特点,是初学者以及专业开发人员…

    编程 2025-04-29
  • Git config命令用法介绍:用正确的邮箱保障开发工作

    本文将详细介绍如何使用git config命令配置Git的全局和本地用户信息,特别是如何正确使用用户邮箱,保障Git操作的正常进行。 一、git config命令介绍 Git中的每…

    编程 2025-04-29
  • Python SSH 远程执行命令

    Python SSH 远程执行命令是指在一个服务器上执行远程另一个服务器上命令。如果你需要在本地机器上执行命令,或者在远程机器上执行本地命令,你都可以使用 SSH。在 Python…

    编程 2025-04-29
  • 剖析命令执行函数

    在编程开发过程中,命令执行函数是非常常见的一个概念。它是指接受一个命令字符串,并将其解析执行,返回相应的结果或错误信息的函数。本文将从多个方面对命令执行函数进行详细的阐述,包括其定…

    编程 2025-04-28
  • 如何使用Python执行Shell命令并获取执行过程信息

    本文将介绍如何使用Python执行Shell命令并获取执行过程信息。我们将从以下几个方面进行阐述: 一、执行Shell命令 Python内置的subprocess模块可以方便地执行…

    编程 2025-04-28
  • Python中获取用户输入命令的方法解析

    本文将从多个角度,分别介绍Python中获取用户输入命令的方法,希望能够对初学者有所帮助。 一、使用input()函数获取用户输入命令 input()是Python中用于获取用户输…

    编程 2025-04-27
  • Python3 执行 cmd 命令用法介绍

    本文将详细讲解如何使用Python3执行cmd命令,包括使用subprocess模块、os模块、Popen方法、system方法等多个方面的实现方法。 一、使用subprocess…

    编程 2025-04-27
  • 全面解析Python直接命令更新

    本文将从多个方面对Python直接命令更新进行详细阐述,包括更新命令的基本用法、更新过程中可能遇到的问题及其解决方法等等。 一、更新命令基本用法 Python直接命令更新是一种非常…

    编程 2025-04-27
  • 如何在Linux中添加用户并修改配置文件

    本文将从多个方面详细介绍在Linux系统下如何添加新用户并修改配置文件 一、添加新用户 在Linux系统下创建新用户非常简单,只需使用adduser命令即可。使用以下命令添加新用户…

    编程 2025-04-27
  • Python启动命令用法介绍

    Python是一门解释型语言,与许多编译型语言不同,它不需要编译成机器码,而是通过解释器一行一行读取程序,逐句翻译成目标代码然后运行。因此,对于Python程序员来说,学会如何正确…

    编程 2025-04-27

发表回复

登录后才能评论