iptables基础:

iptables的5条链分别是:

prerouting 路由前

input 发到本机进程的报文

ouput 本机某进程发出的报文

forword 转发

postrouting 路由后

iptables的4张表:

filter 负责过滤工程,防火墙; 内核模块:iptables_filter

nat 网络地址转换功能,内核模块:iptables_nat

mangle 拆解报文,做出修改,并重新封装,内核模块:iptables_mangle

raw 关闭nat表上启用的连接追踪机制,iptables_raw

postrouting    路由后
iptables其实不是真正的防火墙,我们可以将其理解为一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对一个的“安全框架”(netfilter)中,这个框架才是真正的防火墙。
netfilter是防火墙真正的框架,netfilter位于内核空间。
iptables其实是一个命令工具,位于用户空间,我们用这个工具操作真正的框架。
链与表对应的功能:
prerouting的规则可以存在于:raw表、mangle表、nat表。
input的规则可以存在于:mangle表、filter表、(centos7中还有nat表,centos6中没有)
forword的规则可以存在于:mangle表、filter表。
output的规则可以存在于:raw表、mangle表、nat表、filter表。
postrouting的规则可以存在于:mangle表、nat表。 在实际的使用过程中,通常是以表作为操作入口,对规则进行定义,表与链的关系罗列:
raw表的规则可以被prerouting、output使用
mangle表的规则可以被prerouting、input、forword、output、postrouting使用
nat表中的规则可以被prerouting、output、postrouting使用
filter表中的规则可以被input、forword、output使用

一. 对iptables进行查询

1.查询每张表中的含有的链:

iptables -t 表名 -L

-t 指定要操作的表;-L 列出规则

![](https://img2018.cnblogs.com/blog/1890094/201912/1890094-20191216102646054-132322971.png)
2.查询每张表中的链里面对一个的规则:
iptables -t filter -L INPUT/OUTPUT/FORWORD/PREROUTING/POSTROUTING
![](https://img2018.cnblogs.com/blog/1890094/201912/1890094-20191216104105146-888823344.png)
pkts:对应的规则匹配到的报文数
bytes:对应匹配到的报文包的大小总和
target:规则对应的target,往往表示规则对应的“动作”,即规则匹配成功后需要采取的措施
prot:表示规则对应的协议,是否只针对某些协议应用此规则
opt:表示规则对应的选项
in:表示数据包由哪个接口网卡接入,我们可以设置通过哪块网卡流入的报文需要匹配当前的规则
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前的规则
source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段
destination:表示规则对应的目标地址,可以是一个ip,可以是一个网段
3.iptables --line-number -t 表名 -L 链名 查看某张表中的某条链
![](https://img2018.cnblogs.com/blog/1890094/201912/1890094-20191216110140036-553929005.png)
--line-number 表示显示规则的序号; -n 表示不解析ip地址

二. 对iptables进行“增、删、改”操作



iptables -F INPUT 清空filter表中的规则

1.增加规则

iptables -t filter -I INPUT -s 192.168.2.85 -j DROP

-t 指定要操作的表

-I 表示insert,即插入的意思,指定插入到哪一条链中

-s 指明匹配条件中的(source)源地址,如果报文的源地址属于-s对应的地址,那么报文满足匹配条件

-j 指明当匹配条件被满足时,所对应的动作,上例中指定的动作为DROP,在上例中,当报文的的源地址为192.168.2.85时,报文则被DROP(丢弃)

再次查看filter表中的INPUT链,发现规则已经被添加了,,在iptables中,动作被称之为“target”,所以上图中target字段对应的动作为DROP

此时,通过192.168.2.85去ping主机93



如上图所示,ping 93主机时。没有回应,iptables已经生效,ping发送的报文没有被93主机接受,而是被丢弃了。

现在INPUT链中已经存在了一条规则,它拒绝所有的192.168.2.85主机中的报文,此时,我们在这条规则之后再配置一条规则,后面的规则规定规定接受所有来自192.168.2.85的报文,测试此时iptables是否会接受来自192.168.2.85的报文?



-A 在链的尾部追加一条规则

此时查看INPUT链,发现规则已经成功追加至INPUT链的末尾,此时ping192.168.2.85主机



发现仍然ping不通,第二条规则没有生效。计数器上也可以看到没有任何报文被第二条规则匹配到。

现在,添加一条新规则到链首,新规则仍定义接受所有192.168.2.85的报文



现在第一条规则就是可以接受来自192.168.2.85的所有报文,而且此时计数是0,此刻,再从85上向93发起请求



93主机上已经可以正常接收到响应报文了,此时93主机上的INPUT链,第一条规则的计数器显示已经匹配到的报文数量。



所以说匹配规则的顺序很重要,如果报文已经被前面的规则匹配到,iptables则会执行对应的动作,及时后面的规则也能匹配到当前的报文,很有可能没有机会再对报文执行相应的动作了。以上图为例,报文被第一条规则匹配到,于是当前报文就被放行了,因为报文已经被执行了,所以,即使上图中的第二条规则能够匹配到刚才放行的报文,也没有机会再对刚才的报文进行丢弃动作了,这就是iptables的工作机制。

使用--line-number选项可以列出规则的序号,如下图所示



我们也可以在添加规则时,指定新增的规则的编号,这样我们就能在任意位置插入规则了

iptables -t filter -I INPUT 2 -s 192.168.2.85 -j ACCEPT



2.删除规则

删除匹配规则有如下两种方法:

方法一 根据规则编号去删除

方法二 根据具体的匹配条件与动作删除规则

使用方法一删除第三条规则:



-D 表示删除指定链中的某条规则,-D INPUT 3表示删除INPUT链中的第三条规则

使用方法二删除第三条规则:



不过删除时一次匹配一条规则

3.修改规则

修改某条规则中动作,例如将INPUT中的DROP动作改为REJECT

iptables -t filter -R INPUT 1 -s 192.168.2.235 -j REJECT



-R 表示修改指定的链,—R INPUT 1表示修改INPUT链中的第一条规则,-j REJECT表示将INPUT链中的第一条规则的动作修改为REJECT

再次从235主机向93主机发起ping请求



如图所示,直接提示目标不可达,而DROP是直接卡在那里。REJECT比DROP更加干脆

其实,我们还可以修改指定链的“默认策略”



每张表的每条链中都有默认策略,我们可以理解为默认动作。

当报文中么有被任何规则时,防火墙会按照默认动作处理报文,我们可以修改指定链的默认策略。



-P 指定要修改的表,-P FORWARD DROP表示将FORWARD链的默认策略改为DROP

4.保存规则

在默认情况下,我们对防火墙所做出的修改都是临时的,换句话说就是重启iptables服务或者重启服务器后,平常添加的规则或者对规则做出的修改都将消失,为了防止这种情况的发生,我们需要将规则保存。

centos6中: service iptables save 规则默认被保在/etc/sysconfig/iptables文件中

centos7中:

#配置好yum源以后安装iptables-service

# yum install -y iptables-services

#停止firewalld

# systemctl stop firewalld

#禁止firewalld自动启动

# systemctl disable firewalld

#启动iptables

# systemctl start iptables

#将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务

# systemctl enable iptables

linux-iptables增、删、改、保存的更多相关文章

  1. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  2. C# ADO.NET (sql语句连接方式)(增,删,改)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  4. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  5. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  6. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

  9. StringBuilder修改字符串内容,增,删,改,插

    package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...

  10. drf框架 - 序列化组件 | ModelSerializer (查,增,删,改)

    ModelSerializer 序列化准备: 配置 settings.py # 注册rest_framework框架 INSTALLED_APPS = [ ... 'rest_framework' ] ...

随机推荐

  1. nyoj 113-字符串替换 (python replace, try ... except)

    113-字符串替换 内存限制:64MB 时间限制:3000ms 特判: No 通过数:31 提交数:71 难度:2 题目描述: 编写一个程序实现将字符串中的所有"you"替换成&q ...

  2. SpringBoot 正式环境必不可少的外部化配置

    前言 <[源码解析]凭什么?spring boot 一个 jar 就能开发 web 项目> 中有读者反应: 部署后运维很不方便,比较修改一个 IP 配置,需要重新打包. 这一点我是深有体会 ...

  3. 学习记录:《C++设计模式——李建忠主讲》4.“单一职责”模式

    单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式:装饰模式(Decorator).桥 ...

  4. win10中java环境变量配置

    首先,应该安装jdk,jdk的安装一般是jdk8,一般情况下去官网下载,此处有jdk8的网盘链接: -- 在安装jdk时候,可以看下这篇jdk和jre区别的博客--,有助于理解两者的区别和联系. 接触 ...

  5. 2019-10-24:渗透测试,sqli-labe,less18,19关

    less19基于错误_POST_Referer_请求头注入 查看关键源码,跟18关不一样的只是,回显的是Referer不是User-Agent,判断INSERT语句结构:INSERT INTO tab ...

  6. Java 类、接口的API

    本章节收集的类/接口API有: Object类,枚举,包装类,接口Comparable,类Arrays,Thread类,System类,Math,BigInteger,Random,日期时间,异常 O ...

  7. 程序员的进阶课-架构师之路(9)-平衡二叉树(AVL树)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  8. git本地项目连接私人远程仓库以及遇到的问题

    一.引言 1.最开始的时候,我本地项目连接的是github远程仓库,现在要转到公司的私人远程仓库. 2.我和大家说两个事: (1)本地项目连接github远程仓库, (2)本地项目连接私人远程仓库, ...

  9. 小白学 Python 爬虫(12):urllib 基础使用(二)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  10. 单核苷酸多态性SNP(single nucleotide polymorphism)

    定义 主要指基因组水平上由单个核苷酸的变异所引起的 DNA 序列多态性. 在基因组水平上由单个核苷酸的变异所引起的DNA序列多态性.即:在不同个体的同一条染色体或同一位点的核苷酸序列中,绝大多数核苷酸 ...