08-网络管理-iptables基础(四表五链、禁止ping、防火墙规则添加/删除、自建链使用、SNAT\DNAT模式、FTP服务器防火墙规则)待发布

news2024/11/13 13:23:36

文章目录

  • 1. 概述
    • 1.1 四表
    • 1.2 五链
    • 1.3 四表五链的关系
    • 1.4 使用流程
  • 2. 语法和操作
    • 1.1 语法
    • 1.2 常用操作命令
    • 1.3 基本匹配条件
    • 1.4 基本动作
    • 1.5 常用命令示例
      • - 设置默认值
      • - 禁止80端口访问
      • - 查看防火墙规则
      • - 保存规则
      • - 允许ssh
      • - 禁止ping
      • - 删除规则
      • - 清除规则(不包括默认规则)
      • - 新建自定义链
      • - 删除空的自定义链
      • - 端口转发
  • 3. 完整示例
    • 3.1 创建和删除规则
    • 3.2 创建新链并应用
    • 3.3 SNAT模式
    • 3.3 DNAT模式
    • 3.4 FTP服务器防火墙规则

1. 概述

1.1 四表

应用顺序:由上至下

  • raw:对连接做追踪
  • mangle:对数据包做修改,如给数据包打标记
  • nat :修改数据包地址
  • filter:对数据包过滤

1.2 五链

  • INPUT:针对目标地址
  • OUTPUT:针对源地址
  • FORWARD:穿过防火墙
  • PREROUTING:路由前过滤
  • POSTROUTING:路由后过滤

1.3 四表五链的关系

支持的链
rawPREROUTING、OUTPUT
manglePREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
natPREROUTING、POSTROUTING、OUTPUT
fIlterINPUT、OUTPUT、FORWARD

1.4 使用流程

2. 语法和操作

1.1 语法

iptables [-t 要操作的表]  <操作命令>  [要操作的链] [规则号码] [匹配条件] [-j 匹配后的动作]
#             小写          大写          大写          		  小写            大写

1.2 常用操作命令

  • -L:查看,v详细,n不反解
  • -A:追加,放置最后一条
  • -I :插入,默认插入成第一条(第一条生效后不会考虑后边规则
  • -D:删除
  • -F:清空flush
  • -X:删除空的自定义链
  • -P:设置默认策略
  • -Z :计数器归零
  • -N:建立自定义链

1.3 基本匹配条件

  • -s 192.168.2.0/24:源地址
  • -d 192.168.2.1:目标地址
  • -p tcp|upd|icmp:协议
  • -i eth0:input 从eth0接口进入的数据包
  • -o eth0:output 从eth0出去的数据包
  • -p tcp --sport 80:源端口是80的数据包
  • -p tcp --dport 80:目标端口是80

1.4 基本动作

  • filter表
    • -j ACCEPT:接受
    • -j REJECT:拒绝
    • -j DROP:丢弃
    • -j LOG :记录日志

DROP和REJECT的区别:

  • REJECT :直接拒绝链接,和客户端断开。更适合可控网络。
  • DROP:丢弃——意味着不予回复,客户端只能等超时。更适合服务器安全和面对攻击。
  • nat表
    • -j SNAT:源地址转换
    • -j DNAT:目标地址转换
    • -j MASQUERADE:伪装
    • -j REDIRECT:端口转换
  • mangle表
    • -j MARK:标记

1.5 常用命令示例

- 设置默认值

设置默认值,禁止所有穿过防火墙

iptables -P FORWARD DROP

- 禁止80端口访问

iptables -I INPUT -p tcp --dport 80 -j DROP

- 查看防火墙规则

  • 默认查看nat表
iptables -nvL
  • 查看fileter表
iptables -t filter -nvL
  • 查看防火墙规则编号
iptables -nL --line-number

- 保存规则

  • 命令
service iptables save
  • 规则保存位置

该命令会把防火墙规则保存在/etc/sysconfig/iptables文件中

[root@liubei-02 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023
*mangle
:PREROUTING ACCEPT [31154:2463094]
:INPUT ACCEPT [10892:1355724]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [15203:10068473]
:POSTROUTING ACCEPT [15203:10068473]
COMMIT
# Completed on Tue Jan 10 16:06:09 2023
# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023
*raw
:PREROUTING ACCEPT [31154:2463094]
:OUTPUT ACCEPT [15203:10068473]
COMMIT
# Completed on Tue Jan 10 16:06:09 2023
# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023
*filter
:INPUT ACCEPT [5015:664817]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [7751:5368662]
-A INPUT -p tcp -m tcp --sport 80 -j DROP
COMMIT
# Completed on Tue Jan 10 16:06:09 2023
# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023
*nat
:PREROUTING ACCEPT [20546:1128148]
:INPUT ACCEPT [235:18006]
:OUTPUT ACCEPT [1055:72144]
:POSTROUTING ACCEPT [1055:72144]
COMMIT
# Completed on Tue Jan 10 16:06:09 2023

如上可见:

  • *mangle:表明
  • :INPUT ACCEPT [5015:664817] :这种是默认规则
  • -A INPUT -p tcp -m tcp --sport 80 -j DROP:这种是我们在每个表下加的规则

- 允许ssh

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

- 禁止ping

  • 禁止ping其他服务器
iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j REJECT

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 0 -j REJECT
  • 禁止其他服务器ping本机
iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-request -j REJECT

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8 -j REJECT

- 删除规则

iptables -D CHAIN_NAME N

N为规则编号。

- 清除规则(不包括默认规则)

iptables -F

- 新建自定义链

iptables -N MYCHAIN

- 删除空的自定义链

iptables -X MYCHAIN

- 端口转发

访问本机100端口转发至本机80端口

iptables -t nat -I PREROUTEING -p tcp --dport 100 -j REDIRECT --to-port 80

3. 完整示例

3.1 创建和删除规则

  • 查看规则
[root@liubei-02 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如上可见,当初没有任何规则。

  • 添加一条规则
iptables -I INPUT -p tcp --dport 80 -j DROP
  • 查看添加结果
[root@liubei-02 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如上可见,nat表中多了一条记录

  • 保存iptables规则
[root@liubei-02 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]

如上可见,规则保存在/etc/sysconfig/iptables

  • 查看保存文件
# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023
*mangle
:PREROUTING ACCEPT [1960:156458]
:INPUT ACCEPT [675:88821]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [961:649865]
:POSTROUTING ACCEPT [961:649865]
COMMIT
# Completed on Tue Jan 10 17:22:38 2023
# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023
*raw
:PREROUTING ACCEPT [1960:156458]
:OUTPUT ACCEPT [961:649865]
COMMIT
# Completed on Tue Jan 10 17:22:38 2023
# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023
*filter
:INPUT ACCEPT [312:38483]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [457:343983]
-A INPUT -p tcp -m tcp --dport 80 -j DROP
COMMIT
# Completed on Tue Jan 10 17:22:38 2023
# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023
*nat
:PREROUTING ACCEPT [1300:68667]
:INPUT ACCEPT [15:1030]
:OUTPUT ACCEPT [77:5220]
:POSTROUTING ACCEPT [77:5220]
COMMIT
# Completed on Tue Jan 10 17:22:38 2023

如上可见,我们创建的规则被保存在文件中。

  • 删除一条规则

先查看规则的编号

[root@liubei-02 ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy DROP)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

如上可见,我们刚才创建的规则是natINPUT链中编号为1的规则

删除规则

[root@liubei-02 ~]# iptables -D INPUT 1

默认是nat表,因此我们不用写 -t nat

  • 查看删除结果
[root@liubei-02 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如上可见,之前创建的规则被删除了。

3.2 创建新链并应用

要求:使用新建的MYCHAIN创建允许80端口访问的规则

  • 为了演示效果,INPUT链拒绝一切请求
[root@liubei-02 ~]# iptables -I INPUT -p tcp --dport 80 -j DROP
  • 创建MYCHAIN链
[root@liubei-02 ~]# iptables -N MYCHAIN
  • 目标地址是本机地址且目标端口是80端口的请求全部交给MYCHAIN链处理
[root@liubei-02 ~]# iptables -I INPUT  -p tcp --dport 80 -d 10.10.239.32 -j MYCHAIN
  • 设置MYCHAIN链的端口允许通过。
[root@liubei-02 ~]# iptables -I MYCHAIN -p tcp --dport 80 -j ACCEPT

测试一下,此时80端口可以访问了。

  • 查看规则
[root@liubei-02 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
MYCHAIN    tcp  --  anywhere             liubei-02            tcp dpt:http
DROP       tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain MYCHAIN (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

如上可见

  • INPUT链中添加了一个拒绝规则,添加了一条规则转发的规则
  • 多了一个MYCHAIN链,下边有一条允许80端口通过规则。

3.3 SNAT模式

作用:内网客户端访问公网

  • 环境
内网路由公网
clientLAN:192.168.1.1--------WAN:10.10.239.32web:10.252.96249
iptables -t nat -I  POSTROUTING -s 10.252.96.0/24  -p tcp -j SNAT --to 10.10.239.32

理解路由后过滤,在请求出路由的时候把请求的源地址改成路由本机,使得web可以返回给路由。

3.3 DNAT模式

作用:公网访问内网

  • 环境:
内网路由公网
web:192.168.1.110LAN:192.168.1.1,WAN 10.10.239.3client
  • 添加规则:
iptables -t nat -I PREROUTING -d 10.10.239.32 -p tcp --dport 80  -j DNAT --to 192.168.1.110

理解路由前过滤:请求目标是路由地址,在进入路由前被修改,否则将直接被路由本机接收。

如果转发端口不同

路由8080端口转发至内网web服务器8080端口

iptables -t nat -I PREROUTING -d 10.10.239.32 -p tcp --dport 8080  -j DNAT --to 192.168.1.110:80

3.4 FTP服务器防火墙规则

iptables -A INPUT -p tcp --dport 20 -j ACCEPT      	 # 开放FTP主动数据端口			       
iptables -A INPUT -p tcp --dport 21 -j ACCEPT		 # 对外开放FTP控制端口
iptables -A INPUT -p tcp --dport 50000:60000 -j ACCEPT	   # 对外开放FTP数据端口
iptables -A INPUT -j REJECT

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

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

相关文章

HR软件如何识别保留优秀员工

在企业信息化的时代&#xff0c;越来越多的年轻员工开始追求他们的激情&#xff0c;辞掉那些乏味的工作&#xff0c;而选择加入重视员工生活质量的企业。他们不再追随那些以牺牲员工福利为代价追求利润的公司。 员工认可度有助于加强组织中的团队合作关系&#xff0c;反过来&a…

木马程序(病毒)

木马的由来 "特洛伊木马"&#xff08;trojan horse&#xff09;简称"木马"&#xff0c;据说这个名称来源于希腊神话《木马屠城记》。古希腊有大军围攻特洛伊城&#xff0c;久久无法攻下。于是有人献计制造一只高二丈的大木马&#xff0c;假装作战马神&…

实用技巧盘点:Python和Excel交互的常用操作

大家好&#xff0c;在以前&#xff0c;商业分析对应的英文单词是Business Analysis&#xff0c;大家用的分析工具是Excel&#xff0c;后来数据量大了&#xff0c;Excel应付不过来了&#xff08;Excel最大支持行数为1048576行&#xff09;&#xff0c;人们开始转向python和R这样…

【通信原理(含matlab程序)】实验六:模拟信号的数字化

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识&#xff0c;如果大家喜欢&#xff0c;别忘点个赞加个关注哦&#xff0c;让我们一起共同进步~ &#x…

一文理解JVM虚拟机

一. JVM内存区域的划分 1.1 java虚拟机运行时数据区 java虚拟机运行时数据区分布图&#xff1a; JVM栈&#xff08;Java Virtual Machine Stacks&#xff09;&#xff1a; Java中一个线程就会相应有一个线程栈与之对应&#xff0c;因为不同的线程执行逻辑有所不同&#xff…

【JavaGuide面试总结】Java IO篇

【JavaGuide面试总结】Java IO篇1.有哪些常见的 IO 模型?2.Java 中 3 种常见 IO 模型BIO (Blocking I/O)NIO (Non-blocking/New I/O)AIO (Asynchronous I/O)1.有哪些常见的 IO 模型? UNIX 系统下&#xff0c; IO 模型一共有 5 种&#xff1a; 同步阻塞 I/O、同步非阻塞 I/O、…

浏览器兼容性 问题产生原因 厂商前缀 滚动条 css hack 渐近增强 和 优雅降级 caniuse

目录浏览器兼容性问题产生原因厂商前缀滚动条css hack渐近增强 和 优雅降级caniuse浏览器兼容性 问题产生原因 市场竞争标准版本的变化 厂商前缀 比如&#xff1a;box-sizing&#xff0c; 谷歌旧版本浏览器中使用-webkit-box-sizing:border-box 市场竞争&#xff0c;标准没有…

Java多线程案例之线程池

前言&#xff1a;在讲解线程池的概念之前&#xff0c;我们先来谈谈线程和进程&#xff0c;我们知道线程诞生的目的其实是因为进程太过重量了&#xff0c;导致系统在 销毁/创建 进程时比较低效&#xff08;具体指 内存资源的申请和释放&#xff09;。 而线程&#xff0c;其实做…

14岁初中生将免去四考,保送清华本硕博连读,乡亲们敲锣打鼓祝贺

导语&#xff1a; 很多学生在很小的时候&#xff0c;都曾有豪言壮语&#xff1a;“将来一定要考上清华北大”。可是真正接受教育&#xff0c;开始学习之后&#xff0c;学生们才能发现&#xff0c;原来学习这么难。不要说真的走进清华北大&#xff0c;即使是进入“985”大学&am…

C++ 智能指针(一) auto_ptr

文章目录前言 - 什么是智能指针&#xff1f;std::auto_ptrauto_ptr的使用常用成员方法&#xff1a;1. get()方法2. release()方法3. reset()方法4. operator()5. operator*() & operator->()auto_ptr的局限性前言 - 什么是智能指针&#xff1f; 在全文开始之前&#xf…

Redis事务的概述、设计与实现

1 Redis事务概述事务提供了一种“将多个命令打包&#xff0c; 然后一次性、按顺序地执行”的机制&#xff0c; 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后&#xff0c; 才会继续处理其他客户端的其他命令。以下是一个事务的例子&#xff0c; 它…

mysql-事务以及锁原理讲解(二)

1、前言 众所周知&#xff0c;事务和锁是mysql中非常重要功能&#xff0c;同时也是面试的重点和难点。本文会详细介绍事务和锁的相关概念及其实现原理&#xff0c;相信大家看完之后&#xff0c;一定会对事务和锁有更加深入的理解。 2、什么是事务 在维基百科中&#xff0c;对事…

7 处理多维特征的输入

文章目录课程前提知识问题引入模型改进修改神经层的增加学习能力与超参数课本代码课程来源: 链接课程文本来源借鉴&#xff1a; 链接以及&#xff08;强烈推荐&#xff09;Birandaの课程前提知识 BCELoss - Binary CrossEntropyLoss BCELoss 是CrossEntropyLoss的一个特例&am…

JavaEE day7 初识JavaScript2

函数小结 1.可以赋值给变量(其实就是被变量所指向) 2.装入容器中作为元素存在 3.在函数调用的过程中&#xff0c;函数类型作为实参 4.函数作为另一个函数的返回值 可以直接return一个函数 5.和java不同&#xff0c;JS中允许在一个函数中定义另一个函数&#xff0c;也就是嵌…

介绍一个令强迫症讨厌的小红点组件

前言 在 App 的运营中,活跃度是一个重要的指标,日活/月活……为了提高活跃度,就发明了小红点,然后让强迫症用户“没法活”。 小红点虽然很讨厌,但是为了 KPI,程序员也不得不屈从运营同学的逼迫(讨好),得想办法实现。这一篇,来介绍一个徽标(Badge)组件,能够快速搞…

解决OpenEuler系统 Minimal BASH-like line editing is supported

2023年开工解决的第一个问题~呃&#xff0c;起因是这样的&#xff0c;由于业务需要&#xff0c;修改内核参数后重新打包内核&#xff0c;然后安装内核rpm包后&#xff0c;强制关机&#xff0c;结果就出现如上界面。网上搜索后绝大部分是因为安装了双系统后找不到grub系统引导文…

ELK_Elasticsearch基础介绍

目录 一、搜索是什么&#xff1f; 二、数据库做搜索的弊端 三、全文检索、倒排索引和Lucene 四、什么是Elasticsearch 1、Elasticsearch的功能 2、Elasticsearch的使用场景 3、Elasticsearch的特点 五、elasticsearch核心概念 一、搜索是什么&#xff1f; 概念&#x…

vue2与vue3面试题之区别

目录vue2与vue3面试题之区别01&#xff1a;数据双向绑定&#xff08; proxy 替代 defineProperty&#xff09;02&#xff1a;生命周期函数的更换03&#xff1a;vue3的新特性04&#xff1a;缓存组件与更新组件05&#xff1a;ref和reactive的区别06&#xff1a;watch和watchEffec…

测试篇(五):什么是自动化测试、自动化测试分类、selenium工具、第一个自动化测试程序

目录一、什么是自动化测试二、自动化测试分类2.1 单元测试2.2 UI自动化测试三、selenium工具3.1 selenium的介绍3.2 环境部署3.3 selenium的常用方法四、第一个自动化测试用例一、什么是自动化测试 在日常生活中我们会见到&#xff0c;自动化的水龙头、无人驾驶汽车、自动化的…

Mysql,使用FIND_IN_SET()函数处理多表关联问题.

这里有 user表、teacher表&#xff0c;其中 teacher.user_ids 字段中的值是 user.id 值以英文半角逗号拼接而来。现在&#xff0c; 我们需要在查询 teacher 表数据时&#xff0c;将 user.name 的值也查询出来。使用以下的SQL语句&#xff0c;即可实现需求。SELECTGROUP_CONCAT(…