热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

linux下的软件防火墙iptables——规则的定义与删除

关于ipitables防火墙的介绍,以及如何查看规则及清理规则等,在之前的一篇文章中已经讲述了,今天这里是演示如何制定防火墙的规则。
关于ipitables防火墙的介绍,以及如何查看规则及清理规则等,在之前的一篇文章中已经讲述了,今天这里是演示如何制定防火墙的规则。因为工作中,主要会对filter链制定规则,所以这里我们主要也以fitler链做演示。

准备工作

制定规则前,我们首先关闭firewalld服务、开启iptables服务,然后清除已有的规则。

# systemctl stop firewalld
# systemctl start iptables
# iptables -F
# iptables -X
# iptables -Z

新增规则链

关于iptables的添加规则链,选项非常繁多,下面我们看基本用法:

iptables [-t tables] -A|I 链名 [-i|o 网络接口] [-m state] [--state 数据包状态] \
> [-p 网络协议]  [-s 源地址 --sport 端口范围] [-d 目标地址 --dport 端口范围] \
> -j [ACCEPT|DROP|REJECT]

选项与参数:

  • -A|I 链名 A表示在已有规则后添加规则,而I则是在最前面插入规则

  • -i|o 网络接口 i表示数据包进入的那个网络接口,需要和INPUT或PREROUTING链配合使用;o表示数据包出去的那个接口,需和OUTPUT链配合使用

  • -p 网络协议 常见的有tcp、upd、icmp以及all

  • -m state 数据包的状态

  • --state 数据包状态 常见的状态有INVALID(无效的数据包)、ESTABLISHED(已经成功连接的状态)、NEW(新建立的数据包)、RELATED(新连接与现有连接相关联)

  • -s 源地址 地址可以是ip地址,如192.168.1.110 或网络地址192.168.1.0/24

  • -d 目的地址

  • -j 后面接操作,常见的有ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)

针对ip、网络、网卡接口的规则制定

下面,给出几个规则链案例。我们允许从192.168.1.110发来的数据、拒绝192.168.1.111发来的数据。

# iptables -A INPUT -s 192.168.1.110 -j ACCEPT
# iptables -I INPUT -s 192.168.1.111 -j DROP

# iptables -vnL
Chain INPUT (policy ACCEPT 33 packets, 3048 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.1.111        0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.1.110        0.0.0.0/0           
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 18 packets, 1844 bytes)
 pkts bytes target     prot opt in     out     source               destination

允许192.168.1.0/24网络地址访问

# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# iptables -vnL
Chain INPUT (policy ACCEPT 29 packets, 2328 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.1.111        0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.1.110        0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.1.0/24       0.0.0.0/0           
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 15 packets, 1460 bytes)
 pkts bytes target     prot opt in     out     source               destination

思考一个问题,192.168.1.111的数据包是会被接受还是会拒绝。从INPUT第一条规则看是会被拒绝,但从最后一条看,会接受。答案是会被拒绝,当满足其中一条规则时,就不会再走下面的规则了,所以说规则链的顺序也是非常重要的。

继续看案例:只要是本地回环地址lo都允许

# iptables -A INPUT -i lo -j ACCEPT

针对端口的规则制定

将进入本地的21端口数据包都阻挡掉

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

将1024至65534之间的端口都开放,可以用 端口号:端口号 来表示一段连续的端口号

# iptables -A INPUT -i eth0 -p tcp --dport 1024:65534 -j ACCEPT

下面来看两个个综合性的规则

本机的3306端口,不对192.168.1.0/24这个网络开放。

本机的ssh服务,不接受192.168.1.0/24这个网络的1024:65535端口的数据包

# iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --dport 3306 -j DROP
# iptables -A INPUT -i etc0 -p tcp -s 192.168.1.0/24 \
> --sport 1024:65535 --dport 22 -j DROP

针对数据包的连接状态的规则制定

数据包常见的状态有INVALID(无效的数据包)、ESTABLISHED(已经成功连接的状态)、NEW(新建立的数据包)、RELATED(新连接与现有连接相关联)。

针对ESTABLISHED以及RELATED状态的数据包全都接受,针对INVALID状态的数据包全部丢弃

# iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
# iptables -A INPUT -m state --state INVALID -j DROP

删除规则链

删除规则链基本和添加规则链一致,只不过-A换成-D即可,下面我们一起来删除几条规则。

# iptables-save
# Generated by iptables-save v1.4.21 on Sun Nov 15 22:36:41 2020
*filter
:INPUT ACCEPT [4:1920]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:1380]
-A INPUT -s 192.168.1.111/32 -j DROP
-A INPUT -s 192.168.1.110/32 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
……

# iptables -t filter -D INPUT -s 192.168.1.111/32 -j DROP
# iptables -D INPUT -s 192.168.1.110/32 -j ACCEPT

注:以上关于iptables的设置只会保存到内存中去,重启服务后系统后,这些设置将消失。所以,只要不把自己阻挡在外情况下,请尽管练习吧

若想保存规则的话,请输入/usr/libexec/iptables/iptables.init save来保存。


推荐阅读
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品ling取参考你的选题刚好在下面有,有时间看到机会给您发1ssm资源循环利用2springboot校园考勤系统3ssm防 ... [详细]
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
  • 本指南详细介绍了如何在同一台计算机上配置多个GitHub账户,并使用不同的SSH密钥进行身份验证,确保每个账户的安全性和独立性。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • 利用SSH隧道实现外网对局域网机器的安全访问
    本文探讨了一种常见的网络配置问题及其解决方案,即如何在外网环境下安全地访问位于局域网内的计算机。特别介绍了使用SSH反向隧道技术来实现这一目标的具体步骤和注意事项。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文详细介绍了如何通过Git Bash在本地仓库与远程仓库之间建立连接并进行同步操作,包括克隆仓库、提交更改和推送更新等步骤。 ... [详细]
  • Windows 环境下安装 Git 并连接 GitHub 的详细步骤
    本文详细介绍了如何在 Windows 系统中安装 Git 工具,并通过配置 SSH 密钥实现与 GitHub 的安全连接。包括下载、安装、环境配置及验证连接等关键步骤。 ... [详细]
  • Redis安全防护深入解析
    本文详细探讨了如何通过指令安全、端口管理和SSL代理等措施有效保护Redis服务的安全性。 ... [详细]
  • Django xAdmin 使用指南(第一部分)
    本文介绍如何在Django项目中集成和使用xAdmin,这是一个增强版的管理界面,提供了比Django默认admin更多的功能。文中详细描述了集成步骤及配置方法。 ... [详细]
author-avatar
小妞丁林林
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有