Linux系统安全——iptables相关总结
在使用iptables时注意要先关闭firewalld(systemctl stop firewalld.service)
1.查看iptables规则
iptables -vnL
选项 | 含义 |
---|---|
-v | 查看时显示更多详细信息 |
-n | 所有字段以数字形式显示 |
-L | 查看规则列表 |
例,拒绝来自192.168.241.22的源地址 直接丢弃
iptables -t filter -A INPUT -s 192.168.241.22 -j DROP
其中-t filter是指filter表,常用的还可以替换为-t nat表
-A | |||||
-D | 链 | 编号 | 规则 | -j | target |
-I | 链 | 规则 | |||
-R | 链 | 编号 | 规则 |
target:
选项 | 含义 |
---|---|
DROP | 已读不回 |
REJECT | 回不合适 |
ACCEPT | 允许 |
LOG | 生成日志 |
SNAT | 使用snat;source 修改源ip |
DNAT | 使用dnat; 修改目的ip |
例,拒绝来自192.168.241.22的源地址 不回复 241网段的主机都无法访问
iptables -A INPUT -s 192.168.241.0/24 -j REJECT
tcpdump -i ens33 icmp -nn 在22主机上抓包只能看到去的包,看不到回的包
注意:配错策略无法远程登录服务器
登录本地 查看规则编号
iptables -vnL --line-numbers
2.删除规则
iptables -D INPUT 2
删除第二条规则
3.插入规则
iptables -I INPUT 编号 -s 192.168.241.22 -j DROP
iptables -I INPUT -s 192.168.241.1 -j ACCEPT 允许本地
iptables -A INPUT -s 192.168.241.0/24 -j REJECT 拒绝所有241网段的主机
4.黑白名单
修改默认规则为白名单后自己也无法访问
iptables -P INPUT DROP
访问127.0.0.1也不行
5.添加回环网卡
iptables -I INPUT 2 -i lo -j ACCEPT
6.清空规则
iptables -F 不包括默认规则 清空全部规则
iptables -P INPUT DROP 修改INPUT链的默认规则为拒绝,清空规则后又无法登录(因为此时的INPUT链的默认规则是拒绝)
手动白名单
iptables -A INPUT -s 192.168.241.1 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT 最后再添加拒绝所有,比较安全,也不会影响自己本机登录
7.基本匹配条件
-s, --source address[/mask][,...]:源IP地址或者不连续的IP地址
-d, --destination address[/mask][,...]:目标IP地址或者不连续的IP地址
-p, --protocol protocol:指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or“all“
iptables -I INPUT 2 -p icmp -s 192.168.91.241 -j REJECT 禁止icmp协议,ssh协议可以继续使用
-i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
-o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
8.扩展匹配条件
rpm -ql iptables |grep time
man iptables 看不到扩展
man iptables-extensions 扩展模块
隐式扩展 -p tcp 指定了特殊的协议无需再次使用-m 选项
显示扩展 必须加 -m 选项
9.tcp
iptables -I INPUT 3 -s 192.168.241.22 -p tcp --dport 80 -j REJECT 指定端口号
iptables -I INPUT 3 -s 192.168.241.22 -p tcp --dport 80:82 -j REJECT 连续的端口号
tcp的标记位:
--tcp-flags
--syn:用于匹配第一次握手,相当于:--tcp-flags SYN、ACK、FIN、RST、SYN
10.icmp
A可以ping B B不可以ping A
iptables -A INPUT -s 192.168.241.22 -j REJECT 双方都不可以ping
iptables -A INPUT -s 192.168.241.22 -p icmp --icmp-type 8 -j REJECT 拒绝请求包
iptables -A INPUT -s 192.168.241.22 -p icmp --icmp-type 0 -j REJECT 拒绝回复包
拒绝请求包要好用
11.显式扩展
11.1multiport扩展
混合端口,以离散的方式定义多个端口
yum install epel-release.noarch -y 安装额外源
systemctl start redis 开启redis
ss -natp | grep 6379
vim /etc/redis.conf
在第61行 bind 0.0.0.0 修改绑定地址
redis-cli -h 192.168.241.11 主机二登录
拒绝源地址为192.168.241.22访问本机80和6379端口
iptables -A INPUT -s 192.168.241.22 -p tcp -m multiport --dports 80,6379 -j REJECT
11.2iprange扩展
ip地址范围,之前只能指定网段
iptables -A INPUT -m iprange --src-range 192.168.241.22-192.168.241.24 -j REJECT
指定源地址为192.168.241.22-192.168.241.24 三个地址无法访问当前主机
11.3mac
根据mac地址
iptables -A INPUT -m mac --mac-source 00:0c:29:51:4b:b5 -j REJECT
只有源mac没有目标mac
11.4string扩展
根据字符串过滤
vim /var/www/html/index.html www.google.com
vim /var/www/html/index.html www.baidu.com
www.google.com
curl 192.168.241.11/index.html
www.baidu.com
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "google" -j REJECT
11.5time
时间是UTC时间 世界协商时间
date -u
man iptables-extensions
iptables -A INPUT -m time --timestart 16:00 --timestop 18:00 -j REJECT
11.6连接最大数
gcc flood connect.c -o flood
./flood 192.168.241.11
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
11.7limit 限制流量
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
每分钟允许10个 前5个不限制
iptables -A INPUT -p icmp -j REJECT
11.8state状态
- NEW:无论是我发出的第一个包还是收到的第一个包 都叫NEW
- ESTABLISHED:NEW 之后都叫ESTABLISHED,除了第一个
- RELATED:ftp 权限端口会自动打开数据端口
- NVALID:无效的连接,如flag标记不正确
- UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
- cat /proc/net/nf_conntrack 默认连接跟踪功能需要开启 state功能
11.8.1实现功能
老用户可以访问 新用户不可以访问
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
已在ping的可以继续ping,ping停止的话不可以再ping,xshell也不可以连
iptables -A INPUT -m state --state NEW -j REJECT 新用户拒绝
lsmod | grep comn 内核模块可以看到,调用state状态时可以看到
cat /proc/sys/net/netfilter/nf_conntrack_max 记录的用户数为65536
echo 1 > /proc/sys/net/netfilter/nf_conntrack_max 修改最大记录数
tail /var/log/messages 查看日志
iptables -A INPUT -m state --state ESTABLISHED ACCEPT
iptables -A INPUT -m state --state NEW -j REJECT
延伸
报错Feb 5 09:41:49 localhost kernel: nf_conntrack: table full, dropping packet
A不能访问我,我可以访问A 单向通讯
iptables -A INPUT -s 192.168.91.101 -j REJECT 不行都不可以了
iptables -A INPUT -s 192.168.91.101 -m state --state NEW -j REJECT 第一个包是请求包只要禁止请求包即可
11.9target
log
iptables -I INPUT -s 192.168.91.101 -p tcp -m multiport --dports 80,21:23 -m state --state NEW -j LOG --log-prefix "hello:"
12.规则保存
iptables-save 此条命令会将所有规则打印在屏幕上
iptables-restore 支持标准输入
iptables-save > /data/iprule
iptables-restore < /data/iprule
iptables -A INPUT -s 192.168.241.1 -j ACCEPT
iptables -A INPUT -s 192.168.241.0/24 -j ACCEPT
iptables -A INPUT -j REJECT
将这三条规则加入到规则表中
iptables-save > /data/iprule 备份
iptables-restore < /data/iprule 导入
12.1开机自动加载
vim ~/.bashrc
vim /etc/rc.d/rc.local
iptables-restore < /data/iprule
chmod +x /etc/rc.d/rc.local
12.2测试
iptables -F
/etc/rc.d/rc.local
iptables -vnL
12.3备份工具
yum install iptables-services.x86_64 -y
rpm -ql iptables-service
/etc/sysconfig/iptables 存放系统自带的规则
systemctl start iptables-services
systemctl enable iptables-services
13.自定义链
将规则分类 web链 db链 java链
iptables -N web 自定义链
iptables -vnL 可以看到自己定义的链
iptables -E web WEB 修改名称
iptables -A INPUT -s 192.168.241.0/24 -j WEB
input链调用将自定义链和INPUT链修改也可以保存
删除自定义链
iptables -F INPUT
iptables -F WEB 删除
iptables -X WEB 清空自定义链的规则
curl http://ip.sh 查看本机主机访问公网时使用的ip
14.永久开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 将此写入配置文件
15.SNAT
iptables -t nat -A POSTROUTING -s 192.168.241.0/24 -o ens36 -j SNAT --to 12.0.0.1
将源地址为192.168.241.0网段的私网地址全部转化为网关地址
iptables -t nat -A POSTROUTING -s 192.168.241.0/24 -o ens36 -j MASQUERADE
如果地址不固定可以设置
16.DNAT
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.10 -p tcp --dport 80 -j DNAT --to 192.168.241.22
iptables -t nat -A POSTROUTING -o ens36 -s 192.168.241.0/24 -j SNAT --to 12.0.0.254
有去有回踩可以ping通 所以要加SNAT
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.241.11:8080
相关文章:
Linux系统安全——iptables相关总结
在使用iptables时注意要先关闭firewalld(systemctl stop firewalld.service) 1.查看iptables规则 iptables -vnL 选项含义-v查看时显示更多详细信息-n所有字段以数字形式显示-L查看规则列表 例,拒绝来自192.168.241.22的源地址 直接丢弃 …...

深度学习(14)--x.view()详解
在torch中,常用view()函数来改变tensor的形状 查询官方文档: torch.Tensor.view — PyTorch 2.2 documentationhttps://pytorch.org/docs/stable/generated/torch.Tensor.view.html#torch.Tensor.view示例 1.创建一个4x4的二维数组进行测试 x torch.…...

最新wordpress外贸主题
日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题,适合做日用百货的外贸公司搭建跨境电商网站使用。 https://www.jianzhanpress.com/?p5248 添加剂wordpress外贸建站主题 橙色wordpress外贸建站主题,适合做食品添加剂或化工添加剂的外贸公司…...
Spring Cloud Gateway:使用RestController动态更新路由
相关类介绍 动态路由(自己控制,非注册中心控制)涉及两个很重要的Bean: RouteDefinitionWriter:用于添加、修改、删除路由规则。RouteDefinitionLocator:用于查询路由规则。 以及一个相关事件:…...

用Python动态展示排序算法
文章目录 选择冒泡插入排序归并排序希尔排序 经常看到这种算法可视化的图片,但往往做不到和画图的人心灵相通,所以想自己画一下,本文主要实现归并排序和希尔排序,如果想实现其他算法可参考这篇 C语言实现各种排序算法[选择&#x…...
vscode代码快捷键
1、 log console.log()2、edf export default (first)>{ second } 或者 export default function(params)>{ }可以使用tab键切换修改项 3、ednf export default function first(second) {third}4、! 生成html模板 5、div#app <div id"app"></di…...
深入了解C++:形参、内联、重载、引用、const和指针、new和delete
形参带默认值的函数 1.给默认值的时候从右向左给。 2.定义出可以给形参默认值,声明也可以给形参默认值。 3.形参默认值只能出现一次。 4.参数调用的效率问题 #sum(10,20)对应了五条汇编指令 mov eax,dword ptr[ebp-8] push eax mov ecx dword ptr[ebp-4] push …...
Linux 目录结构结构
Linux 目录结构结构 概念 Linux 没有 C、D、E...盘符,只有一个目录树。通过挂载,将不同的磁盘挂载到目录树下,通过目录访问磁盘。 不同目录的作用 目录存放内容/作用/根目录,目录树的起点,存放所有文件。…...

C++基础入门:掌握核心概念(超全!)
C作为一门广泛使用的编程语言,以其高性能和灵活性在软件开发领域占据重要地位。无论是游戏开发、系统编程还是实时应用,C都是一个不可或缺的工具。本博客旨在为初学者提供C编程语言的核心概念,帮助你建立坚实的基础。 C关键字 C关键字是编程…...

Linux第47步_安装支持linux的第三方库和mkimage工具
安装支持linux的第三方库和mkimage工具,做好移植前的准备工作。 编译linux内核之前,需要先在 ubuntu上安装“lzop库”和“libssl-dev库”,否则内核编译会失败。 mkimage工具会在zImage镜像文件的前面添加0x40个字节的头部信息,就可以得到uI…...

数据工程工程师学习路线图
数据工程岗位要求 Skill Sets required: - Hands on experience enabling data via Adobe Analytics and/or Google Analytics - Understanding of how customer level data is captured and stitched with behavioural data - Experience working with Testing (QA) and D…...

MySQL主从同步与分库分表
分库分表...

百度PaddleOCR字符识别推理部署(C++)
1 环境 1.opencv(https://sourceforge.net/projects/opencvlibrary/) 2.cmake(https://cmake.org/download/) 3.vs2019((https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.1) 4.paddleOCR项目-建议2.0(http…...

C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示
对上一篇的工作C学习笔记 | 基于Qt框架开发实时成绩显示排序系统1-CSDN博客继续优化,增加一个显示运动员每组成绩的折线图。 1)在Qt Creator的项目文件(.pro文件)中添加对Qt Charts模块的支持: QT charts 2…...

Microsoft Excel 加载数据分析工具
Microsoft Excel 加载数据分析工具 1. 打开 Excel,文件 -> 选项2. 加载项 -> 转到…3. 分析工具库、分析工具库 - VBA4. 打开 Excel,数据 -> 数据分析References 1. 打开 Excel,文件 -> 选项 2. 加载项 -> 转到… 3…...
Day32 贪心算法part02
买卖股票的最佳时机 太牛了我,随随便便双指针秒杀 md题解里面双指针都没用直接for循环秒杀 跳跃游戏 写成这样纯粹是没有看到第一次跳跃必须从第一个开始 class Solution:def canJump(self, nums: List[int]) -> bool:if len(nums) 1:return Truefor i in …...
3分钟带你了解Vue3的nextTick()
前言 Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。简单来说,Vue在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新ÿ…...
数据库的使用方法
sqlite3 API: 头文件: #include <sqlite3.h> 编译时候要加上-lsqlite3 gcc a.c -lsqlite3 1)sqlite3_open int sqlite3_open(const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db …...

HTML5和CSS3强化知识总结
HTML5的新特性 HTML5的新增特性主要是针对于以前的不足,增一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是IE9以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。 HTML5新增的语义…...

华为机考入门python3--(13)牛客13-句子逆序
分类:列表 知识点: 列表逆序(和字符串逆序是一样的) my_list[::-1] 题目来自【牛客】 def reverse_sentence(sentence): # 将输入的句子分割words sentence.split() # 将单词逆序排列 words words[::-1] # 将单词用空…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...