『运维备忘录』之 iptables 防火墙使用指南

news2024/11/15 14:03:48

前言

iptables 是一个配置 Linux 内核防火墙的命令行工具,它是用来设置、维护和检查Linux内核的IP包过滤规则的。本文将介绍 iptables 的基础知识和使用示例。

注意:红帽/红旗/CentOS等 7 版本以上已改为使用 firewalld 作为防火墙替换iptables。


一、基本用法

1.1. 基本语法

$ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

1.2. 命令参数

参数描述
-P设置默认策略:
iptables -P INPUT (DROP)
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-Inum 在规则链的头部加入新规则
-Dnum 删除某一条规则
-s匹配来源地址 IP/MASK,加叹号"!"表示除这个 IP 外
-d匹配目标地址
-i网卡名称 匹配从这块网卡流入的数据
-o网卡名称 匹配从这块网卡流出的数据
-p匹配协议,如 tcp,udp,icmp
--dport num匹配目标端口号
--sport num匹配来源端口号

1.3. 服务管理

$ systemctl status iptables   # 查看服务状态
$ systemctl enable iptables   # 启用服务
$ systemctl disable iptables  # 禁用服务
$ systemctl start iptables    # 启动服务
$ systemctl restart iptables  # 重启服务
$ systemctl stop iptables     # 关闭服务

1.4. 规则配置

# 默认情况下,所有链都配置为接受规则,因此在强化过程中,建议从拒绝所有配置开始,然后只打开需要的端口:
$ iptables --policy INPUT DROP
$ iptables --policy OUTPUT DROP
$ iptables --policy FORWARD DROP

# 按链条和编号删除规则
$ iptables -D INPUT 10

# 按规范删除规则
$ iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

#刷新所有规则,删除所有链,并接受所有
$ iptables -P INPUT ACCEPT
$ iptables -P FORWARD ACCEPT
$ iptables -P OUTPUT ACCEPT
$ iptables -t nat -F
$ iptables -t mangle -F
$ iptables -F
$ iptables -X

# 冲洗所有链
$ iptables -F

# 刷新单链
$ iptables -F INPUT

# 插入规则
$ iptables -I INPUT 2 -s 202.54.1.2 -j DROP

# 详细打印出所有活动的 iptables 规则
$ iptables -n -L -v

# 具有规则规范的相同数据:
$ iptables -S INPUT

# 包含数据包计数的规则列表
$ iptables -L INPUT -v

# 在基于 Debian 的系统上
$ netfilter-persistent save

# 在基于 RedHat 的系统上
$ service iptables save

二、使用示例

2.1. 清空当前的所有规则和计数

$ iptables -F   # 清空所有的防火墙规则
$ iptables -X   # 删除用户自定义的空链
$ iptables -Z   # 清空计数

2.2. 配置允许 ssh 端口连接

$ 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 表示接受这样的请求。

2.3. 允许本地回环地址可以正常使用

$ iptables -A INPUT -i lo -j ACCEPT
# 本地圆环地址就是那个127.0.0.1
# 是本机上使用的,它进与出都设置为允许
$ iptables -A OUTPUT -o lo -j ACCEPT

2.4. 设置默认的规则

# 配置默认的不让进
$ iptables -P INPUT DROP
# 默认的不允许转发
$ iptables -P FORWARD DROP
# 默认的可以出去
$ iptables -P OUTPUT ACCEPT

2.5. 配置白名单

# 允许机房内网机器可以访问
$ 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 
# 允许 183.121.3.7 访问本机的3380端口
$ iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT

2.6. 开启相应的服务端口

# 开启 80 端口,因为web对外都是这个端口
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许被 ping
$ iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# 已经建立的连接得让它进来
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

2.7. 保存规则到配置文件中

$ cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
$ iptables-save > /etc/sysconfig/iptables
$ cat /etc/sysconfig/iptables

2.8. 清除已有规则

# 清空指定链 INPUT 上面的所有规则
$ iptables -F INPUT
# 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则
$ iptables -X INPUT
# 如果没有指定链名,则会删除该表中所有非内置的链,把指定链,或者表中的所有链上的所有计数器清零
$ iptables -Z INPUT

2.9. 删除已添加的规则

# 添加一条规则
$ iptables -A INPUT -s 192.168.1.5 -j DROP

# 将所有 iptables 以序号标记显示,执行:
$ iptables -L -n --line-numbers

# 比如要删除 INPUT 里序号为 8 的规则,执行:
$ iptables -D INPUT 8

2.10. 列出已设置的规则

# 列出 nat 上面的所有规则
$ iptables -L -t nat                
# -t 参数指定,必须是 raw, nat,filter,mangle 中的一个,规则带编号
$ iptables -L -t nat  --line-numbers
$ iptables -L INPUT
# 查看,这个列表看起来更详细
$ iptables -L -nv

2.11. 开放指定的端口

# 允许本地回环接口(即运行本机访问本机)
$ 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
# 允许访问22端口
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许访问80端口
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许ftp服务的21端口
$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# 允许FTP服务的20端口
$ iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 禁止其他未允许的规则访问
$ iptables -A INPUT -j reject
# 禁止其他未允许的规则访问
$ iptables -A FORWARD -j REJECT

2.12. 屏蔽 IP

# 屏蔽恶意主机(比如,192.168.0.8
$ iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP
# 屏蔽单个IP的命令
$ iptables -I INPUT -s 123.45.6.7 -j DROP
# 封整个段即从123.0.0.1到123.255.255.254的命令
$ iptables -I INPUT -s 123.0.0.0/8 -j DROP
# 封IP段即从123.45.0.1到123.45.255.254的命令
$ iptables -I INPUT -s 124.45.0.0/16 -j DROP
# 封IP段即从123.45.6.1到123.45.6.254的命令是
$ iptables -I INPUT -s 123.45.6.0/24 -j DROP

2.13. 查看已添加的规则

$ iptables -L -n -v

2.14. 启动网络转发规则

# 本机的 2222 端口映射到内网 虚拟机的 22 端口
$ iptables -t nat -A PREROUTING -d 212.11.11.11 -p tcp --dport 2222  -j DNAT --to-dest 192.168.10.11:22

2.15. 阻止 Windows 蠕虫的攻击

$ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"

2.16. 防止 SYN 洪水攻击

$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT

2.17.  阻止带有虚假 TCP 标志的数据包

$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

2.18. 其他

# 允许环回连接
$ iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT

# 允许已建立和相关的传入连接
$ iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许已建立的传出连接
$ iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 丢弃无效数据包
$ iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# 阻止和 IP 地址并拒绝
$ iptables -A INPUT -s 192.168.1.10 -j REJECT

# 阻止 IP 地址
$ iptables -A INPUT -s 192.168.1.10 -j DROP

# 允许所有传入的 SSH
$ iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 允许来自特定 IP 地址或子网的传入 SSH
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 允许传入 HTTP
$ iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 允许传入 HTTPS
$ iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 允许传入 HTTP 和 HTTPS
$ iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 允许来自特定 IP 地址或子网的 MySQL
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 允许所有传入的 SMTP
$ iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 记录和丢弃数据包(默认情况下,所有内容都记录到 /var/log/messages 文件中)
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

# 丢弃或接受来自 Mac 地址的流量
$ iptables -A INPUT -m mac --mac-source 00:1F:EA:51:02:04 -j DROP
$ iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

# 阻止或允许 ICMP Ping 请求
$ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
$ iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

# 使用 multiport 指定多个端口
$ iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m multiport --dports ssh,smtp,http,https -j ACCEPT

# 使用 limit 和 iplimit* 限制连接数
$ iptables -A FORWARD -m state --state NEW -p tcp -m multiport --dport http,https -o eth0 -i eth1 -m limit --limit 20/hour --limit-burst 5 -j ACCEPT
$ iptables -A INPUT -p tcp -m state --state NEW --dport http -m iplimit --iplimit-above 5 -j DROP

# 匹配数据包数据负载中的 “string*”
$ iptables -A FORWARD -m string --string '.com' -j DROP
$ iptables -A FORWARD -m string --string '.exe' -j DROP

# 防止端口扫描
$ iptables -N port-scanningiptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURNiptables -A port-scanning -j DROP

# SSH 暴力破解保护
$ iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --setiptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP


参考资料:https://ipset.netfilter.org/iptables

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC: 2 语音转换新纪元-Whisper技术在全球客服领域的创新运用

背景 现实世界&#xff0c;人跟人的沟通相当一部分是语音沟通&#xff0c;比如打电话&#xff0c;聊天中发送语音消息。 而在程序的世界&#xff0c;大部分以处理字符串为主。 所以&#xff0c;把语音转换成文字就成为了编程世界非常普遍的需求。 Whisper 是由 OpenAI 开发…

3.11_C++_day1_作业

作业要求&#xff1a; 程序代码&#xff1a; #include <iostream> #include <string.h>using namespace std;int main() {int a0,b0,c0,d0,e0;//分别记录字符串中的大写&#xff0c;小写&#xff0c;数字&#xff0c;空格&#xff0c;其他字符个数string str;cha…

AHU 汇编 实验五

实验名称&#xff1a;实验五 分支与循环程序设计 二、实验内容&#xff1a;从键盘输入一个四位的16进制数&#xff08;其中字母为大写&#xff09;&#xff0c;将其转化为二进制数提示输出。 实验过程&#xff1a; 源代码: data segmentbuff1 db Please input a number(H):$b…

03:HAL---中断

目录 一:中断 1:简历 2:AFIO 3:EXTI 4:NVIC基本结构 5:使用步骤 6:设计中断函数 二:中断的应用 A:对外式红外传感计数器 1:硬件介绍 2:计数代码 B:旋转编码计数器 1:硬件介绍 2:旋转编码器代码 C:按键控制LED D:代码总结 一:中断 1:简历 中断&#xff1a;在主程序…

UI学习 一

教程&#xff1a;Accessibility – Material Design 3 需要科学上网&#xff0c;否则图片显示不出来。设计教程没有图片说明&#xff0c;不容易理解。 优化UI方向 清晰可见的元素足够的对比度和尺寸重要性的明确等级一眼就能辨别的关键信息 传达某一事物的相对重要性 将重…

Unity项目开发必备技能——字体替换工具的使用(上)

在平常我们做unity项目的时候&#xff0c;工具类的使用对于我们来说是必不可少的组成部分&#xff0c;因为工具类可以解决实际问题或者是优化我们已经实现的功能。 当你在做项目的时&#xff0c;我们搭建完场景后&#xff0c;当前场景中你所创建的UI组件中的Text的字体&#xf…

springboot+vue3+nuxt3+ts+minio开发的dsblog3.0前后端分离博客

springbootvue3nuxt3tsminio开发的dsblog3.0前后端博客 一、技术栈 本博客系统采用了先进且成熟的技术栈&#xff0c;包括Spring Boot 3、Spring Security、Vue 3、Nuxt 3、TypeScript、Vite、MinIO、Redis、Element Plus和Markdown等。这些技术共同协作&#xff0c;确保了博…

float32 float16 bfloat16 推理训练GPU速度和内存调研

概念&#xff1a; 参考&#xff1a;Accelerating Large Language Models with Mixed-Precision Techniques - Lightning AI 3种数量类型表示的数据范围不一样&#xff0c;以float32为例其中有1个符号位&#xff0c;8位表示指数&#xff0c;23位表示尾数 标准训练推理是用的fl…

力扣大厂热门面试算法题 15-17

15. 三数之和&#xff0c;16. 最接近的三数之和&#xff0c;17. 电话号码的字母组合&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.11 可通过leetcode所有测试用例。 目录 15. 三数之和 解题思路 完整代码 Java Python ​…

解锁App推广新姿势:Xinstall专属二维码,让推广更高效!

在移动互联网时代&#xff0c;App推广的重要性不言而喻。然而&#xff0c;推广的过程中往往伴随着各种痛点&#xff0c;如何准确追踪用户来源、如何提高安装转化率等&#xff0c;一直是广告主和开发者们关注的焦点。今天&#xff0c;我们要为大家介绍一款专业的App全渠道统计服…

Java基于SpringBoot+Vue的人事管理系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Linux——文件缓冲区与模拟实现stdio.h

前言 我们学习了系统层面上的文件操作&#xff0c;也明白了重定向的基本原理&#xff0c;在重定向中&#xff0c;我们使用fflush(stdout)刷新了缓冲区&#xff0c;当时我们仅仅知道重定向需要刷新缓冲区&#xff0c;但是不知道其所以然&#xff0c;今天我们来见识一下。 一、…

vue自定义主题皮肤方案

方案一&#xff1a;CSS变量换肤&#xff08;推荐&#xff09; 利用css定义变量的方法&#xff0c;用var在全局定义颜色变量&#xff08;需将变量提升到全局即伪类选择器 :root&#xff09;然后利用js操作css变量&#xff0c;document.getElementsByTagName(‘body’)[0].style…

nodejs版本过高导致vue-cli项目无法正常运行解决方案

95% emitting CompressionPlugin ERROR Error: error:0308010C:digital envelope routines::unsupported 方法一&#xff1a;在使用 npm run dev之前使用 set NODE_OPTIONS--openssl-legacy-provider Error: error:0308010C:digital envelope routines::unsupported 解决方法…

UI自动化、性能、API测试一体平台:RunnerGo

UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势&#xff0c;包括提高测试效率、减少人力成本、提升软件质量等。同时&#xff0c;可视化工具为UI自动化测试带来了更多便利和灵活性。RunnerGo近期上线脚本录制器&#xff0c;根据你的测试操作直接…

【基础计算机网络2】物理层——通信基础

【前言回顾】 【考纲内容】 一、物理层的基本概念 1.1 物理层的主要任务 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒介。物理层的主要任务&#xff1a;确定与传输媒体接口有关的一些特性。 1.2 物理层的一些特性 机械特性…

前端报错404,nginx正常、gateway没有转发请求

问题描述&#xff1a;前端报错 404 Not Found 原因&#xff1a;nacos中对应服务没有上线&#xff0c;下线后&#xff0c;可以启动本地服务&#xff0c;然后在测试上调试代码。&#xff01;&#xff01; 记住重启对应服务&#xff0c;也不会自动上线。

STM32CubeMX 配置 STM32F103 工程:通过DAC输出正弦波

说明&#xff1a;STM32CubeMX 配置 STM32F103 工程&#xff0c;通过DAC输出正弦波&#xff0c;参考代码可自动计算频率&#xff0c;自动计算正弦数据。 先参考这篇文章配置时钟、工程输出的设置&#xff1a; STM32CubeMX 配置 STM32F103 工程&#xff1a;通过DAC生成三角波、…

基于PLC的城市智能交通灯三路口控制系统设计26.06

摘要 可编程控制器(Programmable Logic Controller)简称PLC。是一种综合了通讯、自动控制和计算机技术发展而来的主要用于工业生产的自动控制系统。PLC运用数字运算操作系统&#xff0c;采用可编程序存储器&#xff0c;来于储存内部程序。执行逻辑运算、定时控制、顺序控制、计…

Elastic Stack--08--SpringData框架

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 SpringData[官网&#xff1a; https://spring.io/projects/spring-data](https://spring.io/projects/spring-data) Spring Data Elasticsearch 介绍 1.SpringData-…