防火墙规则-iptables四表五链

2023-11-16

iptables

作用:防止别人进入你的电脑,攻击你的电脑

软件防火墙:

​ Linux系统的防火墙功能由内核实现

实际上是一个数据过滤机制

包过滤机制是netfilter, 管理工具是iptables。

iptables是一个软件,实际不是防火墙,只是一个给netfilter传递参数的中间人,查看netfilter的参数。

netfilter

位于linux内核中的包过滤防火墙功能体系

称为linux防火墙的“内核态”

iptables

位于/sbin/iptables,是用来管理防火墙的工具。

为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包。

称为防火墙的”用户态“。

规则表规则链(四表五链)

表是规则链的集合

raw:确定是否对数据包进行状态追踪

​ 如何确定曾经是否连接?

​ 三次握手中,未连接过的syn = 1

mangle:为数据设置标记 =》往数据包中插入标记

nat:修改数据包中的源,目标ip地址或端口

filter:确定是否放行该数据包

规则链是规则的集合

INPUT :处理入站数据包

OUTPUT:处理出站数据包

FORWARD:处理转发数据包

POSTROUTING:在进行路由选择后处理数据包

PREROUTING:在进行路由选择前处理数据包

INPUT链用于处理访问防火墙本机的数据,OUTPUT链用于处理防火墙本机访问其他主机的数据
FORWARD链用于处理需要经过防火墙转发的数据包,源地址、目标地址均不是防火墙本机
POSTROUTING、PREROUTING链分别用于在确定路由后、确定路由前对数据包进行处理
在“主机防火墙”中,主要针对服务器本机进出的数据实施控制, 多以INPUT、OUTPUT链的应用为主
在“网络防火墙”中,主要针对数据转发实施控制,特别是防火墙主机作为网关使用时的情况 ,因此多以FORWARD、PREROUTING、POSTROUTING链的应用为主

规则链内的匹配顺序

按顺序依次进行检查,找到相匹配的规则即停止(LOG策略会有例外)

若在该链内找不到匹配规则,则按照该链的默认策略处理

练习:
1.禁止192.168.0.205的主机访问的本机的80端口
2.禁止192.168.0.205的主机访问的本机的3306端口
3.禁止所有的主机ping通本机,但是本机可以ping通别的主机
4.允许192.168.0.205的主机访问的本机的22端口
5.默认策略设置为禁止访问

[root@sanchuang ~]# cat iptables.sh
#!/bin/bash

#清除filter表的规则,表里的链里的规则都会被清空
iptables -F

#设置默认策略
iptables -P INPUT DROP

#禁用web
iptables -A INPUT -s 192.168.0.205 -p tcp --dport 80 -j DROP

#MYSQL
iptables -A INPUT -s 192.168.0.205 -p tcp --dport 3306 -j DROP

#ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

#ssh
iptables -A INPUT -s 192.168.0.205 -p tcp --dport 22 -j ACCEPT

[root@sanchuang ~]#
[root@sanchuang ~]# iptables -L -n --line-num -v
-n 以数字的形式显示 number
–line-num 显示规则的编号
-v 显示匹配到的数据包的个数和字节数
Chain INPUT (policy DROP 132 packets, 16358 bytes)
num pkts bytes target prot opt in out source destination
1 15 760 DROP tcp – * * 192.168.0.205 0.0.0.0/0 tcp dpt:80
2 0 0 DROP tcp – * * 192.168.0.205 0.0.0.0/0 tcp dpt:3306
3 4 336 DROP icmp – * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
4 0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
5 59 3592 ACCEPT tcp – * * 192.168.0.205 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 49 packets, 8188 bytes)
num pkts bytes target prot opt in out source destination
[root@sanchuang ~]#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZ6lcUst-1597976766069)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597478810814.png)]

设置规则内容:

-A:在链尾追加一条新的规则
-I:在指定位置(或链首)插入一条新的规则
-R:修改、替换指定位置或内容的规则
-P:设置指定链的默认策略

列表查看规则

-L:列表查看各条规则信息
–line-numbers:查看规则信息时显示规则的行号
-n:以数字形式显示IP地址、端口等信息
-v:显示数据包个数、字节数等详细信息

清除规则

-D:删除指定位置或内容的规则
-F:清空规则链内的所有规则

自定义规则链

-N:创建一条新的规则链
-X:删除自定义的规则链

流程:

  1. 新建
  2. 加规则
  3. 引用
其他

-h:查看iptables命令的使用帮助

设置匹配数据包的条件

  • 通用条件匹配
    • 可直接使用,不依赖于其他的条件或扩展模块
    • 包括网络协议、IP地址、网络接口等匹配方式
  • 隐含条件匹配
  • 显式条件匹配
通用条件匹配
协议匹配
  • 使用“-p 协议名”的形式
  • 协议名可使用在“/etc/protocols”文件中定义的名称
  • 常用的协议包括tcp、udp、icmp等
地址匹配
  • 使用“-s 源地址”、 “-d 目标地址”的形式
  • 地址可以是单个IP地址、网络地址(带掩码长度)
接口匹配
  • 使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口
显示条件匹配
数据包状态显示
  • 使用“-m state” 结合 --state 状态类型的形式
  • 同时表示多种状态时以逗号“,”分隔
  • 常见的数据包状态包括:NEW、ESTABLISHED、RELATED
接口匹配
  • 使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口
显示条件匹配
数据包状态显示
  • 使用“-m state” 结合 --state 状态类型的形式
  • 同时表示多种状态时以逗号“,”分隔
  • 常见的数据包状态包括:NEW、ESTABLISHED、RELATED

lsmod 查看内核加载了哪些模块

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防火墙规则-iptables四表五链 的相关文章

  • 在存储之前对用户的 IP 地址进行加密

    我在用着PHP http www php net and MySQL http www mysql com 我想将用户的IP地址存储到数据库中比较目的 例如 每个 IP 的线程仅允许一个标志 按下面的方法做可以吗 在 PHP 中检索它 ip
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 具有 IP 限制的 API 密钥与 HTTP Referrer 限制

    我有一个谷歌地图 api 密钥设置为 HTTP Referrer 限制 还启用了地理编码 api 并在三个插件中使用 但另一个插件 预订 也需要地理编码 api 但带有 IP 限制 这就是为什么我收到错误 具有引用限制的 API 密钥不能与
  • Session具体是做什么的?为什么不把ip和域名session看成一样呢?

    我想知道session具体有哪些 这不限于一种语言 下面仅以 php 为例 我使用 php session 当我使用我的网站域名时它运行良好 为了在 Windows 操作系统上的本地 vmvare ubuntu 中测试该网站 我更改了 Wi
  • 在 GO 中获取传入的 TTL

    我正在为我正在进行的一个小项目而苦苦挣扎 我想在 GO 中实现功能 允许我在传出 UDP 数据包上设置 IP 标头 TTL 然后发送该数据包并查看另一端收到的 TTL 我尝试使用 net 库提供的多个连接 但到目前为止没有成功 我可以设置
  • sed/awk + ​​regex 删除第一个字段匹配的重复行(ip 地址)

    我需要一个解决方案来删除第一个字段是 IPv4 地址的重复行 例如 我在文件中有以下行 192 168 0 1 text1 text2 192 168 0 18 text03 text7 192 168 0 15 sometext some
  • 如何在局域网中找到我的服务器?

    我有两个自己的 C 和 Java 应用程序 服务器和客户端 它既在一个局域网内 又可以通过指定的端口传输数据 我想让客户端可以找到服务器的IP 但怎么办呢 使用地址掩码枚举所有可能的 IP 坏主意 这会花费很多时间 可能存在某种方式 我可以
  • Selenium Python 改变 IP

    我正在使用 Selenium for Python 编写一个网络爬虫 抓取工具每小时会多次访问同一网站 因此我希望找到一种方法 每隔几次搜索就更改我的 IP 最好的策略是什么 我使用的是 Firefox 是否有任何我可以切换的预先编写的代码
  • PHP:gethostbyname 错误

    我在用gethostbyname 获取应用程序中域的 IP 地址 在某些情况下 还会检查 50 9 49 等无效地址 echo gethostbyname 50 9 49 returns 50 9 0 49 在这种情况下gethostbyn
  • 如何使用 PHP 获取服务器的外部 IP?

    我经常听到人们说使用 SERVER SERVER ADDR 但这会返回我的服务器的 LAN IP 例如 192 168 1 100 我想要外部 IP 如果您使用路由器 则无法通过传统 PHP 获取 ISP 指定的底层 IP 地址 获取外部
  • 如何在 Windows 命令行中将变量设置为 IP?

    有没有一种简单的方法可以从我的服务提供商处获取 IP 地址并通过命令提示符将其放入变量中 像下面这样 SET hostIP nslookup address ECHO hostIP Or SET hostIP ipconfig addres
  • 使用 PHP 将 IP 地址存储在 MySQL 数据库中[重复]

    这个问题在这里已经有答案了 mysql 中 IP 地址的正确字段类型是什么 使用 PHP 存储它的正确方法是什么 本教程 http daipratt co uk mysql store ip address 可能对你有帮助 保存 IPv4
  • 监控所有使用网络的应用程序建立的连接的 IP 地址,无需 root Android 手机

    我正在尝试构建一个 Android 应用程序 无需 root 手机 该应用程序从所有应用程序与手机之间的网络连接收集 IP 地址 我负责这个项目 关键点是手机必须保持未root状态 这 据我所知 意味着我不能使用tcpdump或libpca
  • 阻止 IP 地址访问 Heroku 上的 Flask 应用程序?

    我需要在我的网站上阻止一个 IP 地址 在 Heroku 上运行 Flask 应用程序 我看到我的服务器每秒有 50 个请求 这绝对不应该发生 我熟悉在 Apache 服务器上使用 htaccess 这里有类似的东西吗 Gunicorn 服
  • 查找尝试连接 ServerSocket 的程序的 IP

    尽管我进行了搜索 但找不到答案 假设我有以下 Java 代码 ServerSocket serve null try server new ServerSocket 5567 catch IOException e System err p
  • Python中获取网络地址和网络掩码

    在我的 Python 脚本中 我需要检索运行脚本的计算机的 IP 地址及其网络地址和网络字节 至于IP地址 我在存档中找到了解决方案 import socket s socket socket socket AF INET socket S
  • 如何对 IP 地址列表进行排序并计算每个地址的类别和网络掩码? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有两个选择 一是我有一个包含 IP 列表的数组 例如 my Ip array that has the IPs below in it
  • Windows XP 中的 inet_pton 或 InetPton 等价物是什么?

    我需要确定特定字符串是否是有效的 IPv4 或 IPv6 地址文字 如果我理解正确的话 在 POSIX 系统上执行此操作的正确方法是使用inet pton将其转换为网络地址结构 看看是否成功 Windows Vista 及更高版本有Inet
  • jQuery JSON 请求得到“200 OK”答案,但没有内容

    我正在使用 jQuery 通过访问者的 IP 地址获取其位置 有一项很棒的服务叫做免费地理IP http freegeoip appspot com 我需要做的就是在 URL 末尾添加 json 或 xml 然后添加 IP 地址 它将返回所
  • 在 Linux/Ubuntu 计算机上通过 Python/Django 设置网络设置

    我正在为嵌入式计算机开发一个简单的网络界面 计算机将附带一个静态默认 IP 然后需要由可能不懂技术 Linux 的安装技术人员进行更新 基本上我需要从 Django 应用程序更改以下系统设置 IP地址 Subnet 默认网关 DNS 服务器

随机推荐