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 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 /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 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 目的地址改写。