第14章 防火墙的使用

14.1 防火墙的概念

将不安全的网络流量信息进行隔离

14.2 防火墙的实现

14.2.1 硬件实现

思科,华为防火墙服务器

14.2.2 软件实现

iptables(centos6)和firewalld(centos7)实现

14.3 防火墙服务(容器)的组成部分

14.3.1 什么是容器

  • 防火墙服务(容器)                        容器就是表的概念
  • 防火墙服务表(容器)                            链的概念
  • 防火墙链(容器)                                规则

14.3.2 配置防火墙的流程

开启防火墙服务------指定表--------指定链-------指定规则

14.4 防火墙表和链

  • 红色为表,粉色为链

14.4.1 表对应的链

  • filter                        INPUT、FORWARD、OUTPUT
  • nat                        PREROUTING、POSTROUTING、OUTPUT
  • mangle                    PREROUTING、OUTPUT、FORWARD、POSTROUTING
  • raw                        PREROUTING、OUTPUT

14.5 iptables的工作原理

14.5.1 文字概述

  • 防火墙是层层过滤的,实际是按照配置规则从前往后或者从上往下过滤的
  • 如果匹配上规则,则明确表示是阻止还是通过,数据包不会在往下进行匹配
  • 如果规则中没有明确表明是阻止还是通过,也没有匹配规则,向下匹配,直到匹配到默认规则明确表示是通过还是阻止
  • 防火墙的默认规则是所有的规则执行完毕后才执行的

14.6 iptables表和链的关系详细说明

14.6.1 filter表的使用

真正起到防火墙的功能

14.6.1.1 filter表下面的链简要说明

INPUT链                流量在进入时进行访问控制

OUTPUT链                流量在出去的时候进行访问控制

FORWARD链            流量是否可以经过防火墙

14.6.2 iptables防火墙filter表中的3个链的规则配置方法

14.6.2.1 准备工作

14.6.2.1.1 安装iptables服务

[root@firewalld yum.repos.d] # yum install -y iptables

14.6.2.1.2 查看一些默认iptables配置策略
  • -L [chain [rulenum]]                List the rules in a chain or all chains

    列出链上规则配置信息

  • -n                                numeric output of addresses and ports

    以数字形式输出地址和端口

[root@firewalld ~] # iptables -nL

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53

Chain FORWARD (policy ACCEPT)

target prot opt source destination

ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED

ACCEPT all -- 192.168.122.0/24 0.0.0.0/0

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68

You have new mail in /var/spool/mail/root

[root@firewalld ~] #

14.6.2.2 进行初始化的操作

  • -F [chain]                        Delete all rules in chain or all chains

    删除所有的链上的规则,默认是filter表

  • -Z [chain [rulenum]]            Zero counters in chain or all chains

    清除计数器上面的信息

  • -X [chain]                    Delete a user-defined chain

    删除用户自定义链

14.6.2 nat表的使用

实现访问映射/流量转发

实现内网访问外网

外网访问映射到指定内网主机

14.7 filter表的练习

  • 策略处理方法:
  1. ACCEPT                    允许接收
  2. DROP                    丢弃(更安全)
  3. REJECT                    拒绝
  • -t table                            table to manipulate (default: `filter')

    使用-t来定义后面的表信息,默认filter

  • -A chain                            Append to chain

    追加一个链在后面

  • -p proto                            protocol: by number or name, eg. `tcp'

    协议:通过数字或者协议名称

  • --dport                            规则匹配的目标端口信息
  • --sport                            规则匹配的源端口信息
  • -j target                            target for rule (may load target extension)

指定处理规则动作

  • -s address[/mask][...]                source specification

    指定匹配规则的源信息

  • -d address[/mask][...]                destination specification

指定匹配规则的目标信息

  • -P chain target                        Change policy on chain to target

在链上修改默认策略

  • -i input name[+]                    network interface name ([+] for wildcard)

指定从哪个网卡进入

  • -o output name[+]                    network interface name ([+] for wildcard)

指定从哪个网卡出去

  • -m match                            extended match (may load extension)

扩展匹配的信息

  • -I chain [rulenum]                        Insert in chain as rulenum (default 1=first)

指定行插入规则信息

14.7.1 阻止任意用户访问22端口

14.7.1.1 INPUT练习

[root@firewalld ~] # iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

14.7.1.2 OUTPUT练习

[root@firewalld ~] # iptables -t filter -A OUTPUT -p tcp --sport 22 -j DROP

14.7.2 允许10.0.0.1主机访问22端口,其他网段,其他主机不能访问

14.7.2.1 INPUT练习

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.1 -p tcp -d 10.0.0.81 --dport 22 -j ACCEPT

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP

14.7.2.2 OUTPUT练习

[root@firewalld ~] # iptables -A OUTPUT -d 10.0.0.1 -p tcp -s 10.0.0.81 --sport 22 -j ACCEPT

[root@firewalld ~] # iptables -A OUTPUT -d 10.0.0.0/24 -p tcp --sport 22 -j DROP

14.7.3 允许所有通过eth0流量访问22端口, 拒绝通过eth1接口访问22端口

14.7.3.1 INPUT练习

[root@firewalld ~] # iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

[root@firewalld ~] # iptables -A INPUT -i eth1 -p tcp --dport 22 -j DROP

14.7.3.2 OUTPUT练习

[root@firewalld ~] # iptables -A OUTPUT -i eth0 -p tcp --dport 22 -j ACCEPT

[root@firewalld ~] # iptables -A INPUT -i eth1 -p tcp --sport 22 -j DROP

14.7.4 除了10.0.0.1这个地址可以访问22端口,其他所有的地址都不能访问22端口

14.7.4.1 取反操作

[root@firewalld ~] # iptables -A INPUT ! -s 10.0.0.1 -p tcp --dport 22 -j DROP

14.7.4.2 修改默认策略

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT        端口

[root@firewalld ~] # ipatbles -P INPUT DROP                            修改默认规则为阻止

14.7.5 如何阻止用户访问防火墙的多个端口

14.7.5.1 连续多个端口信息

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22:80 -j DROP

14.7.5.2 不连续的多个端口信息

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.1 -m multiport -p tcp --dport 22,23,25,80 -j DROP

14.7.6 实现主机禁ping功能

  • ping使用的是icmp协议
  1. type 8:表示ping包请求流量
  2. type 0:表示ping包响应流量

14.7.6.1 其他服务器ping不通防火墙服务器

14.7.6.1.1 INPUT练习

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP

14.7.6.1.2 OUTPUT练习

[root@firewalld ~] # iptables -A OUTPUT -d 10.0.0.7 -p icmp --icmp-type 0 -j DROP

14.7.6.2 防火墙不能ping其他主机

14.7.6.2.1 OUTPUT练习

[root@firewalld ~] # iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP

14.7.6.2.2 INPUT练习

[root@firewalld ~] # iptables -A INPUT -p icmp --icmp-type 0 -j DROP

14.7.6.3 阻止0和8的流量信息

[root@firewalld ~] # iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP

  • -m icmp                    是扩展的意思,可以同时指定多个icmp协议协议
  • any                        表示任意协议的意思

14.7.7 利用防火墙限制数据包流量

[root@firewalld ~] # iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT

[root@firewalld ~] # iptables -P INPUT DROP

  • -m limit --limit n/{second/minute/hour}            一定时间内可以产生出n个包
  • --limit-burst 5                                n个包过后在多长时间内限速不产生包

14.8 企业中防火墙(iptables)实际配置过程

14.8.1 确认filter表中的所有默认策略(一般设置为白名单,切记先操作完第二步骤,在操作第一步骤)

[root@firewalld ~] # iptables -P INPUT DROP                默认INPU

[root@firewalld ~] # iptables -P OUTPUT DROP                默认OUTPUT为阻止

[root@firewalld ~] # iptables -P FORWARD ACCEPT            默认FORWARD为允许

14.8.2 确认自己可以远程连接防火墙服务器

[root@firewalld ~] # iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT

[root@firewalld ~] # iptables -P INPUT DROP

[root@firewalld ~] # iptables -P OUTPUT DROP

[root@firewalld ~] # iptables -P FORWARD ACCEPT

14.8.3 设置环回接口(lookback)

14.8.3.1 环回接口的概念和作用

14.8.3.1.1 概念

环回接口是一个逻辑接口

14.8.3.1.2 作用

可以实现服务器自己ping自己

可以设置成一个机器的管理口

14.8.3.2 防火墙环回接口配置

14.8.3.2.1 环回接口INPUT和OUTPUT都设置成允许

[root@firewalld ~] # iptables -A INPUT -i lo -p all -j ACCEPT

You have new mail in /var/spool/mail/root

[root@firewalld ~] # iptables -A OUTPUT -o lo -p all -j ACCEPT

14.8.4 让防火墙的配置永久保存

14.8.4.1 centos6

service iptables save

14.8.4.2 centos7

14.8.4.2.1 使用iptables-save来将显示的信息重定向到/etc/sysconfig/iptables

[root@firewalld ~] # iptables-save > /etc/sysconfig/iptables

14.8.4.2.2 直接编辑/etc/sysconfig/iptables保存(不要把iptables这个添加就可以)

[root@firewalld ~] # cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.21 on Thu Dec 5 16:08:22 2019

*filter

:INPUT ACCEPT [826:97750]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [440:68087]

-A INPUT -i lo -j ACCEPT                    和这个iptables -A INPUT -i lo -p all -j ACCEPT

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Thu Dec 5 16:08:22 2019

[root@firewalld ~] #

14.9 nat表的使用

  • PREROUTING                        可以实现外网主机访问内网
  • POSTROUTING                        可以实现内网主机访问外网
  • OUTPUT                                流量在出去时进行访问控制

14.9.1 内网访问外网

14.9.1.1 修改内网网关信息

[root@web01 ~] # cat /etc/sysconfig/network-scripts/ifcfg-eth1

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

IPADDR=172.16.1.7

PREFIX=24

DEFROUTE=yes

GATEWAY=172.16.1.5

DNS1=223.5.5.5

DNS2=223.6.6.6

14.9.1.2 实现内网服务器可以ping通网关

[root@lb01 ~] # iptables -A INPUT -s 172.16.1.7 -j ACCEPT

[root@lb01 ~] #

14.9.1.3 开启路由转发的功能

[root@lb01 ~] # cat /etc/sysctl.conf

# sysctl settings are defined through files in

# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.

net.ipv4.ip_forward=1                    开启路由转发的功能

[root@lb01 ~] #

[root@lb01 ~] # sysctl -p /etc/sysctl.conf

net.ipv4.ip_forward = 1                重新加载路由转发配置文件

[root@lb01 ~] #

14.9.1.4 配置内网通过外网上网

[root@lb01 ~] # iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT -o eth0 --to-source 10.0.0.5

[root@lb01 ~] # iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT

[root@lb01 ~] # iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT

[root@lb01 ~] # iptables -A FORWARD -i eth0 -s 172.16.1.0/24 -j ACCEPT

[root@lb01 ~] # iptables -A FORWARD -o eth1 -s 172.16.1.0/24 -j ACCEPT

[root@lb01 ~] #

14.9.2  实现外网可以访问内网

[root@firewalld ~] # iptables -t nat -A PREROUTING(链) -d 10.0.0.81(访问的目标地址) -p tcp --dport 9000(目标端口) -i eth0(在什么地方做映射) -j DNAT(目的地址做NAT转换) --to-destination 172.16.1.7:22(转换成的目的地址是多少)

[root@firewalld ~] # iptables -t nat -A PREROUTING -d 10.0.0.81 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.7:22

14.10  自定义链的使用(相当于shell脚本中的变量)

14.10.1  创建自定义链

[root@firewalld ~] # iptables -N oldboy

14.10.2  设置自定义链规则

[root@firewalld ~] # iptables -A oldboy -p tcp --dport 8080 -j ACCEPT

14.10.3  使用自定义链

[root@firewalld ~] # iptables -A INPUT -s 172.16.1.0/24 -j oldboy

14.10.4  调整端口不光能访问8080,是8080:8090

[root@firewalld ~] #iptables -R oldboy 1 -p tcp --dport 8080:8090 -j ACCEPT

史上最全的iptables应用的更多相关文章

  1. Linux记录-史上最全的MySQL高性能优化实战总结(转载)

       史上最全的MySQL高性能优化实战总结! 1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优 ...

  2. Linux面试题(史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  3. 史上最全Windows版本搭建安装React Native环境配置

    史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...

  4. 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇

    [Tips]史上最全H1B问题合辑——保持H1B身份终级篇 2015-04-10留学小助手留学小助手 留学小助手 微信号 liuxue_xiaozhushou 功能介绍 提供最真实全面的留学干货,帮您 ...

  5. 史上最全的java随机数生成算法分享(转)

    这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...

  6. 【2016年特别福利】史上最全CSS学习资料大全

    css学习篇 [2016年特别福利]史上最全CSS学习资料大全

  7. [No00004F]史上最全Vim快捷键键位图(入门到进阶)

    史上最全Vim快捷键键位重磅来袭!!学习Linux的朋友看过来啦,你是不是觉得Linux编辑器Vim操作复杂,步骤繁琐呢?Linux工程师是不是想大幅度提升自己的工作效率呢? 经典版        下 ...

  8. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  9. 史上最全的CSS hack方式一览

    做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...

随机推荐

  1. python学习-练习题

    1.使用while循环输入 1 2 3 4 5 6     8 9 10 # cat lx.py #!/usr/local/bin/python3.6 #邹姣姣 #使用while循环输入 1 2 3 ...

  2. nyoj 74-小学生算术(进位问题)

    74-小学生算术 内存限制:64MB 时间限制:3000ms 特判: No 通过数:23 提交数:53 难度:1 题目描述: 很多小学生在学习加法时,发现“进位”特别容易出错.你的任务是计算两个三位数 ...

  3. Flsk&pyecharts 动态数据可视化

    1:数据源 Hollywood Movie Dataset: 好莱坞2006-2011数据集  实验目的: 实现 统计2006-2011的数据综合统计情况,进行数据可视化 gitee地址: https ...

  4. BootStrap中的collapse插件堆叠效果

    通过网络上的一系列查找,总结出的collapse插件堆叠效果(网上没有找到,只能自己弄了,帮助那些和我遇到一样状况的同学) 首先感谢一位网友的知识总结给了我灵感,在这里先帮他推荐一波(https:// ...

  5. iOS UIView x Android View

  6. VueJS学习之Vue-cli项目模板

    1. 首先是学习vue时需要依赖于node.js和webpack打包工具,具体的安装如下 http://nodejs.cn/download/下载安装nodejs,具体的安装步骤不在此赘述 2. 安装 ...

  7. openresty如何完美替换nginx

    下载openresty wget https://openresty.org/download/openresty-1.15.8.1.tar.gz tar zxvf openresty-1.15.8. ...

  8. Spring Boot (一) 校验表单重复提交

    一.前言 在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据. 存在如上问题可以交给前端解决,判断多长时间内不能再次点 ...

  9. Linux虚拟机扩容根分区CentOs6.9 VMware14

    1.首先关闭虚拟机点击编辑虚拟机设置 2.点击想要扩容的硬盘点击扩容 3.增加容量 输入想增加的容量,因为我本身是30G写到35G是加了5G不是增加30G.(此处为了演示只增加5G) 4.开启虚拟机 ...

  10. 2019-11-6:ubuntu 18安装tomcat 9.0

    1,下载tomcat,选择自己想要的版本下载即可 下载官网:http://tomcat.apache.org/ 2,将下载的源码放到自己需要的位置,解压,我新建了一个tomcat目录 sudo mkd ...