Linux防火墙(以iptables为例)

目录

  • Linux配置防火墙
    • [1. 引言](#1. 引言)
    • [2. 什么是防火墙](#2. 什么是防火墙)
    • [3. Linux中的防火墙](#3. Linux中的防火墙)
      • [3.1 iptables](#3.1 iptables)
        • iptables命令参数
        • 常用方式:
        • [3.1.1 安装iptables](#3.1.1 安装iptables)
        • [3.1.2 配置iptables规则](#3.1.2 配置iptables规则)
        • [3.1.3 示例一:使用iptables配置防火墙规则](#3.1.3 示例一:使用iptables配置防火墙规则)
        • [4. iptables执行过程](#4. iptables执行过程)

Linux配置防火墙

1. 引言

在互联网时代,网络安全问题成为了一个极为重要的议题。为了保护服务器和计算机免受网络攻击的威胁,配置防火墙是必不可少的。本节将介绍如何在Linux系统上配置防火墙。

2. 什么是防火墙

防火墙是一种网络安全设备,用于监视和控制网络数据流量。其主要功能是在不同网络之间建立一条阻隔,对进出的数据流量进行过滤和筛选,从而保护内部网络免受未经授权的访问和恶意攻击。

防火墙通过规则集合控制网络流量的通过与阻止,这些规则可以根据网络策略和需求进行配置。不正确的配置可能导致无法访问特定服务或应用程序。

3. Linux中的防火墙

Linux操作系统提供了内置的防火墙工具,包括iptablesfirewalld。这些工具可以用来管理网络流量的过滤规则。

3.1 iptables

iptables是一个在Linux内核中操作防火墙规则的工具。它提供了一种灵活的方式来定义规则,控制网络流量的通过与阻止。

iptables使用表(table)链(chain)规则(rule)来实现这一功能。
iptables的规则由多个表组成,每个表又包含多个链。每个链包含一系列的规则,规则决定了如何处理数据包。
常用的表 包括filternatmangle

  • filter表用于过滤数据包
    • 三个链:INPUT、FORWARD、OUTPUT
  • nat表用于网络地址转换
    • 三个链:PREROUTING、POSTROUTING、OUTPUT
  • mangle表用于修改数据包头信息。
    • 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

链的解释:

  • INPUT------进来的数据包应用此规则链中的策略
  • OUTPUT------外出的数据包应用此规则链中的策略
  • FORWARD------转发数据包时应用此规则链中的策略
  • PREROUTING------对数据包作路由选择前应用此链中的规则
    (所有的数据包进来的时侯都先由这个链处理)
  • POSTROUTING------对数据包作路由选择后应用此链中的规则
    (所有的数据包出来的时侯都先由这个链处理)

iptables规则 可以根据源IP地址目标IP地址端口号协议类型等来筛选和转发数据包。用户可以自定义规则,允许或阻止特定的网络连接。

iptables命令参数
参数 含义
-L 显示表中的所有规则
-n 不要把端口或IP反向解析为名字
-t 指定表,不指定默认是filter表
-A append追加,加入准许类规则
-D delete删除,例如 -D INPUT 1
-I insert拒绝类规则放在所有规则的最上面
-p 协议protocal tcp/udp/icmp/all
--dport 目标端口dest destination指定端口加上协议 -p tcp
--sport 源端口,source源
-d --destination 目标IP
-s --source 来源IP或网段
-m 指定模块 multiport
-i input输入的时候,从哪个网卡进来
-o output输出的时候,从哪个网卡出去
-j 满足条件后的工作:DROP/ACCEPT/REJECT
DROP 把数据丢掉,不会返回信息给用户
REJECT 拒绝,返回拒绝信息
-F flush 清除所有规则,不会处理默认的规则
-X 删除用户自定义的链
-Z 链的计数器清零(数据包计数器和数据包字节计数器)
常用方式:
3.1.1 安装iptables

几乎所有的Linux发行版都内置了iptables,不需要额外安装。但是,对于某些较新的发行版来说,可能启用了firewalld,所以需要先禁用firewalld才能使用iptables

3.1.2 配置iptables规则

以下是一些常用的iptables命令:

shell 复制代码
•	iptables -L:列出当前的iptables规则。
•	iptables -A chain:添加一条规则到指定链。
•	iptables -D chain rule_number:删除指定链上的一条规则,规则从1编号
•	iptables -P chain target:设置指定链上到目标机器的默认处理动作。
•	iptables -I chain [rule_number]:在指定链上指定位置插入一条规则。
3.1.3 示例一:使用iptables配置防火墙规则

使用iptables来配置一个简单的防火墙,只允许通过SSH和HTTP访问服务器。

  1. 首先检查iptables的状态,确保它已经启用:
bash 复制代码
$ sudo systemctl status iptables
  1. 添加一个允许SSH连接(22端口)的规则:
bash 复制代码
$ sudo iptables -A INPUT  -p tcp  --dport 22  -j ACCEPT
  1. 添加一个允许HTTP连接(80端口)的规则:
bash 复制代码
$ sudo iptables -A INPUT  -p tcp  --dport 80  -j ACCEPT
  1. 允许已建立的连接和相关的数据包通过:
bash 复制代码
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

conntrack是一种状态跟踪和记录的机制,本身并不能过滤数据包,只是提供包过滤的依据。有状态是一种过滤依据,无状态实际也是一种过滤依据。其他还有INVALID(无效连接)、CLOSE(关闭连接)、TIME_WAIT(等待超时)、NEW(新建连接)等状态。

  1. 将默认的处理动作设置为拒绝:
bash 复制代码
$ sudo iptables -P INPUT DROP
  1. 使用iptables禁用23端口
bash 复制代码
iptables -A INPUT -p tcp --dport 23 -j DROP
  1. 使用iptables禁止别人ping通,直接丢弃 icmp 的请求包
bash 复制代码
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  1. 为防止SSH服务被暴力枚举,设置iptables防火墙策略仅允许172.16.10.0/24网段内的主机通过SSH连接本机
bash 复制代码
iptables --A INPUT --p tcp --dport 22 --s 172.16.10.0/24 --j ACCEPT
iptables --A INPUT --p tcp --dport 22 -j DROP
  1. 设置防火墙允许本机转发除ICMP协议以外的所有数据包
bash 复制代码
iptables -A FORWARD -p ! icmp -j ACCEPT
  1. 在工作时间,即周一到周五的8:30-18:00,开放本机的ftp给192.168.1.0/24网络中的主机访问
bash 复制代码
iptables -A INPUT -p tcp --dport 21 -s 192.168.1.0/24 -m time --weekdays 1,2,3,4,5 --timestart 08:30 --timestop 18:00 -j ACCEPT
  1. 配置iptables防火墙过滤规则,以封堵目标网段(172.16.1.0/24),并在两小时后解除封锁
bash 复制代码
iptables -I INPUT -s 172.16.1.0/24 -j DROP
iptables -I FORWARD -s 172.16.1.0/24 -j DROP
at now +2 hours
at> iptables -D INPUT 1
at> iptables -D FORWARD 1

例:屏蔽某个ip

bash 复制代码
# iptables -I INPUT  -s 10.0.0.7   -j DROP
# iptables -I INPUT  -s 172.16.1.7   -j DROP   
  1. 在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给 192.168.1.0网络中的主机访问要求从ftp服务的数据下载请求次数每分钟不得超过 5 个
bash 复制代码
iptables -A INPUT -s 172.16.0.0/16 -d 192.168.1.111 -p tcp --dport 21 -m time --timestart 8:30 --timestop 18:00 --weekdays 1,2,3,4,5 -m connlimit --connlimit-upto 5 -j ACCEPT

引用:iptables常用命令_iptables命令-CSDN博客

4. iptables执行过程

防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。

如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

防火墙的默认规则是所有规则都匹配完才会匹配的。

DROP 是直接将流量丢弃而且不响应;

REJECT 则会在拒绝流量后再回复一条"信息已经收到,但是被扔掉了"信息,从而让流量发送方清晰地看到数据被拒绝的响应信息。

防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。

相关推荐
C-cat.13 分钟前
Linux|环境变量
linux·运维·服务器
Smartdaili China16 分钟前
如何在 Microsoft Edge 中设置代理: 快速而简单的方法
前端·爬虫·安全·microsoft·edge·社交·动态住宅代理
yunfanleo28 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎1 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
儒道易行1 小时前
【DVWA】RCE远程命令执行实战
网络·安全·网络安全
ac.char1 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾1 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
Hacker_LaoYi2 小时前
网络安全与加密
安全·web安全
长弓聊编程2 小时前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++