Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >运维分享|安全运维之iptables防火墙(2)

运维分享|安全运维之iptables防火墙(2)

原创
作者头像
六月暴雪飞梨花
发布于 2023-11-20 10:30:11
发布于 2023-11-20 10:30:11
53900
代码可运行
举报
运行总次数:0
代码可运行

引言

1 概述

防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。

上两个章节熟悉并了解了什么是防火墙,防火墙的工具iptables以及iptables原理和应用。这一篇是具体的详细实验操作。

2 安装与使用

2.1 安装iptables环境

Linux操作系统中,可以使用yum管理来安装,也可以从官网下载后上传到服务器手动安装。

「yum安装」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yum -y install iptables-services

「下载安装」

2.2 启动iptables

按照我们平时启动软件方式即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ systemctl stop firewalld && systemctl disable firewalld
$ systemctl start iptables && systemctl enable iptables

3 基本命令

这个有点像firewalld防火墙,都是有基本的操作命令。

3.1 查看iptables已设置的规则

查看已设置规则列表:iptables -L

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@otn2 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

查看已设置规则详细列表:iptables -L -vn

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@otn2 ~]# iptables -L -vn
Chain INPUT (policy ACCEPT 268M packets, 83G bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.11.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.11.0/24     0.0.0.0/0
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 249M packets, 74G bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

3.2 清除iptables已设置规则

清除所有规则:iptables -F

删除用户自定义的链:iptables -X

链的计数器清零:iptables -Z

「命令」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -F   # 清除所有规则,不会处理默认的规则
$ iptables -X   # 删除用户自定义的链
$ iptables -Z   # 链的计数器清零(数据包计数器与数据包字节计数器)

3.3 添加iptables规则

指定表:iptables -t

把规则添加到指定的链上(默认添加到最后一行):iptables -A

插入规则(默认插入到第一行,封IP):iptables -I

删除链上的规则:iptables -D

「命令」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -t   # 指定表(default: `filter')
$ iptables -A   # 把规则添加到指定的链上,默认添加到最后一行
$ iptables -I   # 插入规则,默认插入到第一行(IP)
$ iptables -D   # 删除链上的规则

3.4 清除iptables指定规则

查看规则号码:iptables -nL --line-numbers

删除指定链上的指定序号:iptables -D INPUT 1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -nL --line-numbers   # 查看规则号码
$ iptables -D INPUT 1           # 删除指定链上的指定序号

4 实战

4.1 配置允许ssh端口连接

配置ssh连接:iptables -A INPUT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

22:是ssh默认端口,

-s 192.168.1.0/24:表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。

-j ACCEPT:表示接受这样的请求

4.2 允许本地圆环地址使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A OUTPUT -o lo -j ACCEPT

本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许。

4.3 设置默认规则

默认情况,配置不允许进入:iptables -P INPUT DROP

默认情况,配置不允许转发:iptables -P FORWARD DROP

默认情况,配制可以转发出去:iptables -P OUTPUT ACCEPT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -P INPUT DROP # 配置默认的不让进
$ iptables -P FORWARD DROP # 默认的不允许转发
$ iptables -P OUTPUT ACCEPT # 默认的可以出去

4.4 配置白名单

允许机房内网机器可以访问:iptables -A INPUT -p all

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  # 允许机房内网机器可以访问
$ iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  # 允许机房内网机器可以访问
$ iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口

4.5 开启相应的服务端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
$ iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

4.6 保存iptables规则

「方法一」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables-save > 1.txt 
# 将防火墙规则保存到文件中
$ iptables-save 
# 将防火墙规则保存到配置文件中,防止重启后失效
$ iptables-restore < 1.txt
# 从配置文件里载入防火墙配置

「方法二」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
$ iptables-save > /etc/sysconfig/iptables
$ cat /etc/sysconfig/iptables

4.7 禁止某个IP访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -I INPUT -p tcp -s 192.168.1.253 -i ens33 -j DROP
$ iptables -A INPUT -p tcp ! -s 192.168.1.1 -i ens33 -j DROP
$ iptables -A INPUT -p tcp ! -s 192.168.1.0/24 -i ens33 -j DROP

4.8 禁止初跳板机以外的IP访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -I INPUT -p tcp ! -s 192.168.1.1 -j DROP

4.9 匹配端口范围

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
$ iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
$ iptables -I INPUT -p tcp --dport 18:80 -j DROP
$ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               
# 允许本地回环接口(即运行本机访问本机)
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许已建立的或相关连的通行
$ iptables -A OUTPUT -j ACCEPT         
# 允许所有本机向外的访问
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT    
# 允许访问22端口
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT    
# 允许访问80端口
$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT    
# 允许ftp服务的21端口
$ iptables -A INPUT -p tcp --dport 20 -j ACCEPT    
# 允许FTP服务的20端口
$ iptables -A INPUT -j reject      
# 禁止其他未允许的规则访问
$ iptables -A FORWARD -j REJECT     
# 禁止其他未允许的规则访问

4.10 匹配ICMP类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -p icmp --icmp-type 8
# 例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP
$ iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
$ iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

「实验」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -I INPUT -s 192.168.1.200 -j DROP
# 封掉190.168.1.200
$ iptables -I INPUT -p icmp --icmp-type 8 -s 192.168.1.10 -j ACCEPT
$ iptables -I INPUT 2 -p icmp ! -s 192.168.1.1 --icmp-type 8 -j DROP
# 只允许192.168.1.1 192.168.1.10可以ping
$ iptables -I INPUT -p tcp --dport 3306 -j DROP
# 将3306端口封掉
$ iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP 
# 屏蔽恶意主机(比如,192.168.0.8
$ iptables -I INPUT -s 123.45.6.7 -j DROP       
# 屏蔽单个IP的命令
$ iptables -I INPUT -s 123.0.0.0/8 -j DROP     
# 封整个段即从123.0.0.1123.255.255.254的命令
$ iptables -I INPUT -s 124.45.0.0/16 -j DROP   
# 封IP段即从123.45.0.1123.45.255.254的命令
$ iptables -I INPUT -s 123.45.6.0/24 -j DROP    
# 封IP段即从123.45.6.1123.45.6.254

4.11 端口映射

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
命令拆解:
表:nat
链:PREROUTINGIP10.0.1.61
源端口:9000
协议:tcp
动作:DNAT
目标IP172.16.1.7
目标端口:22
 
$ iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22
# 本机的 2222 端口映射到内网 虚拟机的22 端口

4.12 IP映射

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7
# 将10.0.1.62的访问请求转发到172.16.1.7

4.13 启动网络转发规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A FORWARD -o eth0
# 只对 OUTPUTFORWARDPOSTROUTING 三个链起作用

4.14 字符串匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
iptables -L
 
# Chain INPUT (policy ACCEPT)
# target     prot opt source               destination
# REJECT     tcp  --  anywhere             anywhere            STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
# Chain FORWARD (policy ACCEPT)
# target     prot opt source               destination
#
# Chain OUTPUT (policy ACCEPT)
# target     prot opt source               destination

4.15阻止Windows蠕虫

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"

4.16 防止SYN洪水

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT

4.17 列出已设置的规则

这个在基础规则已经列出来。

「格式」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -L [-t 表名] [链名]

「描述」

• 四个表名 raw,nat,filter,mangle

• 五个规则链名 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

• filter表包含INPUT、OUTPUT、FORWARD三个规则链

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -L -t nat                  # 列出 nat 上面的所有规则
#            ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个
$ iptables -L -t nat  --line-numbers  # 规则带编号
$ iptables -L INPUT
 
$ iptables -L -nv  # 查看,这个列表看起来更详细

5 总结

有些时候,最后再说一句,互联网免费工具,且用且珍惜❤️。


我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
iptables防火墙
最底层是网络接口层,网络接口层上面是网络层,网络层部署了NetFilter(网络过滤框架)
用户10638239
2024/01/30
4480
iptables防火墙与端口转发
iptables 的结构:iptables -> Tables -> Chains -> Rules
yichen
2023/01/31
2K0
iptables防火墙与端口转发
搞它!!! 深入介绍iptables防火墙管理工具
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制。属于典型的包过滤防火墙。linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和极高的效率,因此获得广泛的应用。
不吃小白菜
2020/09/03
2.6K0
搞它!!! 深入介绍iptables防火墙管理工具
Linux 系统防火墙配置与管理
Linux 系统下管理防火墙规则的管理程序有两种,分别是iptables防火墙与firewall防火墙,虽然现在新版系统中早已不在使用Iptables,新版本系统中默认安装firewall管理程序,相比于Iptables更具有灵活性。
王 瑞
2022/12/28
2.9K0
CentOS7安装和配置iptables防火墙
这篇文章是为《用fail2ban 实现动态防火墙防暴力破解》服务的。注:请查看之前发布的文章
好派笔记
2021/09/14
2.9K0
Linux下 iptables 超详细教程和使用示例
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
CPP开发前沿
2021/11/16
7560
iptables的使用与基本扩展匹配的使用
扩展匹配所需要的扩展模块:/usr/lib64/xtables/,大写的扩展模块是TARGET;小写的模块可以做匹配条件.
小柒吃地瓜
2020/04/23
1.2K0
学习笔记0416----防火墙
在说防火墙之前,我们需要提到selinux,SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源,centos7默认selinux是开启状态,需要关闭它。如果是临时关闭,可以使用setenforce 0,如果要永久关闭就需要修改selinux的配置文件/etc/selinux/config,如下图:
嘻哈记
2022/01/11
8960
学习笔记0416----防火墙
Linux IPTables:如何添加防火墙规则(使用允许 SSH 示例)
本文介绍了如何使用“iptables -A”命令添加 iptables 防火墙规则。
玖柒的小窝
2021/09/20
6K2
Iptables防火墙
1、简介 iptables是linux/unix自带的一款开源基于包过滤的防火墙工具,使用非常灵活,对硬件资源需求不是很高,是在内核中集成的服务,主要工作在OSI的二、三、四层。 术语介绍: Netfilter:是表的容器  表:链的容器  链:规则的容器  规则:iptables一系列过滤信息的规范和具体方法 工作流程: 客户端请求数据------》iptables Filter-------》获取主机的服务(直接拒绝Drop) 数据包————过滤规则 1————过滤规则 2————默认规则 拒绝就 Dr
用户1173509
2018/03/28
1.8K0
Iptables防火墙
Linux操作系统下IPTables配置方法详解
Chain RH-Firewall-1-INPUT (0 references)
一见
2018/08/07
1.8K0
linux编写iptables防火墙规则示例
iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略。 下面通过一个案例先了解一下iptables防火墙规则的相关基础操作。(关于防火墙的相关知识概念,请关注微信公众号 L宝宝聊IT Linux防火墙基础与编写防火墙规则 文章) 实验环境: 网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.17
L宝宝聊IT
2018/06/20
2.2K0
企业防火墙之iptables
1.1 企业中安全优化配置原则 尽可能不给服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务. 大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全 1.1.1 生产中iptables的实际应用 主要应用方向 1、主机防火墙(filter表的INPUT链)。 2、局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。 3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。 4、IP一对一
惨绿少年
2018/03/30
2.9K0
iptables与firewalld防火墙
版权声明:欢迎交流,菲宇运维!
菲宇
2019/06/13
2K0
iptables与firewalld防火墙
iptables 简介
iptables是运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的处理和转发。通常iptables需要内核模块支持才能运行,此处相应的内核模块通常是Xtables。netfilter/iptables 组成Linux平台下的包过滤防火墙,可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
thierryzhou
2022/12/01
1.1K0
iptables 简介
linux中iptables配置文件及命令详解详解
直接改iptables配置就可以了:vim /etc/sysconfig/iptables。
拓荒者
2019/08/05
18.7K0
Linux学习(2)——防火墙设置
  防火墙分类     (一)、包过滤防火墙。            数据包过滤(packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,称为访问控制表(access control lable,ACL)。通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是  否允许该数据包通过包过滤防火墙的优点是它对用户来说是透明的,处理速度快且易于维护。缺点是:非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击;数据包的源 地址、目的地址和IP的端口号都在数据包的头部,可以很轻易地伪造。“IP地址欺骗”是黑客针对该类型防火墙比较常用的攻击手段。       (二)、代理服务型防火墙             代理服务(proxy service)也称链路级网关或TCP通道。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,其特点是将所有跨跃防火墙的网络通信链路 分为两段。当代理服务器接收到用户对某个站点的访问请求后就会检查请求是否符合控制规则。如果规则允许用户访问该站点,代理服务器就会替用户去那个站点取 回所需的信息,再转发给用户,内外网用户的访问都是通过代理服务器上的“链接”来实现的,从而起到隔离防火墙内外计算机系统的作用。
sunonzj
2022/06/21
2.3K0
10.15 iptables filter表案例
iptables常用知识回顾点 iptables -I/-A/-D 后紧跟 链 ,可以是INPUT,OUTPUT,FORWARD iptables -P 用来指定 链的默认策略 ——>最好不要直接操作,否则会造成远程的终端断开 iptables小案例 需求: 把80,22,21端口放行,但22端口指定一个IP段,只允许这个IP段的IP访问的时候,才可访问到,其他段的一概拒绝 实现:(用一个脚本来实现) RELATED状态,这是一个边缘的一个状态 比如:客户端和服务端相互了通信,建立完连接之后,还会有一
运维小白
2018/02/06
6040
10.15 iptables filter表案例
10.14 iptables语法
linux防火墙-netfilter 查看iptables规则:iptables -nvL iptables -F 清空规则 service iptables save 保存规则 iptables -t nat 参数-t 指定表 iptables -Z 可以把计数器清零 iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP iptables -I/-
运维小白
2018/02/06
6720
Iptables防火墙 基础知识
Iptables防火墙 基础知识 位置 使用vim /usr/sysconfig/iptables 启动、关闭、保存 service iptables stop service iptables start service iptables restart service iptables save 结构 iptables –> tables –> chains –>rules iptables的表与链 iptables具有Filter,NAT,Mangle,Raw四种内建表 Filter表 filte
小小科
2018/05/04
1.4K0
相关推荐
iptables防火墙
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验