期中集群架构-第十三章-iptables防火墙网路安全实践配置
=========================================

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

企业中安全配置原则:
     尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射。
     并发不是特别大情况有外网IP,可以开启防火墙服务。
     大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。

02. iptables防火墙概念介绍
Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤
的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。

iptables是linux2.4及2.6内核中集成的服务。
iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制

03. 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 忽略不计

多个表和链的关系 man iptables

04. 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 表示添加规则到相应链上,默认表示添加规则到结尾

  -t 指定表  -p 指定协议  --dport  表示对于访问者来说是目标端口  -j 表示对这个策略做什么ACCCEPT 允许 DROP阻止

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(只允许)
   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

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.9 -p tcp --dport 22 -j DROP

除了了0.9的都阻止。 0.9被排除没匹配上则匹配默认规则,默认是允许的所以就实现了只允许0.9访问
通过利用进行规则取反,进行策略控制

实践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        入站不能请求
   iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP   出站不能回复

情况二:实现禁止防火墙访问主机服务器(禁ping)
   iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
   iptables -A INPUT -p icmp --icmp-type 0 -j DROP

默认情况:所有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,发送第一次握手的数据包NEU状态的数据包
   ESTABLISHED:  请求数据包发出之后,响应回来的数据包称为回复的包
   RELATED:           基于一个连接,然后建立新的连接
   INVALID:              无效的的数据包,数据包结构不符合正常要求的

 iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

   允许那些状态包通过NEU,ESTABLISHED,RELATED

05. 企业当中应用防火墙方法
项目:部署一个最安全的企业级防火墙(案例)
两种思想:针对默认规则而言。
逛公园:黑名单
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   注意自己的可能改了ssh端口号
   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服务,需要配置网络状态机制

因为默认INPUT入站规则默认阻止了 数据不能回来,所以需要设置
   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表的配置实践与原理说明

06. 防火墙nat表的配置实践
iptables NAT:(配置NAT表示就是配置以下两个链)
01. postrouting(内网---外网-NAT 源私网IP地址---源公网IP地址)
     路由之后,进行地址映射转换,把源地址进行转换(源私网地址==>源公网地址)
02. prerouting(外网---内网-NAT 目标公网IP地址---目标私网IP地址 映射目标端口)
     路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==>目标变为私网地址)

实践一:iptables实现共享上网方法(postrouting)
第一个历程:配置内网服务器,设置网关地址
   /etc/init.d/iptables stop   --- 内网服务器停止防火墙服务
   ifdown eth0                      --- 模拟关闭内网服务器外网网卡
   setup                                --- 修改内网网卡网关和DNS地址信息
   [root@oldboyedu42-lnb-02 ~]# 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
说明:内网服务器网关地址指定为共享上网服务器内网网卡地址

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

第三个历程:配置共享上网服务器,实现内网访问外网的NAT映射
   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地址

测试没生效 内网服务器仍然ping不同外网,我们之前设置的filter表中FORWARD链是DROP阻止的

只要配置数据包能经过FORWARD链 就能实现设置结果

扩展如果开启:forward默认drop策略,如果配置forward链
   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

我这里映射的端口之前有改动为172.16.1.8:17524

(1)-d 10.0.0.8目标地址。
   (2)-j DNAT 目的地址改写。

十三.iptabled配置的更多相关文章

  1. 学习 Spring (十三) AOP 配置

    Spring入门篇 学习笔记 Spring 所有的切面和通知器都必须放在一个 内(可以配置包含多个 元素),每一个 可以包含 pointcut, advisor 和 aspect 元素(它们必须按照这 ...

  2. 学习Spring Boot:(十三)配置 Shiro 权限认证

    经过前面学习 Apache Shiro ,现在结合 Spring Boot 使用在项目里,进行相关配置. 正文 添加依赖 在 pom.xml 文件中添加 shiro-spring 的依赖: <d ...

  3. openstack controller ha测试环境搭建记录(十三)——配置cinder(控制节点)

    在任一控制节点创建用户:mysql -u root -pCREATE DATABASE cinder;GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'loc ...

  4. mysql group replication 安装&配置详解

    一.原起: 之前也有写过mysql-group-replication (mgr) 相关的文章.那时也没有什么特别的动力要写好它.主要是因为在 mysql-5.7.20 之前的版本的mgr都有着各种各 ...

  5. Spring配置错误 No adapter for IAdvice of type

    参考:http://www.2cto.com/kf/201305/211728.html 错误十三 在配置拦截器后,运行的时候报错=> Error creating context 'sprin ...

  6. mysql 8.0 主从复制配置

    背景: 主库: 192.168.211.128 从库: 192.168.211.129 一.关闭防火墙 [root@node01 ~]# systemctl disable firewalld [ro ...

  7. zuul的各种配置

    我们知道我们前台要展示数据给用户看,这中间可能涉及到从后端的多个微服务进行获取数据.比如获取用户信息需要用到用户微服务.获取商品信息需要获取商品微服务.创建订单需要调用订单微服务,而各个微服务可能分布 ...

  8. Apache Hadoop2.x 边安装边入门

    完整PDF版本:<Apache Hadoop2.x边安装边入门> 目录 第一部分:Linux环境安装 第一步.配置Vmware NAT网络 一. Vmware网络模式介绍 二. NAT模式 ...

  9. 前端性能优化---yahoo军规

    一.尽可能减少HTTP请求数 二.使用CDN(内容分发网络) 三.添加Expire/Cache-Control头 四.启用Gzip压缩 五.将CSS放在页面最上面 六.将Script放在页面最下面 七 ...

随机推荐

  1. Windows 通过批处理自动执行 linux服务器上面命令的办法

    1. 使用putty 下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 直接使用 exe版本就可以 https:/ ...

  2. 查看crontab运行状态

    cron服务是linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start/sbin/service crond stop/sbin/ ...

  3. VS界面控件大小调整

    vs2015 ,配置名称显示不全,怎么才能把这个搞宽? 这个问题困扰时间挺长了, 对vs的应用仅限于敲代码.编译, 其他的功能了解甚少, 于是试着在右键菜单中找到了界面自定义窗口, 如下: 找到想要修 ...

  4. Hive 口袋手册

    2019-04-01 关键字:Hive 学习总结.Hive 基础 . Hive 进阶 .Hive 调优 . Hive 入门手册.Hive PDF 下载 本篇文章系本人就目前所掌握的知识对 Apache ...

  5. 平衡树splay学习笔记#1

    这一篇博客只讲splay的前一部分的操作(rotate和splay),后面的一段博客咕咕一段时间 后一半的博客地址:[传送门] 前言骚话 为了学lct我也是拼了,看了十几篇博客,学了将近有一周,才A掉 ...

  6. mysql ssh 跳板机(堡垒机???)连接服务器

    跳板机(Jump Server),也称堡垒机,是一类可作为跳板批量操作远程设备的网络设备,是系统管理员或运维人员常用的操作平台之一. 正常的登录流程 使用ssh命令登录跳板机: 登录跳板机成功后,在跳 ...

  7. nginx日志相关的查询

    IP相关统计 统计IP访问量(独立ip访问数量) awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) gr ...

  8. 【洛谷P2822 组合数问题】

    题目连接 #include<iostream> #include<cstring> #include<cstdio> #include<cctype> ...

  9. thinkphp5.0 分页中伪静态的处理

    1.修改文件\thinkphp\library\think\Paginator.php(此文件用于分页) isurl是否为伪静态 加入isurl用于判断是否使用伪静态分页 */ protected $ ...

  10. codeforces-1138 (div2)

    想法题是硬伤,面对卡题和卡bug的情况应对能力太差 A.求两个前缀和以及两个后缀和,相邻最小值的最大值. #include<iostream> using namespace std; ; ...