• 了解iptables的基本知识和工作原理
  • 掌握iptables的基本语法结构
  • 掌握常见的iptables规则配置
  • 能够根据需求对服务器进行iptables的基本配置

    一、防火墙介绍

  • 防火墙分类和作用

    • 硬件防火墙
    • 软件防火墙
  • iptables处于传输层
  • iptables是表(4张)的集合,表是链(5条)的集合,链是规则的集合
    • 查看filternat表,mangle表,raw表)表内的链,iptables -t filter/nat -L
  • 功能:

    • 数据包的过滤和网络控制 filter
    • 地址转换功能(源地址和目标地址) nat

      二、防火墙工作原理(数据包流向)

      三、iptables基本语法

  • iptables -L

  • iptables -t nat -L

    filter表

    1.全部允许/拒绝/丢弃

  • iptables -t filter -A INPUT -j DROP 在filter表中的INPUT链上,添加规则,丢弃所有进来的数据包

  • iptables -t filter -A INPUT -j ACCEPT 添加规则,允许所有进来的数据包
  • iptables -t filter -I INPUT 2 -j REJECT 指定位置插入规则,拒绝所有进来的数据包为第2条规则
  • -R 可以用来覆盖第几条规则 release
  • iptables -t filter -P INPUT DROP 修改链上的默认规则
  • iptables -t filter -A INPUT -j LOG 第一条规则匹配的是写日志,然后接着往下匹配
  • -D 删除某条策略,-F 清空策略

    2.根据源地址和目标地址匹配

  • iptables -t filter -R INPUT 1 -i lo -j ACCEPT 从lo(网卡接口)进入的数据包

  • iptables -t filter -A OUTPUT -o eth0 -j DROP output从eth0出去的数据包,拒绝,ping测试
  • iptables -t filter -P INPUT DROP
    • iptables -t filter -A INPUT -s 10.1.1.2 -j ACCEPT 只允许10.1.1.2主机来访问本机
    • iptables -nL 不需要解析,查看规则(或是在hosts里面添加上ip10.1.1.2的信息)
    • iptables -t filter -A INPUT -s 10.1.1.0/24 -j ACCEPT 允许整个网段来访问
  • iptables -t filter -P OUTPUT DROP
    • iptables -t filter -A INPUT -s 10.1.1.2 -j ACCEPT 允许源地址为10.1.1.2的数据包通过
    • iptables -t filter -A OUTPUT -d 10.1.1.2 -j ACCEPT 目标为10.1.1.2的出去的包被允许通过
    • 这样就可以ping通10.1.1.2
  • iptables -t filter -A INPUT -p tcp -s 10.1.1.2 -j DROP 拒绝来自10.1.1.2的访问,比如不让他访问网站服务或ssh到你的主机
  • iptables -t filter -A INPUT -p tcp --dport 22 -s 10.1.1.2 -j DROP 拒绝访问当前服务器的22端口的服务(ssh)

    • 写端口,前面一定要有协议
    • 有 —sport,来源的端口

      3.根据协议匹配过滤

      icmp协议中:
      icmp-type 8 类型为8代表请求回显,ping请求
      icmp-type 0 类型为0代表回显应答,ping应答
  • echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 这个配置文件,也可以达到效果

需求1:只允许自己ping通别人,不允许别人ping通自己

  • iptables -t filter -A INPUT/DROP -j DROP 全部都拒绝,哪个是允许的,那下面对应的那条规则就不需要配了
  • iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
  • iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT

需求2:只允许自己和10.1.1.2相互ping通,其他人不能ping通自己,但是允许自己ping通别人

  • iptables -A INPUT -s 10.1.1.2 -p icmp --icmp-type 8 -j ACCEPT
  • INPUT 和 OUTPUT默认都是DROP的状态,否则:
  • iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
  • iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
  • iptables -t filter -A OUTPUT -d 10.1.1.2 -p icmp --icmp-type 0 -j ACCEPT

    4.根据端口匹配过滤

  • iptables -A INPUT -s 10.1.1.2 -p tcp --dport 20:80 -j ACCEPT

  • iptables -A OUTPUT -d 10.1.1.2 -p tcp --sport 20:80 -j ACCEPT

    iptables内置模块

  • -m参数+<模块>,multiport 多端口,

    • 指定多个不连续的端口,减少iptables的条目,达到优化效果
    • iptables -t filter -I INPUT -s 10.1.1.2 -m multiport -p tcp --dports 20:22,80 -j ACCEPT
  • iptables -m range --help 指定ip范围
    • iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -p tcp --dport 80 -j ACCEPT
  • state 连接状态, 目的:根据连接请求的状态进行数据过滤

    • iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
    • 意思是,在出去的门,添加上这条规则,就不必因为新服务需要开放端口而再次添加规则了
    • 如果服务的端口不固定,还需要加上参数(意思是相关联的) ESTABLISHED,RELATED

      nat表

      功能:地址转换(源地址和目标地址)

      地址转换应用场景

  • 公司内部员工访问互联网SNAT

    • 需要中间件,也就是交换机,路由器
  • 互联网用户访问公司服务器 DNAT

    地址转换原理

    源地址转换(SNAT)

    source-IP源IP
    d-IP目标IP

  • 源地址的转换,是在路由之后做的,也就是在 POSTROUTING 这条链上

image-20200215211255293.png

目标地址转换(DNAT)

地址转换应用

源地址转换—SNAT

环境:
client:10.1.1.2
nat-server:10.1.1.1(eth0) 和 2.2.2.1(eth1)
web-server:2.2.2.2
需求:
client是私有IP,想要访问互联网中的web服务
步骤:

  1. client:设置自己的默认路由(网关),指向nat-server服务器
    • route add default gw 10.1.1.1
  2. nat-server:开启路由转发功能并添加防火墙规则
    • echo 1 > /proc/sys/net/ipv4/ip_forward 重启失效
    • iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1
      • 转换成自己的公网地址2.2.2.1
    • 意思是,让nat-server服务器来代替client去上网
    • iptables -nL
  3. web-server:搭建web服务
    • echo "this is snat test page" >> /var/www/html/index.html
    • service httpd restart
    • netstat -nltp | grep 80
    • route -n
  4. client测试验证:client端10.1.1.2是否可以访问web-server端2.2.2.2的web服务

思考:家里实现上网和上面哪里不同?
家里的路由,是获取的动态的公网地址,不固定 地址伪装

  • iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE
  • 这样就不担心当中间件的公网IP变化时,访问不到外网的情况

总结:

  1. SNAT源地址转换目的实现私网地址可以访问互联网
  2. NAT设备可以是硬件防火墙、路由器等物理设备,但都得具有路由和地址转换功能
  3. 当请求发送到NAT设备后,NAT设备首先查看自己的路由表,
    1. 然后进行地址转换。所以应该在nat表的POSTROUTING 链上进行源地址转换
  4. 对于nat表和filter表,数据包进来先经过nat表的PREROUTING链,再经过路由表,再选择不同的路出去

    目标地址转换—DNAT

  • 从右往左看,例如,内部服务器要发布一个网站到公网上

image-20200215215352049.png
环境:
web-sertver:10.1.1.3
nat-server:10.1.1.1和2.2.2.1
client:2.2.2.2
需求:公网用户client访问私网服务器提供的web服务
步骤:

  1. web-server:10.1.1.3上搭建web服务
    • route add default gw 10.1.1.1 这样,回包的时候,就会发送到nat-server上去
  2. nat-server:10.1.1.1、2.2.2.1开启路由转发功能,并添加DNAT规则
    • echo 1 > /proc/sys/net/ipv4/ip_forward 开启了路由转发
    • iptables -t nat -A PREROUTING -d 2.2.2.1 -p tcp --dport 80 -j DNAT --to 10.1.1.3
    • iptables -t nat -nL
  3. client:客户端测试验证