说明

防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。

目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。

对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈
本次介绍iptables防火墙

iptables防火墙说明及工作原理

iptables防火墙包含四个表和五个链,分别为

  1. 四个表分别为:

    Filter表(真正的防火墙功能)
    Nat表(负责数据包的改写)
    Mangle表(路由标记)
    raw表(禁止数据包的连接跟踪,用于提高性能)

  2. 五个链分别为:

    INPUT(进入防火墙)
    OUTPUT(离开防火墙)
    FORWARD(流经防火墙)
    PREROUTING(数据包到达防火墙之前进行路由判断)
    POSTROUTING(数据包离开防火墙时进行的路由判断)

3.表和链的包含情况说明

Filter表包含: INPUT、OUTPUT、FORWARD;
Nat表包含: OUTPUT、PREROUTING、POSTROUTING;
Mangle表包含: INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING;
Raw表包含: OUTPUT、PREROUTING;

4.iptables防火墙的工作原理说明

1、iptables防火墙是一层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2、如果匹配上规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
3、如果所有规则中没有明确表示是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配到默认规 则到明确阻止还是通过。
4、防火墙的默认规则是对应链的所有规则执行完才会执行的。
注:防火墙规则执行顺序默认是从前到后,(从上到下)依次执行,遇到匹配的规则就不在继续向下检查,只有遇到不匹配的规则才会继续向下进行匹配

Iptables防火墙使用及规则配置

iptables命令常用参数

很多参数请通过man iptables或iptables --help来查看

-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-L(大写)列表 例:iptbles -nL 查看iptables规则
--line-number显示规则的序号 iptables -nL --line-number (可以根据序号删除规则)
-D 删除规则 (查到规则序号后、指定链、指定序号删掉) 例: iptables -D INPUT 1 (指顶删除INPUT链的第一条规则、默认是FILTER表、如果是其他的表需要-t指定表)
-F(大写)清除所有规则,不会处理默认的规则
-X(大写)删除用户自定义的链
-Z(大写)清除链的计数器
-A (大写)添加规则到指定链的结尾
-I (大写) 添加规则到指定链的开头
-P (大写)设置默认策略的(设定默认门是关着的还是开着的)
-t 指定表(默认是filter表) 例:iptables -t filter -A INPUT -p tcp --dport 443 -j DROP #指定在filter表的input链的tcp协议443端口的请求丢弃
-p 匹配指定协议 (all(所有) 、tcp、udp、icmp(ping等)、默认all)
--dport 目的端口(对本地的端口做什么)
--sport 源端口(从那个端口连接过来的)
-j 处理的行为 {DROP(丢弃)、ACCEPT(接受)、REJECT(拒绝)、ACCEPT(接受)
-s 指定源ip地址
-d 目的地址
-i 匹配进入的网卡接口eth0或者eth1进行控制
-o 匹配出去的网卡借口

配置一个生产中只开启443端口的防火墙规则

说明:这里配置的防火墙规则只开启443端口(https),
1.首先清除防火墙的默认规则

# iptables -F
# iptables -X
# iptables -Z

2.允许自己的网段连接服务器

iptables -A INPUT -p tcp -s 10.0.0.0/24 -j ACCEPT
允许自己的回环接口进出:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

3.设置默认规则:

iptables -P INPUT DROP     #忽略进入的请求
iptables -P FORWARD DROP    #忽略要通过
iptables -P OUTPUT ACCEPT    #允许出去的请求

4.配置规则

iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT    #允许办公室的ip段连接

iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT    #允许其他机房的网段链接

iptables -A INPUT -p tcp --dport 443 -j ACCEPT    #允许业务端口对外提供链接

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT      #允许所有人ping

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT      #允许关联包通过
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

至此防火墙就配完了。以上命令是在命令行执行的没有永久生效,重启主机就失效了:
永久保存的方法:

# services iptables save
就保存到/etc/sysconfig/iptables中了
以后维护iptables就可以通过编辑/etc/sysconfig/iptables来更改规则了。

CentOS 7自带的防火墙是firewalld,需要下载iptables:

# yum install -y iptables-services