centos 6.9之iptables防火墙及基本配置

1.1 防火墙的概念

Firewall(防火墙):组件,工作在网络边缘(主机边缘),对进出网络数据包基于一定的规则检查,并在匹配某规则定义的处理进行处理的一组功能的组件。

防火墙类型:根据工作层次的不同来划分,常见的防火墙工作在 OSI 第三层,即网络层防火墙,工作在 OSI 第七层的称为应用防火墙,或者代理服务器(代理网关)。

网络层防火墙又称包过滤防火墙,在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过。优点:对用户来说透明,处理速度快且易于维护。缺点:一旦黑客突破防火墙,就可以轻易地伪造数据包的源地址,目的地址和 IP 的端口号,即 “IP 地址伪造”。

centos 6.9之iptables防火墙及基本配置_第1张图片
image.png

1.2 防火墙分类

硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现;

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙;

主机防火墙:服务范围为当前主机;

网络防火墙:服务于防火墙背后的本地局域网,往往处于网络入口或边缘。

1.3 Iptables 的基本认识

Netfilter 组件称为内核空间,它被集成在 linux 内核中。netfilter 是一种内核中用于扩展各种网络服务的结构化底层框架。它是在内核中选取五个位置放了五个 hook function,而这五个 hook function 向用户开放,用户可以通过一个工具(iptables)向其写入规则。

Netfilter 主要由信息过滤表(table)组成,包含了控制 IP 包处理的规则集 (rules)。根据规则所处理的 IP 包的类型,规则被分组放在链(chain)中,从而使内核对来自某些源,前往某些目的地或具有某些协议类型的信息包处置方法,如完成信息包的处理、控制和过滤等工作。

Iptables 也称为用户空间,是一个工作在用户层用来写入规则的工作,写好的规则被送往 netfilter。这些规则告诉内核中的 netfilter 组件如何去处理信息包。

1.4 Iptables 的组成

centos 6.9之iptables防火墙及基本配置_第2张图片
image.png

iptables 有四个表和五个链以及一些规则组成:

  • 四个表: filter、nat、mangle、raw

filter 表(过滤规则表,该表根据管理员预设定义的一组规则过滤符合条件的数据包)

nat 表 (地址转换规则表)

mangle (修改数据标记位规则表)

raw (跟踪数据表规则表)

其中最常用的是 filter 表以及 nat 表

  • 五个链: INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING 表和链的对应关系:

Filter:INPUT,FORWARD,OUTPUT

Mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

Nat:PREROUTING,OUTPUT,POSTROUTING

Raw:PREROUTING,OUTPUT

添加规则时的考量点:

(1)要实现哪种功能:判断添加在哪张表上;
(2)报文流经的路径:判断添加在哪个链上;

链:链上规则的次序,即为检查的次序;因此隐含一定的法则
(1)同类规则(访问同一应用),匹配范围小的放上面;
(2)不同类规则(访问不同应用),匹配到报文频率较大的放上面;
(3)将那些可由一条规则描述的多个规则合并为一个;
(4)设置默认策略;


2.1 基本命令参数

参数 作用
-p 设置默认策略:iptables -P INPUT (DROP |ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 配置来源地址IP/MASK,加叹号“!”表示除这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
--dport num 匹配目标端口号
--sport num 匹配来源端口号

使用iptables命令-L参数查看已有的防火墙策略:

[root@CentOS7 ~]#iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
LOG        tcp  --  anywhere             anywhere             tcp dpt:ssh state NEW LOG level warning prefix "want-in-from-port-22"

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

使用iptables命令-F参数清空已有的防火墙策略:

[root@CentOS7 ~]#iptables -F
[root@CentOS7 ~]#iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

可以使用-v选项,查看更多的、更详细的详细

[root@CentOS7 ~]#iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

解释各字段的含义:

pkts:对应规则匹配到的报文的个数;

bytes:对应匹配到的报文包的大小总和;

target:规则对应的target,往往表示规则对应的“动作”,即规则匹配成功后需要采取的措施;

prot:表示规则对应的协议,是否只针对某些协议应用此规则;

opt:表示规则对应的选项;

in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则;
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则;
source:表示规则对应的源地址,可以是一个IP,也可以是一个网段;
destination:表示规则对应的目标地址,可以是一个IP,可以是一个网段。

上例中的源地址与目标地址都为anywhere,在iptables默认为我们进行了名称解析,在设置非常多的规则下,如果进行名称解析,效率会比较低,所以,我们可以使用-n选项,表示将不对IP地址进行名称反解,直接显示IP地址

[root@CentOS7 ~]#iptables -nvL -t filter
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  324 37064 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
  208 21787 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

可以使用--line-number显示规则编号,也可缩写成--line

[root@CentOS7 ~]#iptables --line-number -nvL INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      409 46144 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
5      381 42675 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

2.2 增加规则

[root@CentOS7 ~]#iptables -t filter -I INPUT -s 192.168.1.106 -j DROP
[root@CentOS7 ~]#iptables -nvL INPUT
Chain INPUT (policy ACCEPT 41 packets, 4725 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.1.106        0.0.0.0/0          
  • 上例中,-t指定了要操作的表,此外指定了操作filter表,不使用-t选项指定表时,默认为操作filter表;

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

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

  • 使用-j选项,指明当“匹配条件”被满足时,所对应的动作,指定的动作为DROP,当报文的源地址为192.168.1.106时,报文则被DROP(丢弃);

  • 查看filter表中的INPUT链,可以看到规则已经被添加,动作被称之为“target”,“target”字段对应的动作为DROP。

通过192.168.1.106去ping主机107,PING一直没得到回应,iptables规则设置生效

[root@CentOS6 ~]#ping 192.168.1.107
PING 192.168.1.107 (192.168.1.107) 56(84) bytes of data.



可以查看iptables中的规则,已经有92个包被对应的规则匹配到,总计大小8760bytes

[root@CentOS7 ~]#iptables -nvL INPUT
Chain INPUT (policy ACCEPT 884 packets, 97171 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   92  8760 DROP       all  --  *      *       192.168.1.106        0.0.0.0/0     

在filter表的INPUT链中追加一条规则

[root@CentOS7 ~]#iptables -A INPUT -s 192.168.1.106 -j ACCEPT
[root@CentOS7 ~]#iptables -nvL INPUT
Chain INPUT (policy ACCEPT 40 packets, 4054 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1235  105K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0    

上例中,-A为append之意,所以,-A INPUT则表示在INPUT链中追加规则,而-I选项则表示在链中“插入规则”,直白的说就是-A表示在链的尾部追加规则,-I表示在链的首部插入规则

[root@CentOS7 ~]#iptables -nvL INPUT
Chain INPUT (policy ACCEPT 230 packets, 29536 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1420  120K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0    

通过规则从上自下的匹配的原则,第二条规则并没有生效,所以当前主机仍然无法ping通,此时我们只需将新规则添加添加至INPUT链的最前面就能够ping通主机

[root@CentOS7 ~]#iptables -nvL INPUT
Chain INPUT (policy ACCEPT 26 packets, 2904 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    5   420 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0           
 1706  144K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0  

192.168.1.106已经可以正常收到响应报文

[root@CentOS6 ~]#ping -c 3 192.168.1.107  
PING 192.168.1.107 (192.168.1.107) 56(84) bytes of data.
64 bytes from 192.168.1.107: icmp_seq=1 ttl=64 time=0.349 ms
64 bytes from 192.168.1.107: icmp_seq=2 ttl=64 time=0.317 ms
64 bytes from 192.168.1.107: icmp_seq=3 ttl=64 time=0.290 ms

--- 192.168.1.107 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.290/0.318/0.349/0.031 ms

2.3 删除规则

删除规则有两种方法

  • 根据规则的编号去删除规则
  • 根据具体的匹配条件与动作删除规则
[root@CentOS7 ~]#iptables --line -vnL INPUT
Chain INPUT (policy ACCEPT 771 packets, 84094 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       62  5208 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0           
2     1706  144K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0           
3        0     0 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0           
[root@CentOS7 ~]#iptables -t filter -D INPUT 3
[root@CentOS7 ~]#iptables --line -vnL INPUT   
Chain INPUT (policy ACCEPT 10 packets, 1128 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       62  5208 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0           
2     1706  144K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0           

上例中,使用-t选项指定要操作的表,使用-D选项表示删除指定链中的某条规则,-D INPUT 3 表示删除INPUT链中的第3条规则

我们也可以根据具体的匹配条件与动作去删除规则

[root@CentOS7 ~]#iptables -vnL INPUT
Chain INPUT (policy ACCEPT 390 packets, 40752 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   62  5208 ACCEPT     all  --  *      *       192.168.1.106        0.0.0.0/0           
 1706  144K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0           
[root@CentOS7 ~]#iptables -D INPUT -s 192.168.1.106 -j ACCEPT
[root@CentOS7 ~]#iptables -vnL INPUT
Chain INPUT (policy ACCEPT 9 packets, 755 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1706  144K DROP       all  --  *      *       192.168.1.106        0.0.0.0/0   

上例中,-D INPUT表示删除INPUT链中的规则,-s表示以对应的源地址作为匹配条件,-j ACCEPT表示对应的动作为接受,上述命令表示删除INPUT链中源地址为192.168.1.106,动作为ACCPET的规则

删除所有的规则可以使用“iptables -t 表名 -F 链名

[root@CentOS6 ~]#iptables -t filter -F INPUT

-F选项为flush之意,即删除指定链中的所有规则,如果不指定链名,只指定表名删除表中的所有规则
强调,在没有保存iptables规则时,请勿随便清空链或者表中的规则

2.4 修改规则

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

[root@CentOS7 ~]#iptables -t filter -P FORWARD DROP
Chain FORWARD (policy DROP 0 packets, 0 bytes)

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

2.5 保存规则

在默认情况下,对防火墙所做出的修改都是”临时的”,但重启iptables服务或者重启服务器以后,我们平常添加的规则或者所作做出的修改将丢失。
centos6中,使用“service iptables save”命令保存规则,规则默认保存在/etc/sysconfig/iptables文件中。

[root@CentOS6 ~]#service iptables save    
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@CentOS6 ~]#cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Mon Oct 23 08:46:46 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8:1328]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Mon Oct 23 08:46:46 2017

上例,文件中保存了filter表中每条链的默认策略,以及每条链中的规则

centos7中,使用firewall替代了原来的iptables service,但我么也可以通过yum源安装iptables与iptables-service即可,在centos7中安装完成iptables-services后,即可像centos6中一样,通过service iptables save命令保存规则,规则同样保存在/etc/sysconfig/iptables文件中

其他保存方法
使用iptables-save并不能保存当前的iptables规则,但我么可以将当前的iptables规则以“保存后的格式”输出到屏幕上,在配合使用重定向,将规则重定向到/etc/sysconfig/iptables文件中即可
iptables-save > /etc/sysconfig/iptables

我们也可将/etc/sysconfig/iptables中的规则重新载入为当前的iptables规则,但留心,未保存入/etc/sysconfig/iptables文件中的修改将会丢失或者被覆盖
使用iptables-restore命令可以从指定文件中重载规则
iptables-restore < /etc/sysconfig/iptables
重载规则时,现有规则将被覆盖

你可能感兴趣的:(centos 6.9之iptables防火墙及基本配置)