关注上方 浩道Linux ,回复 资料 ,即可获取海量 L inux 、 Python 、 网络通信、网络安全 等学习资料!
前言
大家好,这里是 浩道Linux ,主要给大家分享 L inux 、 P ython 、 网络通信、网络安全等 相关的IT知识平台。
好多朋友面试时经常在简历上宣称自己精通iptables防火墙了,但是如果没有掌握到其方方面面,不要轻易说精通。因为很容易被面试官拿捏,本文浩道就跟大家分享Linux系统iptables硬核干货,通过对其概念、工作流程、其结构、其添加规则相关用法去开展,让大家朝着精通迈进!
一、iptables简介
iptables是linux系统自带的一款优秀,并且是开放源代码的完全的自由的软件工具。这是一款
基于包过滤的防火墙工具
,具有功能强大、使用灵活等特点,可以对流入和流出服务器的数据包进行灵活控制。
1、表(tables)的概念
表(tables)是用来存放链的,即看作是链的一个容器。
2、链(chains)的概念
链(chains)是用来存放规则的,即看作是规则的一个容器。
3、规则(policy)的概念
规则(policy)就是iptables用于过滤相关数据包的一种规范。
二、iptables工作流程
1、防火墙是一层层过滤的,就是按照配置规则的顺序从上到下,从前到后进行过滤的。
2、如果匹配上了相应的规则,即明确表明是阻止还是通过,此时数据包就不再向下匹配新的规则了。
3、如果所有的规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,则继续向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4、防火墙的默认规则是对应链表的所有规则执行完成后,才会执行的规则。
三、iptables中的四表五链
1、iptables中存在的4种表:
1) f ilter :主要用于过滤的,控制数据包是否允许进出及转发。
filter表中的链有 INPUT 、 FORWARD 、 OUTPUT 。
2) nat :主要用于控制数据包中地址转换,即来源IP和端口与目的IP和端口
的转换。
nat表中的链有 PREROUTING 、 INPUT 、 OUTPUT 、 POSTROUTING 。
3) mangle :主要用于修改数据包中的原数据,如打标记。
mangle表中的链有 PREROUTING 、IN PUT 、 FORWARD 、 OUTPUT 、
POSTROUTING 。
4) raw :主要用于控制nat表中连接追踪机制的启用状况。
raw表中的链有 PREROUTING 、 OUTPUT 。
2、iptables中的存在的5种链,这里必须是大写:
1) PREROUTING :指的是进入路由之前的数据包。
2) INPUT :指的是过滤进来的数据包。
3) FORWARD :指的是转发。
4) OUTPUT :指的是发出去的数据包。
5) POSTROUTING :指的是路由之后修改的数据包。
四、iptables安装
iptables是centos5或centos6版本自带的软件,而centos7是不自带的,因为centos7默认安装了firewalld。所以我们需要安装下iptables。
1、yum安装命令如下 :
[root@haodaolinux1 ~]# yum install -y iptables iptables-services
2、启动iptables防火墙
先关闭系统自带的firewalld,再启动iptables服务,具体命令如下所示:
[root@haodaolinux1 ~]# systemctl stop firewalld
[root@haodaolinux1 ~]# systemctl disable firewalld
[root@haodaolinux1 ~]# systemctl start iptables
3、iptables配置文件
配置文件 位置/etc/sysconfig/iptables-config
记录规则文件 位置/etc/sysconfig/iptables
五、iptables命令参数
1、可以 通过iptables --help查看iptables具体参数用法 , 以下罗列常见参数:
1、 -n :以数字形式显示地址及端口等相关信息;
2、
-L
:列出一个链或所有链中的规则相关信息;
3、 -v :以更详细的方式显示规则相关信息;
4、 -F :清空所有的规则信息;
5、 -D :删除链内指定内容(如序号)的一条规则信息;
6、 -P :为指定的链设置默认规则;
7、 -t :指定表名,如果不指定-t,默认使用filter表;
8、 -I :在链的开头或者指定序号插入一条规则信息;
9、 -A :在链的末尾追加一条规则信息;
10、 --line-number :用于查看规则时,显示其在链上的相应的编号;
11、 -S :用于显示指定链的所有规则信息;
12、 -m iprange --src-range :用于IP匹配,指定多个连续的源IP地址;
13、 -m multiport --sports :用于端口匹配,指定多个源端口;
14、 -m multiport --dports :用于端口匹配,指定多个目的端口;
15、
-m mac --mac-source
:用于mac地址匹配,指定某个mac地址;
2、参数使用实例讲解:
1、 默认查看规则 ,命令如下:
[root@haodaolinux1 ~]# iptables -L
2、
指定表名查看规则
,命令如下:
[root@haodaolinux1 ~]# iptables -t nat -L
3、 以数字形式显示地址及端口等相关信息 ,命令如下:
[root@haodaolinux1 ~]# iptables -nL
4、
显示规则行号
,命令如下:
[root@haodaolinux1 ~]# iptables -nL --line
5、
清空所有规则信息
,命令如下:
[root@haodaolinux1 ~]# iptables -F
6、
清空某一个链里面的规则信息
,命令如下:
[root@haodaolinux1 ~]# iptables -F 链名
7、
将规则保存到文件中
,命令如下:
[root@haodaolinux1 ~]# service iptables save
[root@haodaolinux1 ~]# iptables-save > /etc/sysconfig/iptables
六、iptables语法详解
1、
iptables基本语法格式
,如下命令所示:
iptables -t 表名 动作规则 [链名] [匹配条件] [-j 控制类型]
参数解释:
-t :用于指定表名,不写默认是使用filter表;
动作规则 :表示要添加规则还是删除规则;
常用动作规则 有如下:
-D
:表示删除规则;
-R :表示修改规则;
-A :表示追加规则,默认追加到链的末尾;
-I :表示插入规则,在链的开头或者指定序号处插入一条规则;
-N :表示自定义链;
-P(大写) :表示修改默认规则;
[链名] :表示实际链名;
[匹配条件] :表示实际匹配条件,可以匹配数据包ip,端口,tcp等特征,如通过 -p (小写)指定 报文类型 ;
[-j 控制类型] :用于控制类型,表示通过前面匹配到之后是丢弃还是保留相关数据包的处理方式;
常用的控制类型 有如下:
ACCEPT
:表示允许;
REJECT :表示拒绝;
DROP :表示丢弃;
2、iptables规则添加实例
1、
指定filter表INPUT链末尾添加一条规则
,命令如下:
[root@haodaolinux1 ~]# iptables -t filter -A INPUT -p udp -j ACCEPT
查看规则,如下图所示:
2、 在INPUT链中第一行添加1条规则 ,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -p tcp -j ACCEPT
查看规则,如下图所示:
3、 在INPUT链中第2行添加一条规则 ,如下命令所示:
[root@haodaolinux1 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
查看规则,如下图所示:
4、 删除INPUT链中的第一条规则 ,命令如下所示:
[root@haodaolinux1 ~]# iptables -D INPUT 1
查看规则,如下图所示:
注意,以上添加删除相关规则,需要保存,否则重启防火墙后规则将丢失。
3、iptables结合匹配条件规则添加实例 :
1、 本机上添加一条防火墙规则,禁止其它主机ping通本机 ,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -p icmp -j REJECT
2、 本机上添加一条防火墙规则,拒绝192.168.3.110的主机通过SSH连接本机 ,命令如下所示:
[root@haodaolinux1 ~]# iptables-IINPUT-s 192.168.3.110-ptcp--dport 22 -jREJECT
这里规则主要是拒绝192.168.3.100主机访问本机的22端口;
3、
本机上添加一条防火墙规则,拒绝192.168.3.110的主机访问本机的22端口及3306端口
,命令如下所示:
[root@haodaolinux1 ~]# iptables-IINPUT-s 192.168.3.110-ptcp--dport 22:3306-jREJECT
4、 本机上添加一条防火墙规则,禁止多个主机ping通本机(通过逗号隔开多个主机) ,命令如下所示:
[root@haodaolinux1 ~]# iptables-tfilter-IINPUT-s 192.168.3.110,192.168.3.119-picmp-jREJECT
5、 本机上添加一条防火墙规则,丢弃192.168.4.0网段的数据包 ,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -s 192.168.4.0/24 -j DROP
6、 本机上添加一条防火墙规则,拒绝192.168.3.110-192.168.3.140连续的主机通过SSH连接本机 ,命令如下所示:
[root@haodaolinux1 ~]# iptables-IINPUT-ptcp--dport 22 -miprange--src-range 192.168.3.110-192.168.3.140-jREJECT
这里主要通过 -m iprange --src-range 进行源IP地址的指定;
7、 本机上添加一条防火墙规则,拒绝192.168.3.110的主机访问本机的22端口及3306端口 ,命令如下所示:
[root@haodaolinux1 ~]# iptables-IINPUT-ptcp--dport 22 -mmultiport--dports 22,3306 -s 192.168.3.110-jREJECT
这里主要通过 -m multiport --dports 进行目的端口的指定;
4、 iptables规则修改实例
1、
首先本机上新增规则
,
在已有规则基础上进行修改
:
[root@haodaolinux1 ~]# iptables-tfilter-IINPUT-s 192.168.3.110-picmp-jREJECT
[root@haodaolinux1 ~]# iptables-tfilter-IINPUT-s 192.168.3.110-ptcp--dport 22 -jREJECT
查看已有规则,如下图所示:
2、 本机上修改第二条规则,使得192.168.3.110主机可以ping通本机 ,命令如下所示:
[root@haodaolinux1 ~]# iptables-RINPUT 2 -picmp-s 192.168.3.110-jACCEPT
查看已修改规则,如下图所示:
5、针对icmp类型匹配制定规则实例
众所周知,
禁止ping策略原则
无非
就是禁止本机ping其它主机,或者禁止其它主机ping本机
。
iptables中可以通过策略指定网卡的流量进入或者网卡的流量出去。分别通过以下两个参数进行指定。
-i :即--in--interface:用于在 INPUT链 配置规则中,指定从哪一块网卡 进入的流量 ;
-o :即--out--interface:用于在 OUTPUT链 配置规则中,指定从哪一块网卡 出去的流量 ;
ping对应的报文类型 是 icmp ,而icmp报文类型众多,这里针对以下实例做两个类型讲解。
0 :Echo reply,对应的是ping的应答报文;
8 :Echo request,对应的是ping的请求报文;
iptables中可以通过 --icmp-type 来指定相关的icmp报文类型;
1、 新增规则,使得本机不能ping通其它主机,其它主机可以ping通本机,本机也可以自己ping通自己 ,命令如下所示:
[root@haodaolinux1 ~]# iptables -A INPUT -i eno16777736 -p icmp --icmp-type 0 -j DROP
[root@haodaolinux1 ~]# iptables -A OUTPUT -o eno16777736 -p icmp --icmp-type 8 -j DROP
更多精彩
关注公众号 「 浩道Linux 」
浩道Linux ,专注于 Linux系统 的相关知识、 网络通信 、 网络安全 、 Python相关 知识以及涵盖IT行业相关技能的学习, 理论与实战结合,真正让你在学习工作中真正去用到所学。同时也会分享一些面试经验,助你找到高薪offer,让我们一起去学习,一起去进步,一起去涨薪!期待您的加入~~~ 关注回复「资料」可 免费获取学习资料 (含有电子书籍、视频等)。
喜欢的话,记得 点「赞」 和 「在看」 哦