iptables详解(2)表中规则管理(增删改查)

我们定义了四张表:raw表、mangle表、nat表、filter表,不同的表有不同的功能

filter表用来过滤,允许哪些ip、端口访问,禁止哪些ip、端口访问,表中会有很多链

①禁止ip地址访问我们主机------>发往本机的经过PREROUTING,但是PREROUTING不在filter表中,因此PREROUTING没有过滤能力,只能定义在INPUT链

②转发到另一个地方 则需要在FORWARD链或者OUTPUT链中定义

 一、基本操作

1、查看
iptables -t表名 -nvL –line-number

iptables --line -t filter -nvxL INPUT

-t 加表名-L加链名

-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数 -L加上链名
-n 不对ip地址进行反查,直接显示ip地址,加上这个参数显示速度会快很多
-v 输出详细信息,verbose显示详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到 

-x精确计算

参数解释:

root@ROUTER:~# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 6177 packets, 579K bytes)
num pkts bytes target prot opt in out source destination 
1 14778 1394K wan_input_chain all -- * * 0.0.0.0/0 0.0.0.0/0 
2 14778 1394K lan_input_chain all -- * * 0.0.0.0/0 0.0.0.0/0 

 policy 表示链的默认策略,默认是ACCEPT,该策略收到了6177个包,iptables -nvxL 可以将省略的k信息显示出来

 

2、添加
添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。

1  Append

在指定表的指定链的指定尾部添加一条规则,-A表示在对应链的末尾添加规则,省略-t选项,表示默认操作filter表

 

命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

 

2 Insert

在指定链的指定首部添加一条规则,-I默认是表示在对应链的开头添加规则,加上序号后则表示为在当前的序号位置添加一条规则,则底下的规则会往下移一位

命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j ACCEPT

示例操作:

步骤①加入append

iptables -A INPUT -s 192.168.23.242 -j DROP

步骤② 插入insert

 iptables -I INPUT 2 -s 192.168.23.242 -j ACCEPT  

 

 

 

3、删除

1 具体匹配规则删除

 

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

 

2 按--line按删除规则,-D表示删除对应链中的规则

 

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

  

 

3 清空指定表和链中的所有规则

命令语法:iptables -t 表名 -F 链名
示例:iptables -t filter -F INPUT  

4 清空表中的所有规则

命令语法:iptables -t 表名 -F
示例:iptables -t filter -F

或者
iptables –flush 

  

示例操作:  

步骤① 删除匹配条件的规则

iptables -D INPUT -s 192.168.23.242 -j ACCEPT  

步骤② 按照 --line 的行号去删除(省去写一大串规则的时间) 

iptables -D INPUT 3

 

 

 4、修改

1 修改指定表中指定链的指定规则,-R要指定对应的链和规则对应的序号和原本匹配的条件

 

命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT

 

注意:如果省略-s 等条件则当前的规则的源地址会变成0.0.0.0/0

也可先删掉当前规则,再在同样的位置再 添加同不一样的规则

2 修改指定表的指定链的默认策略(默认动作),并非修改规则

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

  

示例操作  

 

步骤① 修改规则

 iptables -R INPUT 3 -j ACCEPT 

 

注意 如果要进行更改规则一定要指定-s 源地址 ,如果有多个匹配规则 则都需要指定

因为在前面的-R 没有指定对应的地址,所以当前的修改地址都变成0.0.0.0/0

DROP动作直接是卡住没有响应,然后REJECT则会给出Destination Port Unreachable的回应

②修改默认规则

每张表的每条链中都有自己的默认策略,当报文没有被链中任何规则匹配,或者链中没有任何规则,则当前按照默认动作处理报文

iptables -t filter -P FORWARD DROP  

-t 加表名 -P加链名

 

 DROP(丢弃) 和 REJECT(拒绝) 有什么不同的呢?REJECT的时候会显示Destination Port Unreachable 但是DROP则会直接卡在那边不动

 

 5、保存规则-----永久生效
在默认的情况下我们对防火墙所做的修改都是临时的,当服务器重启或者iptables服务重启后,所有的规则操作都会消失。

① CentOS6, RedHat

# 保存iptables规则 
service iptables save

# 重启iptables服务
service iptables stop
service iptables start/restart

查看当前规则:

cat  /etc/sysconfig/iptables

② Centos7

不使用init风格的脚本启动服务,使用unit文件,yum源安装iptables和iptables-services

#配置好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

上述配置只需要一次,以后即可在centos7中愉快地使用service iptables save命令保存iptables规则

 

============通用方法=============

iptables-save 可以把之前修改的命令输出到屏幕但是并不能保存命令

所以要使用 iptables-save > /etc/sysconfig/iptables 将修改的规则重定向到这个文件中

posted @ 2019-12-09 15:04  陈晓猛  阅读(944)  评论(0编辑  收藏  举报