参考 http://www.zsythink.net/archives/1517

命令小结

1. 规则查看

查看对应表的所有规则
iptables -t 表名 -nvL

查看指定链的所有规则
iptables -t 表名 -nvL 链名

参数含义
-t选项指定要操作的表,省略"-t 表名"时,默认表示操作filter表
-L表示列出规则,即查看规则
-v显示更多信息
-n不对地址进行名称反解,直接显示ip地址
--line-numbers 或--line,显示规则的序号
-x计数器中的信息显示为精确的计数值,而不是经过可读优化的计数值。

iptalbes -t nat -nvL
iptables -t nat -nvL INPUT

1. 添加规则

注意点:添加规则时,规则的顺序非常重要

(1) -A尾部添加

在指定表的指定链的尾部添加一条规则,-A选项表示在对应链的末尾添加规则
示例:iptables -t filter -A IPUT -s 192.168.1.146 -j DROP
语法:iptables -t 表名 -A 链名 匹配条件 -j 动作

(2) -I 头部添加

在指定表的指定链的首部添加一条规则,-I选型表示在对应链的开头添加规则 示例:iptables -t filter -I IPUT -s 192.168.1.146 -j DROP
语法:iptables -t 表名 -I 链名 匹配条件 -j 动作

(3) 指定位置添加

示例:iptables -t filter -I IPUT 3 -s 192.168.1.146 -j DROP
语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作

(4) 设置指定表的指定链的默认策略(默认动作),并非添加规则。

示例: iptables -t filter -P FORWARD ACCEPT
语法:iptables -t 表名 -P 链名 动作

2. 删除规则

(1) 按照规则序号删除规则

iptables -t filter -D INPUT 3
语法: iptables -t 表名 -D 链名 规则序号

(2) 按照具体的匹配条件与动作删除规则

iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
语法: iptables -t 表名 -D 链名 匹配条件 -j 动作

(3) 删除指定表的指定链中的所有规则,-F选项表示清空对应链中的规则。

iptables -t filter -F INPUT
语法: iptables -t 表名 -F 链名

(4) 删除指定表中的所有规则,执行时需三思。

iptables -t filter -F
语法: iptables -t 表名 -F

3. 修改规则

注意点:如果使用-R选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源IP,目标IP等。
iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT
语法: iptables -t 表名 -R 链名 规则序号 匹配条件 -j 动作

其他修改规则的方法:先通过编号删除规则,再在原编号位置添加一条规则。

single-content

正文

使用iptables -F INPUT命令清空filter表INPUT链中的规则

清空INPUT链以后,filter表中的INPUT链已经不存在任何的规则,但是可以看出,INPUT链的默认策略是ACCEPT,也就是说,INPUT链默认"放行"所有发往本机的报文,当没有任何规则时,会接受所有报文,当报文没有被任何规则匹配到时,也会默认放行报文。

1. 增加规则

那么此处,我们就在156上配置一条规则,拒绝192.168.1.146上的所有报文访问当前机器

上图中,使用 -t选项指定了要操作的表,此处指定了操作filter表,与之前的查看命令一样,不使用-t选项指定表时,默认为操作filter表。

使用-I选项,指明将"规则"插入至哪个链中,-I表示insert,即插入的意思,所以-I INPUT表示将规则插入于INPUT链中,即添加规则之意。

使用-s选项,指明"匹配条件"中的"源地址",即如果报文的源地址属于-s对应的地址,那么报文则满足匹配条件,-s为source之意,表示源地址。

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

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

那么此时,我们再通过192.168.1.146去ping主机156,看看能否ping通。

如上图所示,ping 156主机时,PING命令一直没有得到回应,看来我们的iptables规则已经生效了,ping发送的报文压根没有被156主机接受,而是被丢弃了,所以更不要说什么回应了。

此时,我们再次查看iptables中的规则,可以看到,已经有24个包被对应的规则匹配到,总计大小2016bytes。

现在INPUT链中已经存在了一条规则,它拒绝了所有来自192.168.1.146主机中的报文,如果此时,我们在这条规则之后再配置一条规则,后面这条规则规定,接受所有来自192.168.1.146主机中的报文,那么,iptables是否会接受来自146主机的报文呢?我们动手试试。

使用如下命令在filter表的INPUT链中追加一条规则,这条规则表示接受所有来自192.168.1.146的发往本机的报文。

上图中,使用-A选项,表示在对应的链中"追加规则",-A为append之意,所以,-A INPUT则表示在INPUT链中追加规则,而之前示例中使用的-I选项则表示在链中"插入规则",聪明如你一定明白了,它们的本意都是添加一条规则,只是-A表示在链的尾部追加规则,-I表示在链的首部插入规则而已。

使用-j选项,指定当前规则对应的动作为ACCEPT。

在146主机上再次使用ping命令向156主机发送报文,发现仍然是ping不通的,看来第二条规则并没有生效。而且从上图中第二条规则的计数器可以看到,根本没有任何报文被第二条规则匹配到。

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

我们也可以在添加规则时,指定新增规则的编号,这样我们就能在任意位置插入规则了,我们只要把刚才的命令稍作修改即可,如下。

仍然使用-I选项进行插入规则操作,-I INPUT 2表示在INPUT链中新增规则,新增的规则的编号为2

2. 删除规则

假如我们想要删除上图中的第3条规则,则可以使用如下命令。

上例中,使用了-t选项指定了要操作的表(没错,省略-t默认表示操作filter表),使用-D选项表示删除指定链中的某条规则,-D INPUT 3表示删除INPUT链中的第3条规则。

当然,我们也可以根据具体的匹配条件与动作去删除规则,比如,删除下图中源地址为192.168.1.146,动作为ACCEPT的规则,于是,删除规则的命令如下。

上图中,删除对应规则时,仍然使用-D选项,-D INPUT表示删除INPUT链中的规则,剩下的选项与我们添加规则时一毛一样,-s表示以对应的源地址作为匹配条件,-j ACCEPT表示对应的动作为接受,所以,上述命令表示删除INPUT链中源地址为192.168.1.146,动作为ACCEPT的规则。

而删除指定表中某条链中的所有规则的命令,我们在一开始就使用到了,就是"iptables -t 表名 -F 链名"

-F选项为flush之意,即冲刷指定的链,即删除指定链中的所有规则,但是注意,此操作相当于删除操作,在没有保存iptables规则的情况下,请慎用。

其实,-F选项不仅仅能清空指定链上的规则,其实它还能清空整个表中所有链上的规则,不指定链名,只指定表名即可删除表中的所有规则,命令如下

iptables -t 表名 -F

3. 修改规则

我们可以使用-R选项修改指定的链中的规则,在修改规则时指定规则对应的编号即可(有坑,慎行),示例命令如下

上例中,-R选项表示修改指定的链,使用-R INPUT 1表示修改INPUT链的第1条规则,使用-j REJECT表示将INPUT链中的第一条规则的动作修改为REJECT,注意:上例中, -s选项以及对应的源地址不可省略,即使我们已经指定了规则对应的编号,但是在使用-R选项修改某个规则时,必须指定规则对应的原本的匹配条件(如果有多个匹配条件,都需要指定)。

如果上例中的命令没有使用-s指定对应规则中原本的源地址,那么在修改完成后,你修改的规则中的源地址会自动变为0.0.0.0/0(此IP表示匹配所有网段的IP地址),而此时,-j对应的动作又为REJECT,所以在执行上述命令时如果没有指明规则原本的源地址,那么所有IP的请求都被拒绝了(因为没有指定原本的源地址,当前规则的源地址自动变为0.0.0.0/0),如果你正在使用ssh远程到服务器上进行iptables设置,那么你的ssh请求也将会被阻断。

既然使用-R选项修改规则时,必须指明规则原本的匹配条件,那么我们则可以理解为,只能通过-R选项修改规则对应的动作了,所以我觉得,如果你想要修改某条规则,还不如先将这条规则删除,然后在同样位置再插入一条新规则,这样更好,当然,如果你只是为了修改某条规则的动作,那么使用-R选项时,不要忘了指明规则原本对应的匹配条件。

DROP与REJECT有什么不同呢?从字面上理解,DROP表示丢弃,REJECT表示拒绝,REJECT表达的意思好像更坚决一点,我们再次从146主机上向156主机上发起ping请求,看看与之前动作为DROP时有什么不同。

如上图所示,当156主机中的iptables规则对应的动作为REJECT时,从146上进行ping操作时,直接就提示"目标不可达",并没有像之前那样卡在那里,看来,REJECT比DROP更加"干脆"。

修改指定链的"默认策略"

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

当报文没有被链中的任何规则匹配到时,或者,当链中没有任何规则时,防火墙会按照默认动作处理报文,我们可以修改指定链的默认策略,使用如下命令即可。

使用-t指定要操作的表,使用-P选项指定要修改的链,上例中,-P FORWARD DROP表示将表中FORWRD链的默认策略改为DROP。

正文

转载参考网址: http://www.zsythink.net/archives/1199

在之前的文章中,我们已经总结过,iptables为我们预定义了4张表,它们分别是raw表、mangle表、nat表、filter表,不同的表拥有不同的功能。

filter负责过滤功能,比如允许哪些IP地址访问,拒绝哪些IP地址访问,允许访问哪些端口,禁止访问哪些端口,filter表会根据我们定义的规则进行过滤,filter表应该是我们最常用到的表了,所以此处,我们以filter表为例,开始学习怎样实际操作iptables。

怎样查看filter表中的规则呢?使用如下命令即可查看。

上例中,我们使用-t选项,指定要操作的表,使用-L选项,查看-t选项对应的表的规则,-L选项的意思是,列出规则,所以,上述命令的含义为列出filter表的所有规则,注意,上图中显示的规则(绿色标注的部分为规则)是Centos6启动iptables以后默认设置的规则,我们暂且不用在意它们,上图中,显示出了3条链(蓝色标注部分为链),INPUT链、FORWARD链、OUTPUT链,每条链中都有自己的规则,前文中,我们打过一个比方,把"链"比作"关卡",不同的"关卡"拥有不同的能力,所以,从上图中可以看出,INPUT链、FORWARD链、OUTPUT链都拥有"过滤"的能力,所以,当我们要定义某条"过滤"的规则时,我们会在filter表中定义,但是具体在哪条"链"上定义规则呢?这取决于我们的工作场景。比如,我们需要禁止某个IP地址访问我们的主机,我们则需要在INPUT链上定义规则。因为,我们在理论总结中已经提到过,报文发往本机时,会经过PREROUTING链与INPUT链(如果你没有明白,请回顾前文),所以,如果我们想要禁止某些报文发往本机,我们只能在PREROUTING链和INPUT链中定义规则,但是PREROUTING链并不存在于filter表中,换句话说就是,PREROUTING关卡天生就没有过滤的能力,所以,我们只能在INPUT链中定义,当然,如果是其他工作场景,可能需要在FORWARD链或者OUTPUT链中定义过滤规则。

话说回来,我们继续聊怎样查看某张表中的规则。

我们可以使用iptables -t 表名 -L命令列出filter表中的所有规则,示例如下。
iptables -t raw -L
iptables -t mangle -L
iptables -t nat -L
其实,我们可以省略-t filter,当没有使用-t选项指定表时,默认为操作filter表,即iptables -L表示列出filter表中的所有规则。

我们还可以只查看指定表中的指定链的规则,使用-L 链名,比如:

我们可以使用-v选项,查看出更多的、更详细的信息,示例如下。

可以看到,使用-v选项后,iptables为我们展示的信息更多了,那么,这些字段都是什么意思呢?
其实,这些字段就是规则对应的属性,说白了就是规则的各种信息,那么我们来总结一下这些字段的含义。
pkts:  对应规则匹配到的报文的个数。
bytes:对应匹配到的报文包的大小总和。
target:规则对应的target,往往表示规则对应的"动作",即规则匹配成功后需要采取的措施。
prot:表示规则对应的协议,是否只针对某些协议应用此规则。
opt:表示规则对应的选项。
in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。
source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

细心如你一定发现了,上图中的源地址与目标地址都为anywhere,看来,iptables默认为我们进行了名称解析,但是在规则非常多的情况下如果进行名称解析,效率会比较低,所以,在没有此需求的情况下,我们可以使用-n选项,表示不对IP地址进行名称反解,直接显示IP地址,示例如下。

如上图所示,规则中的源地址与目标地址已经显示为IP,而非转换后的名称。

当然,我们也可以只查看某个链的规则,并且不让IP进行反解,这样更清晰一些,比如 iptables -nvL INPUT

如果你习惯了查看有序号的列表,你在查看iptables表中的规则时肯定会很不爽,没有关系,满足你,使用--line-numbers即可显示规则的编号,示例如下。

–line-numbers选项并没有对应的短选项,不过我们缩写成–line时,centos中的iptables也可以识别。

如上图,表中的每个链的后面都有一个括号,括号里面有一些信息,如下图红色标注位置,那么这些信息都代表了什么呢?

上图中INPUT链后面的括号中包含policy ACCEPT ,0 packets,0bytes 三部分。

policy表示当前链的默认策略,policy ACCEPT表示上图中INPUT的链的默认动作为ACCEPT,换句话说就是,默认接受通过INPUT关卡的所有请求,所以我们在配置INPUT链的具体规则时,应该将需要拒绝的请求配置到规则中,说白了就是"黑名单"机制,默认所有人都能通过,只有指定的人不能通过,当我们把INPUT链默认动作设置为接受(ACCEPT),就表示所有人都能通过这个关卡,此时就应该在具体的规则中指定需要拒绝的请求,就表示只有指定的人不能通过这个关卡,这就是黑名单机制,但是,你一定发现了,上图中所显示出的规则,大部分都是接受请求(ACCEPT),并不是想象中的拒绝请求(DROP或者REJECT),这与我们所描述的黑名单机制不符啊,按照道理来说,默认动作为接受,就应该在具体的规则中配置需要拒绝的人,但是上图中并不是这样的,之所以出现上图中的情况,是因为IPTABLES的工作机制导致到,上例其实是利用了这些"机制",完成了所谓的"白名单"机制,并不是我们所描述的"黑名单"机制,我们此处暂时不用关注这一点,之后会进行详细的举例并解释,此处我们只要明白policy对应的动作为链的默认动作即可,或者换句话说,我们只要理解,policy为链的默认策略即可。

packets表示当前链(上例为INPUT链)默认策略匹配到的包的数量,0 packets表示默认策略匹配到0个包。
bytes表示当前链默认策略匹配到的所有包的大小总和。

其实,我们可以把packets与bytes称作"计数器",上图中的计数器记录了默认策略匹配到的报文数量与总大小,"计数器"只会在使用-v选项时,才会显示出来。
当被匹配到的包达到一定数量时,计数器会自动将匹配到的包的大小转换为可读性较高的单位,如下图所示。
如果你想要查看精确的计数值,而不是经过可读性优化过的计数值,那么你可以使用-x选项,表示显示精确的计数值,示例如下。
每张表中的每条链都有自己的计数器,链中的每个规则也都有自己的计数器,没错,就是每条规则对应的pkts字段与bytes字段的信息。

iptables 2: 规则的查看、添加、删除、修改相关推荐

  1. SQL语句添加删除修改字段

    用SQL语句添加删除修改字段 1.增加字段      alter table docdsp    add dspcode char(200) 2.删除字段      ALTER TABLE table ...

  2. [转载]用SQL语句添加删除修改字段

    原文地址:用SQL语句添加删除修改字段作者:天涯草 用SQL语句添加删除修改字段 1.增加字段      alter table docdsp    add dspcode char(200) 2.删 ...

  3. Js操作表格-对表格单元格的添加删除修改

    动态表格 动态表格彻底研究 对表格单元格的添加删除修改并对其进行移动以及拷贝等操作,是目前应用开发中常用的技术 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 55 5 6 6 6 ...

  4. 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

    用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...

  5. 用SQL语句添加删除修改字段及一些表与字段的基本操作 .

    用SQL语句添加删除修改字段及一些表与字段的基本操作 分类: MS SQL 2009-07-02 14:41 222人阅读 评论(0) 收藏 举报 用SQL语句添加删除修改字段 1.增加字段      ...

  6. mysql修改字段结构_MySQL修改表结构及其添加删除修改字段功能

    MySQL修改表结构添加删除修改字段 创建数据库CREATE DATABASE database_name 创建表CREATE TABLE `user` ( `id` int(11) unsigned ...

  7. mysql删除字段sql语句_用SQL语句添加删除修改字段

    用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...

  8. sqlserverdatasouce控件如何让添加删除修改自动化

    对于sqlserverdatasouce控件,添加插入修改和删除命令,可以自动删除修改更新数据,不需要编写一行代码,但是有时更新失败,原因在于选中了[开放式并发],这个选中,如果该表与其他的数据表关联 ...

  9. Repeater控件中添加删除修改按钮

    1: <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%#Eva ...

最新文章

  1. python如何使用多线程_python多线程应用中的详细介绍
  2. JQuery简介选择器
  3. 什么是Mockito Extra接口?
  4. 设计模式笔记——Bridge
  5. MongoDB中的GridFs是什么
  6. AI技术说:人工智能相关概念与发展简史
  7. python老师好的长度_abc和老师好的长度都是3。( )
  8. 清理delphi项目文件 .bat
  9. iOS根据模型获取模型字段以及字段的类型(用于创建数据库的表)
  10. sklearn学习(模块列表)
  11. LabVIEW编程LabVIEW开发PXI-6704输出大于20mA的电流例程与相关资料
  12. 维修 工具 资料 点位图
  13. mysql busy buffer_buffer busy wait 解析
  14. 【20CSPS提高组】题解
  15. Python:过程型考核
  16. 北京华虹正式加入CPChain行业节点
  17. 运营好公众号需要具备的能力/技能
  18. Docker nginx部署多个web静态资源,且隐藏端口
  19. 容错学习问题(LWE)
  20. NXP PCF85063芯片的实时时钟

热门文章

  1. Python可视化常用方法和常见问题解决方案
  2. java实现2进制转16进制,16进制转2进制(通过查表法和强转实现)
  3. android栅格地图,Android中在Bitmap上画网格线
  4. qc35 说明书_BOSE QC35
  5. Windows系统好用免费的远程桌面软件介绍
  6. 《社交电商中的分享推荐研究》论文阅读笔记
  7. while 和 for 循环 :for循环输出九九乘法表
  8. kibana 更新 索引模式_Kibana探索数据(Discover)详解
  9. 学习笔记-希尔算法(交换法和移位法)
  10. 循环结构中“当型”与“直到型”判断的理解