Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙...

keepalived 高可用集群

1. keepalived服务概念说明
# 1.1 keepalived软件的作用?
Keepalived软件起初是专为LVS负载均衡软件设计的,
用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能

Keepalived软件主要是通过VRRP协议实现高可用功能的。
VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,
VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,
整个网络可以不间断地运行

# 1.2 keepalived软件工作原理?(重点)
原理 
1)VRRP协议,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,
   VRRP的出现是为了解决静态路由的单点故障。
2)VRRP是用过IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信的。
3)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,
   就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,
   但一般Keepalived系统运维工作中都是一对。

# 1.3 keepalived软件主要功能?
①. 管理LVS负载均衡软件
②. 实现对LVS集群节点健康检查功能 
③. 作为系统网络服务的高可用功能
2. 部署keepalived高可用服务:
# 1)确认反向代理服务是否工作正常
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.7/oldboy.html
web01 www.etiantian.org
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.8/oldboy.html
web02 www.etiantian.org
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
web03 www.etiantian.org
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.9/oldboy.html
web03 bbs.etiantian.org
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.8/oldboy.html
web02 bbs.etiantian.org
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.7/oldboy.html
web01 bbs.etiantian.org

# 2)安装部署高可用keepalived服务(05和06主机)
# 第一步:安装keepalived服务软件
yum install -y keepalived

# 第二步:编写keepalived配置文件
vim /etc/keepalived/keepalived.conf
# man keepalived.conf   --- 配置文件说明信息
# 配置文件结构:
   GLOBAL CONFIGURATION  --- 全局配置(*)
   VRRPD CONFIGURATION   --- vrrp配置(*)
   LVS CONFIGURATION     --- LVS服务相关配置

# lb01主负载均衡器配置
global_defs {
   router_id lb01            # 在一个集群中,每一台主机的 router_id 都是唯一的
}

vrrp_instance group01 {        # 相同的集群中,实例是一样的
    state MASTER            # 只是一个描述性信息
    interface eth0
    virtual_router_id 51    # 主备发送 组播包 的时间间隔
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {        # VIP:虚IP地址(用户访问的是这个地址)
        10.0.0.3/24 dev eth0 label eth0:1
    }
}


# lb02配置信息
global_defs {
   router_id LVS_DEVEL
}

vrrp_instance group01 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24 dev eth0 label eth0:1
    }
}

# 重启 keepalived 服务 
/etc/init.d/keepalived reload        # 开启为 start

# 开启 keepalived 服务后会在 主(MASTER)上的 eth0 网卡上生成 虚ip 10.0.0.3
# 不管 VIP 在哪台主机上,用户访问时都是访问的 10.0.0.3 这个 ip
3. 部署keepalived高可用服务问题
# 同时在keepalived高可用集群中,出现了两个虚拟IP地址信息,这种情况就称为脑裂

# 脑裂情况出现原因:
    1. 心跳线出现问题
    网卡配置有问题
    交换设备有问题
    线缆连接有问题
    2. 有防火墙软件阻止问题
    3. virtual_router_id配置数值不正确
    # 总之:只要备服务器收不到组播包,就会成为主,而主资源没有释放,就会出现脑裂

利用shell脚本实现监控管理:
备用设备有VIP就是表示不正常
01. 真正实现主备切换
02. 出现脑裂情况了

#!/bin/bash
check_info=$(ip a|grep -c 10.0.0.3)
if [ $check_info -ne 0 ]
then
   echo "keepalived server error!!!"
fi
4. 实现nginx反向代理监控虚拟IP地址
1)编写nginx反向代理配置 (两台反向代理服务器都要做如下配置)
server {
    listen      10.0.0.3:80;                # 在 监听的端口前加上 虚ip
    server_name  www.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
        proxy_pass http://oldboy;
        proxy_set_header host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}
server {
    listen       10.0.0.3:80;                # 在 监听的端口前加上 虚ip
    server_name  bbs.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
        proxy_pass http://oldboy;
        proxy_set_header host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
   }
}
/application/nginx/sbin/nginx -s stop        # ngxin 中只要涉及到 ip 地址的修改,都要进行真正的重启nginx(先stop 再start)
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
tcp        0      0 10.0.0.3:80                 0.0.0.0:*                   LISTEN      53334/nginx    

2)# 实现监听本地网卡上没有的IP地址
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p
# 监听网卡上没有的 ip 地址
4. 将keepalived服务和反向代理nginx服务建立联系
# 假如 keepalived 主机服务器的 nginx 挂掉了,此时的 虚ip 依然会在 keepalived主服务器中,这样用户访问就会出现问题
# 所以此时需要将 keepalived服务和 nginx 反向代理服务建立联系,即 nginx 反向代理服务挂掉的时候,keepalived服务也要自动关闭

1)编写脚本
#!/bin/bash
web_info=$(ps -ef|grep [n]ginx|wc -l)
if [ $web_info -lt 2 ]
then
   /etc/init.d/keepalived stop
fi

2)运行脚本,实现监控nginx服务
# 编辑keepalived服务配置文件
vrrp_script check_web {
    
    script "/server/scripts/check_web.sh"    # 定义我自己写的一个监控脚本,脚本必须有执行权限
    
    interval 2                                # 指定脚本间隔时间(s)
        
    weight 2                                 #脚本执行完成,让优先级值和权重值进行运算,从而实现主备切换    
}
# vrrp_script 配置添加到全局配置和vrrp实例配置之间

track_script {    # 调用我写的监控脚本 
    check_web
}
# track_script 配置要放到 vrrp实例 中
    
chmod +x check_web.sh   --- 修改脚本可执行权限
5. 实现高可用集群架构中双主配置(互为主备配置) 
# lb01 主机的 keepalived 配置文件的实例修改为如下:
vrrp_instance gorup01 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24 dev eth0 label eth0:1
       }
    }
vrrp_instance gorup02 {        # 新增一个实例 gorup02
    state BACKUP            # 实例 group02 中lb01主机为 备
    interface eth0
    virtual_router_id 52    # 修改为一个新的 virtual_router_id
    priority 100            # 优先级相对lb02主机中的 group02 要变小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.4/24 dev eth0 label eth0:1        # 添加一个新的 虚ip 10.0.0.4
    }
}

# lb02 主机的 keepalived 配置文件的实例修改为如下:
vrrp_instance gorup01 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24 dev eth0 label eth0:1
       }
    }
    
    
vrrp_instance gorup02 {        # 新增一个实例 gorup02
    state MASTER            # 实例 group02 中lb02主机为 主
    interface eth0
    virtual_router_id 52
    priority 150            # 优先级相对lb01主机中的 group02 要变大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.4/24 dev eth0 label eth0:1        # 添加一个新的 虚ip 10.0.0.4
    }
}     


# 修改nginx反向代理监控地址信息
# lb01 主机 
[root@lb01 ~]# vim /application/nginx/conf/nginx.conf

    server {
    listen       10.0.0.3:80;
    server_name  www.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;        
    proxy_set_header host $host;    
       }
    }    
    server {
    listen      10.0.0.4:80;            # 新增 bbs.etiantian.org 对应的 虚ip 为 10.0.0.4
    server_name  bbs.etiantian.org;
    proxy_set_header host $host;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;
    proxy_set_header host $host;
       }

# lb02 主机 
[root@lb02 ~]# vim /application/nginx/conf/nginx.conf

    server {
    listen      10.0.0.3:80;
    server_name  www.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;        
    proxy_set_header host $host;    
       }
    }    
    server {
    listen       10.0.0.4:80;            # 新增 bbs.etiantian.org 对应的 虚ip 为 10.0.0.4
    server_name  bbs.etiantian.org;
    proxy_set_header host $host;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;
    proxy_set_header host $host;
       }
    }

 

HTTPS安全证书访问连接实践配置

1:网络安全涉及的问题:

①. 网络安全问题-数据机密性问题
    传输的数据可能会被第三方随时都能看到    
    
②. 网络安全问题-数据完整性问题
    传输的数据不能随意让任何人进行修改
    
③. 网络安全问题-身份验证问题
    第一次通讯时,需要确认通讯双方的身份正确

2:网络安全涉及的问题:

①. 网络安全问题-数据机密性问题解决
    a) 利用普通加密算法解决机密性
        利用相应算法,对传输数据(明文数据)进行加密(密文数据);再利用对应算法,将加密数据解密变为真实数据
        优点:实现了数据机密传输,避免了明文传输数据的危险性。
        缺点:利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文
        
    b) 利用对称加密算法解决机密性(重要的一种加密方式)
        对称加密算法就好比将普通算法的规则手册放入到了保险柜里,只有获取保险柜和保险柜钥匙才能获取《算法手册》
        优点:密钥加密算法计算速度非常快;解决了普通加密算法的安全问题
        缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥是公开的,当通讯加密对象过多时,无法解决密钥管理问题。

        
②. 网络安全问题-数据完整性问题解决
    a) 利用单项加密算法(全网备份数据完整性)
        根据数据生成特征码(数据指纹信息);接收数据方获取数据信息算出特征码,验证是否与发送过来的特征码一致
        若特征码一致,表示数据完整性没被破坏;若特征码不一致,表示数据已被破坏,直接丢弃
        ****************************************************************************
        扩展说明:
        01:不同数据的特征码(数据指纹信息)是不可能一致的
            单项加密算法特征
            · 数据输入一样,特征码信息输出必然相同
            · 雪崩效应,输入的微小改变,将造成输出的巨大改变
            · 定长输出,无论源数据多大,但结果都是一样的
            · 不可逆的,无法根据数据指纹,还原出原来的数据信息。
        ****************************************************************************
        
        优点:有效的解决了数据完整性问题
        缺点:没有考虑中间人攻击对数据信息的影响
        
    b) 利用单项加密算法(加密特征码)
        利用对称加密算法对数据加密的同时,也对特征码进行加密;
        接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码
        而中间人加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直接丢弃数据
        ****************************************************************************
        扩展说明:
        01:那么对称密钥如何有效的让通讯双方获取呢
            需要进行对称密钥协商过程,即通过密钥交换机制(Internet key exchange IKE)
            实现密钥交换机制的协议称为diffie-hellman协议
        ****************************************************************************            
        
③. 网络安全问题-身份验证问题解决
    a)利用非对称密钥加密算法(公钥加密算法)
       发送方建立私钥和公钥,将公钥发送给接收方,从而实现发送数据方的身份验证

       让你的母亲验证你的爸爸身份信息,你的母亲就称为证书颁发机构
       公钥信息在网站访问过程中,被称为证书(身份证)    
           
网络安全问题结论:实现网络安全性,需要解决问题的顺序为
1. 解决身份验证问题
2. 解决数据完整性问题
3. 解决数据机密性问题    

3:网络安全证书由来:

根据上述结论可知,网络安全性最首先要解决的就是身份验证问题;
而解决身份验证问题,最主要的方式就是借助私钥和公钥
而最主要的公钥信息获取就变得尤为重要;利用第三方公正者,公正公钥信息

目前标准的证书存储格式是x509,还有其他的证书格式,需要包含的内容为:
证书==身份证
?    公钥信息,以及证书过期时间  
?    证书的合法拥有人信息  
?    证书该如何被使用(不用关注)   
?    CA颁发机构信息 
?    CA签名的校验码    
4: OpenSSL软件详细说明
# 获取OpenSSL软件的版本信息:
rpm -qa openssl
openssl version                        <- 查看openssl版本信息


# 获取OpenSSL配置文件信息:
/etc/pki/tls/openssl.cnf            <- openssl配置文件,主要用于配置成私有ca时进行使用
# 说明:基本上openssl配置文件不需要运维过多修改配置


# 利用openssl软件实现HTTPS访问过程
# 实现HTTPS:
[root@web01 ~]# mkdir -p /server/key
[root@web01 ~]# cd /server/key/            # 生成的 key 放到该目录下

# 第一步:创建出一个私钥文件(出生证明)             --- 运维人员需要会
# 方法1:
openssl genrsa 2048 >server.key            <- 创建私钥信息,并指定私钥的长度为2048,并将生成的私钥信息保存在一个文件中

# 方法2:
openssl genrsa -out server.key 2048        <- 将私钥信息直接进行保存,加密长度一定要放在输出文件后面

# 方法3:
(umask 077;openssl genrsa -out server1024.key 1024)        <- 利用小括号,实现子shell功能,临时修改umask,使之创建的私钥文件权限为600

# 第二步:生成证书文件信息(公钥)
# ①. 生成自签发证书                   --- 运维人员可以自行操作
[root@NFS-server-01 ~]# openssl req -new -x509 -key server.key -out server.crt -days 365
req        <- 用于请求创建一个证书文件
new        <- 表示创建的是新的证书
x509    <- 表示定义证书的格式为标准格式
key        <- 表示调用的私钥文件信息
out        <- 表示输出证书文件信息
days    <- 表示证书的有效期
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                    <- 定义生成证书的国家
State or Province Name (full name) []:BJ                <- 定义生成证书的省份
Locality Name (eg, city) [Default City]:BJ                <- 定义生成证书的城市
Organization Name (eg, company) [Default Company Ltd]:oldboy              <- 定义生成证书的组织
Organizational Unit Name (eg, section) []:it                              <- 定义生成证书的职能部门
Common Name (eg, your name or your server's hostname) []:oldboy.com.cn    <- 定义主机服务器名称
说明:此输出信息非常重要,客户端在获取证书前,会利用主机名与相应服务器之间建立连接,然后获得证书
Email Address []:
    
# ②. 向证书颁发机构申请证书            --- ca证书版本机构完成
    # 生成请求证书文件 (户口本)       --- 运维人员完成
    openssl req -new -key server.key -out server.csr
    
    # 获取得到证书文件 (身份证)       --- ca颁发机构完成   
    # 省略

# 第三步:配置网站服务,加载私钥和证书信息
# 修改 nignx 配置文件中的 server 为如下:
server {
        listen       443;                                # https 的端口号为 443
        server_name  www.etiantian.org;

        ssl on;                                            # 打开 ssl
        ssl_certificate /server/key/server.crt;            # 公钥路径 
        ssl_certificate_key /server/key/server.key;        # 私钥路径

        root   html/www;
        index  index.html index.htm;
    }

# 要求:访问 www.etiantian.org 的 http 时,自动跳转为 https
# nginx 配置文件中的 server 修改为如下:
    server {        # 作用:访问 www.etiantian.org 的 http 时,自动跳转为 https
        listen        80;
        server_name  www.etiantian.org;
        rewrite ^(.*)$  https://$host$1 permanent;     # ^表示 URL信息, (.*) 表示 URI 信息;$host表示 URL信息,$1表示 (.*) 中的信息(即也是URI信息); permanent 表示永久跳转
    }

    server {
        listen       443;
        server_name  www.etiantian.org;

        ssl on;
        ssl_certificate /server/key/server.crt;
        ssl_certificate_key /server/key/server.key;

        root   html/www;
        index  index.html index.htm;
    }

    [root@web01 conf]# netstat -lntup|grep [n]ginx
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3401/nginx          
    tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      3401/nginx  

 

iptables防火墙网路安全实践配置

1. iptables防火墙网路安全前言介绍
学好iptables的基础:
    OSI7层模型以及不同层对应哪些协议?
    TCP/IP三次握手,四次断开的过程,TCP HEADER,状态转换
    常用的服务端口要非常清楚了解。
    常用服务协议原理http协议,icmp协议。

企业中安全配置原则:
    尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射。
    并发不是特别大情况有外网IP,可以开启防火墙服务。
    大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。
2. iptables防火墙概念介绍
Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤
的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。

iptables是linux2.4及2.6内核中集成的服务。
iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制
3. iptables防火墙使用时名词概念理解
容器:装东西的器皿,docker容器技术,将镜像装在了一个系统中,这个系统就称为容器
iptables称为一个容器---装着防火墙的表
防火墙的表又是一个容器---装着防火墙的链
防火墙的链也是一个容器---装着防火墙的规则
iptables---表---链---规则

# 规则:防火墙一条一条安全策略
1.    防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2.    如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
3.    如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,
    向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4.    防火墙的默认规则是所有规则执行完才执行的。


# 表和链说明:4表5链
Filter: 实现防火墙安全过滤功能
· INPUT             对于指定到本地套接字的包,即到达本地防火墙服务器的数据包      外面---->(门)房子iptables
· FORWARD         路由穿过的数据包,即经过本地防火墙服务器的数据包              外面-----(前门)房子(后门)---房子            
· OUTPUT         本地创建的数据包                                                外面<-----(门)房子iptables

NAT:    实现将数据包中IP地址或者端口信息,内网到外网进行改写/外网到内网进行改写
· PREROUTING     一进来就对数据包进行改变             在路由之前,进行数据包IP地址或端口信息的转换           
· OUTPUT         本地创建的数据包在路由之前进行改变   本地防火墙要出去的流量进行相应转换(了解)
· POSTROUTING     在数据包即将出去时改变数据包信息     在路由之后,进行数据包IP地址或端口信息的转换

Managle  对数据进行标记

raw         忽略不计
4. iptables防火墙操作实践练习
# 1)iptables防火墙配置初始化
/etc/init.d/iptables start
chkconfig iptables on
iptables -F              --- 清除防火墙默认规则
iptables -X              --- 清除防火墙自定义链
iptables -Z              --- 清除防火墙技术器信息


# 2)iptables防护墙信息查看方法
/etc/init.d/iptables status
iptables -L              --- -L 以列表形式显示所有规则信息
iptables -L -n           --- -n 以数字形式显示IP地址或端口信息,不要转换为字符串显示
iptables -t nat -L -n    --- -t 表示指定查看或者配置相应的表
iptables -L -n -v        --- -v 表示显示详细规则信息,包含匹配计数器数值信息
iptables  -L -n --line-number      --- --line-number 显示规则序号信息

    
# 3)iptables防火墙端口规则配置:
# 实践01:阻止用户访问服务器的22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP   --- -A 表示添加规则到相应链上,默认表示添加规则到结尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP   --- -D 表示删除规则从相应链上。
iptables -t filter -D INPUT 规则序号
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP   --- -I 表示插入规则到相应链上,默认表示插入规则到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定规则插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP   --- -R 指定将配置好的规则信息进行替换


    # 总结防火墙参数信息:
    -A   --- 表示将规则添加到指定链上
    -I   --- 表示将规则插入到指定链上
    -D   --- 表示将规则从指定链上删除
    -R   --- 表示将规则信息进行修改
    -p   --- 指定相应服务协议信息(tcp udp icmp all)
        --dport    --- 表示指定目标端口信息
        --sport    --- 表示指定源端口号信息
    -j   --- 指定对相应匹配规则执行什么操作(ACCEPT DROP* REJECT)

    
# 实践02:阻止相应网段主机访问服务端指定端口服务
10.0.0.0/24 -- 22端口(阻止)
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP   
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP 
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP 

    # 总结参数信息:
    -s   --- 指定匹配的源地址网段信息,或者匹配的主机信息
    -d   --- 指定匹配的目标地址网段信息,或者匹配的主机信息
    -i   --- 指定匹配的进入流量接口信息 只能配置在INPUT链上
    -o   --- 指定匹配的发出流量接口信息 只能配置在OUTPUT链上

# 实践03:除了某个地址可以访问22端口之外,其余地址都不能访问
10.0.0.1 ~ 10.0.0.253 中 ,  10.0.0.9(只允许)
# 方式1:
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP 

# 方式2:
iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j DROP
通过利用 !进行规则取反,进行策略控制

实践04:指定阻止访问多个端口服务
22--80 22,24,25
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP                     --- 匹配连续的端口号访问
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP   --- 匹配不连续的端口号访问

总结参数信息:
-m   --- 指定应用扩展模块参数
    multiport   --- 可以匹配多个不连续端口信息

    
# 实践05: 通过防火墙实现禁ping功能
# 实现ping功能测试链路是否正常,基于icmp协议实现的
# icmp协议有多种类型:
    # icmp-type 8:请求类型  icmp-type 0:回复类型       

# 情况一:实现禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP            # ping 的请求禁止输入
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP        # ping 的响应禁止输出

# 情况二:实现禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP        # ping 的请求禁止输出
iptables -A INPUT -p icmp --icmp-type 0 -j DROP            # ping 的响应禁止输入

# 默认情况:所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP

# 实践06:实现防火墙状态机制控制
NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
5. 企业当中应用防火墙方法
# 项目:部署一个最安全的企业级防火墙(案例)
# 两种思想:针对默认规则而言。
# 逛公园:黑名单
# 1、默认规则默认是允许的状态。
# 看电影:白名单(更安全,推荐配置)
# 2、默认规则默认是不允许的状态。更安全。
# 看电影的思想更安全。

# 1)保存防火墙配置文件信息
cp /etc/sysconfig/iptables{,.bak}

# 2)清除配置规则
iptables -F    <- 清空iptables所有规则信息(清除filter)
iptables -X    <- 清空iptables自定义链配置(清除filter)
iptables -Z    <- 清空iptables计数器信息(清除filter)

# 3)别把自己踢出到门外
iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT

# 4)配置防火墙filter上各个链的默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

-P   --- 指定相应链的默认规则策略,是允许还是阻止

# 5)允许iptables服务端ping自己的网卡地址
iptables -A INPUT -i lo -j ACCEPT   --- 让自己可以ping自己

# 6)指定外网可以访问的端口信息
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT 

# 7)企业中内网之间不要配置防火墙策略
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT  --- 允许架构内部服务进行访问

# 8)企业之间有合作关系的,不要将友商的网络禁止(主要经常改动)
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT    --- 允许一些合作企业的外网服务器进行访问
iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT

# 9)如果防火墙上配置了FTP服务,需要配置网络状态机制
iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT  --- 允许web服务与ftp服务器建立连接

# 10)实现iptables策略配置永久保存
# ①. 利用防火墙启动脚本命令参数,实现永久保存
/etc/init.d/iptables save

# ②. 利用防火墙配置信息保存命令,实现永久保存
iptables-save >/etc/sysconfig/iptables
   
# 实例拓展:避免自己被踢出门外
    01. 去机房重启系统或者登陆服务器删除刚才的禁止规则。
    02. 让机房人员重启服务器或者让机房人员拿用户密码登录进去
    03. 通过服务器的远程管理卡管理(推荐)
    04. 先写一个定时任务,每5分钟就停止防火墙
    05. 测试环境测试好,写成脚本,批量执行
    
# 以上内容为防火墙filter表的配置实践与原理说明
6. 防火墙nat表的配置实践
iptables NAT:(配置NAT表示就是配置以下两个链)
01. postrouting(内网---外网-NAT  源私网IP地址---源公网IP地址)
    路由之后,进行地址映射转换,把源地址进行转换(源私网地址==>源公网地址)
02. prerouting(外网---内网-NAT  目标公网IP地址---目标私网IP地址  映射目标端口)
    路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==>目标变为私网地址)

# 实践一:iptables实现共享上网方法(postrouting)
# 第一步:配置内网服务器,设置网关地址
[root@web02 ~]# /etc/init.d/iptables stop                            # --- 内网服务器停止防火墙服务
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@web02 ~]# ifdown eth0                                            # --- 模拟关闭内网服务器外网网卡
[root@web02 ~]# setup                                                # --- 修改内网网卡网关和DNS地址信息
[root@web02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         172.16.1.7      0.0.0.0         UG    0      0        0 eth1
# 说明:内网服务器网关地址指定为共享上网服务器内网网卡地址(172.16.1.7)

# 第二步:配置共享上网服务器,开启共享上网服务器路由转发功能
[root@web01 ~]# vim /etc/sysctl.conf
[root@web01 ~]# sysctl -p
net.ipv4.ip_forward = 1

# 第三步:配置共享上网服务器,实现内网访问外网的NAT映射
[root@web01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7

    -s 172.16.1.0/24          --- 指定将哪些内网网段进行映射转换
    -o eth0                      --- 指定在共享上网哪个网卡接口上做NAT地址转换
    -j SNAT                   --- 将源地址进行转换变更
    -j DNAT                   --- 将目标地址进行转换变更
    --to-source ip地址        --- 将源地址映射为什么IP地址
    --to-destination ip地址   --- 将目标地址映射为什么IP地址


# 扩展如果开启:forward默认drop策略,配置forward链如下(172.16.1.7 主机)
   iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
   iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
   iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
   iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
   
   # 网络数据包传输过程一定是有去有回的

# 实践二:iptables实现共享上网方法(postrouting)
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE        <- 伪装共享上网
# 说明:在企业中如何没有固定外网IP地址,可以采取以上伪装映射的方式进行共享上网

# 总结:配置映射方法
01. 指定哪些网段需要进行映射    -s 172.16.1.0/24 
02. 指定在哪做映射               -o eth0
03. 用什么方法做映射             -j SNAT/DNAT
04. 映射成什么地址               --to-source  ip地址/--to-destination ip地址


# 实践三:iptables实现外网IP的端口映射到内网IP的端口
   # 需求:将网关的IP和9000端口映射到内网服务器的22端口
   # 端口映射 10.0.0.7:9000 -->172.16.1.8:22  
   # 实现命令:
   iptables -t nat -A PREROUTING -d 10.0.0.7  -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22

   # -d 10.0.0.8目标地址。
   # -j DNAT 目的地址改写。

 

转载于:https://www.cnblogs.com/neozheng/p/10995675.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值