iptables

iptables

介绍

iptables简介

  • netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,完成封包过滤、封包重定向和网络地址转换(NAT)等功能
  • 规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等
  • 当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT)、拒绝(REJECT)和丢弃(DROP)等
  • 配置防火墙的主要工作就是添加、修改和删除这些规则

iptables和netfilter的关系

  • iptables是Linux防火墙的管理工具,位于/sbin/iptables
  • 真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构

iptables的规则表和链

  • 表(tables)

    • 提供特定的功能
  • 链(chains)

    • 数据包传播的路径,每一条链中可以有数条规则
    • 当数据包到达链时,逐条按照规则检查,满足则处理,后面不再匹配;都不满足则按默认策略处理

数据包传输过程

  • 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
  • 如果数据包就是进入本机的,发送到INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出
  • 如果数据包是要转发出去的,且内核允许转发,数据包就会发送到FORWARD链,然后到达POSTROUTING链输出

基础

四表

  • raw

    • 数据追踪(PREROUTING和OUTPUT检查)
  • mangle

    • 数据包标记(所有链检查)
  • nat

    • 网络地址转换(仅FORWARD不检查)
  • filter

    • 数据包过滤 (默认) (INPUT,OUTPUT,FORWARD检查)

五链

  • PREROUTING

    • 路由前
  • INPUT

    • 进来的流量—起点不是本机,终点是本机
  • FORWARD

    • 穿越的流量—起点、终点均不是本机
  • OUTPUT

    • 出去的流量–起点是本机,终点不是本机
  • POSTROUTING

    • 路由后

数据包路径

  • PREROUTING—>INPUT

    • 进来的
  • OUTPUT—>POSTROUTING

    • 出去的
  • PREROUTING—>FORWARD—>POSTROUTING

    • 经过的

配置

语法

  • -nL

    • 数字的形式显示指定链所有规则,默认所有链

      • iptables -t 表名 -nL [链名]
      • iptables -t filter -nL FORWARD
  • -S

    • 打印链中所有规则,默认所有链

      • iptables -t 表名 -S [链名]
      • iptables -t nat -S
  • -F

    • 清空链中所有规则,默认所有链

      • iptables -t 表名 -F [链名]
      • iptables -t filter -F INPUT
  • -D

    • 删除链中规则,接序号或规则动作

      • iptables -t 表名 -D 链名 [数字|具体的规则]
      • iptables -t nat -D PREROUTING 1
  • -P

    • 设置链的默认策略

      • iptables -t 表名 -P 链名 动作
      • iptables -t filter -P INPUT DROP
      • iptables -t filter -A FORWARD -j DROP
  • -A

    • 向链中追加规则

      • iptables -t 表名 -A 链名 匹配条件 -j 动作
      • iptables -t filter -A INPUT -s 1.1.1.1 -j ACCEPT
  • -I

    • 向链中插入规则,数字表示插入到第几条,默认1

      • iptables -t 表名 -I 链名 [数字] 匹配条件 -j 动作
      • iptables -t filter -I INPUT 2 -s 1.1.1.11 -p tcp --dport 22 -j ACCEP
  • -R

    • 替换链中指定序号的规则

      • iptables -t 表名 -R 链名 数字 匹配条件 -j 动作
      • iptables -t filter -R INPUT 2 -s 1.1.1.11 -p tcp --dport 2222 -j ACCEPT
  • 所有链名和动作必须大写

匹配条件

  • -p 协议

    • 匹配协议类型,如tcp/udp/icmp
  • -s ip_addr

    • 匹配源IP地址
  • -d ip_addr

    • 匹配目标IP地址
  • -i 网卡名称

    • 从哪个网卡进来的(PREROUTING)
  • -o 网卡名称

    • 从哪个网卡出去的(POSTROUTING)
  • -m

    • 扩展匹配

    • tcp

      • –sport 源端口
      • –dport 目标端口
      • –tcp-flags mark标记
    • udp

      • –sport 源端口
      • –dport 目标端口
    • icmp

      • –icmp-type

        • 指定匹配ICMP类型
    • mac

      • –mac-source

        • 匹配源MAC地址
    • multiport

      • –sports

        • 匹配多个源端口
      • –dports

        • 匹配多个目标端口
      • –ports

        • 匹配多个端口,不区分方向
    • state

      • 通过state模块实现连接追踪机制,只要有互相通信就算建立连接
        多个状态用逗号分隔

      • iptables -t filter -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT

      • –state

        • NEW

          • 表示包为新的连接
        • ESTABLISHED

          • NEW之后,双向传送的连接
        • RELATED

          • 表示包由新连接开始,但是和一个已存在的连接有关联,如ftp中的数据连接
        • INVALID

          • 表示包是未知连接
        • UNTRACKED

          • 表示报文未被追踪,通常为无法找到相关的连接
    • mark

      • 匹配防火墙标记

      • iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 11

      • –mark

        • iptables -t filter -A INPUT -m mark --mark 11 -j ACCEPT

动作

  • filter

    • REJECT

      • 拒绝
      • iptables -t filter -A INPUT -j REJECT
    • ACCEPT

      • 允许
      • iptables -t filter -A INPUT -j ACCEPT
    • DROP

      • 丢弃
      • iptables -t filter -A INPUT -j DROP
  • nat

    • DNAT

      • 目标地址转换,PREROUTING/OUTPUT
      • iptables -t nat -A PREROUTING -d 180.12.13.15 -j DNAT --to 1.1.1.11
    • SNAT

      • 源地址转换,POSTROUTING/INPUT
      • iptables -t nat -A POSTROUTING -s 180.12.111.111 -j SNAT --to 1.1.1.24
    • MASQUERADE

      • 根据网卡IP转换源地,POSTROUTING
      • iptables -t nat -A POSTROUTING -s 1.1.1.11 -j MASQUERADE
    • REDIRECT

      • 端口重定向,PREROUTING/OUTPUT
      • iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to 80
  • mangle

    • MARK

      • 标记
      • iptables -t mangle -A PREROUTING -p tcp --dport 21 -j MARK --set-mark 21

示例

  • 将INPUT,OUTPUT,FORWARD默认策略都设置为DROP

    • iptables -P INPUT DROP
    • iptables -P FORWARD DROP
    • iptables -P OUTPUT DROP
  • 允许物理机通过SSH连接本机

    • iptables -A INPUT -s 1.1.1.1 -j ACCEPT
  • 允许所有人访问本机web服务(80,8080,443)

    • iptables -A INPUT -p tcp -m multiport --dports 80,8080,443 -j ACCEPT
  • 允许所有人访问本机的FTP服务(21,30001-31000,20)

    • iptables -A INPUT -p tcp -m multiport --dports 20,21,30001:31000 -j ACCEPT
  • 允许1.1.1.11访问本机的MySQL服务(3306)

    • iptables -A INPUT -s 1.1.1.11 -p tcp --dport 3306 -j ACCEPT
  • output配置

    • iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT

实验

实验一SNAT

  • 目的

    • 实现内网的主机能够访问外网
  • 规划

    • web-server

      • 180.15.100.100
    • 防火墙

      • 180.15.16.17
      • 1.1.1.24
    • client

      • 1.1.1.11
  • 配置

    • 防火墙

      • echo 1 > /proc/sys/net/ipv4/ip_forward

        • 开启路由转发
      • iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to 180.15.16.17

      • 能ping通客户端和服务器

    • client

      • route add default gw 1.1.1.24
  • 测试

    • client

      • curl 180.15.100.100,显示web-server内容

实验二DNAT

  • 目的

    • 内网服务器对外发布服务
  • 规划

    • client

      • 180.15.100.100
    • 防火墙

      • 外网:180.15.16.17
      • 内网:1.1.1.24
    • web-server

      • 1.1.1.11
  • 配置

    • 防火墙

      • echo 1 > /proc/sys/net/ipv4/ip_forward
      • iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 1.1.1.11
    • web-server

      • route add default gw 1.1.1.24
  • 测试

    • client

      • curl 180.15.16.17,显示web-server内容
  • 注意

    • web-server的路由表确保只有一条默认路由,否则可能报错Connection reset by peer

实验三filter

  • 在DNAT实验的基础上实现

    • 将web服务器端口改成8080,客户端通过80端口仍能访问
    • 防火墙的22端口仅对主机180.15.10.10开放
    • 对外仅开放80端口
  • 防火墙

    • PREROUTING链

      • iptables -t nat -R PREROUTING 1 -p tcp --dport 80 -j DNAT --to 1.1.1.11:8080
    • INPUT链

      • iptables -A INPUT -s 180.15.10.10 -p tcp --dport 22 -j ACCEPT
      • iptables -A INPUT -s 1.1.1.1 -p tcp --dport 22 -j ACCEPT
      • iptables -A INPUT -j DROP
    • FORWARD链

      • iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT
      • iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
      • iptables -A FORWARD -j DROP
  • 测试

    • client

      • curl 180.15.16.17,显示web-server内容

实验四

DANT+filter

  • 要求

    • 公司对外发布web(80)和ftp(21)两个业务,所有客户都能正常访问且只能访问这两个业务
    • 仅管理机180.15.10.10可以通过防火墙的2280端口ssh连接web服务器,2221端口连接ftp服务器
    • 防火墙本机仅允许管理机连接
  • 规划

    • client

      • 180.15.100.100
    • 防火墙

      • 外网:180.15.16.17
      • 内网:1.1.1.24
    • web-server

      • 1.1.1.11
    • ftp-server

      • 1.1.1.23
  • 配置

    • 防火墙

      • 路由转发

        • echo 1 > /proc/sys/net/ipv4/ip_forward
      • PREROUTING

        • iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 1.1.1.11
        • iptables -t nat -A PREROUTING -p tcp -m multiport --dports 21,40001:41000 -j DNAT --to 1.1.1.23
        • iptables -t nat -A PREROUTING -s 180.15.10.10 -p tcp --dport 2280 -j DNAT --to 1.1.1.11:22
        • iptables -t nat -A PREROUTING -s 180.15.10.10 -p tcp --dport 2221 -j DNAT --to 1.1.1.23:22
      • POSTROUTING

        • iptables -t nat -A POSTROUTING -p tcp --sport 20 -j MASQUERADE
      • INPUT

        • iptables -A INPUT -s 1.1.1.1 -p tcp --dport 22 -j ACCEPT
        • iptables -A INPUT -p tcp --dport 22 -j ACCEPT
        • iptables -A INPUT -j DROP
      • FORWARD

        • iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
        • iptables -A FORWARD -p tcp -m state --state ESTABLISHED -j ACCEPT
        • iptables -A FORWARD -p tcp -m multiport --dports 21,40001:41000 -j ACCEPT
        • iptables -A FORWARD -p tcp --sport 20 -j ACCEPT
        • iptables -A FORWARD -s 180.15.10.10/32 -p tcp --dport 22 -j ACCEPT
        • iptables -A FORWARD -j DROP
    • web-server

      • route add default gw 1.1.1.24
    • ftp-server

      • route add default gw 1.1.1.24
      • yum -y install vsftpd
      • vim /etc/vsftpd/vsftpd.conf

pasv_min_port=40001 #设置被动模式端口范围
pasv_max_port=41000 #设置被动模式端口范围
pasv_address=180.15.16.17 #设置被动模式PASV响应IP
- systemctl start vsftpd

注意事项

原则

  • 堵不如疏

    • 默认为放行,设置策略禁止需要禁止的流量
    • 默认为禁止,设置策略放行需要放行的流量

策略

  • 注意策略顺序, 防火墙的匹配是从上到下,匹配到即执行相应的动作,后面的不再匹配
  • 将匹配较多的策略放在上面,以避免额外的系统开销
  • 设置默认禁止策略前先设置好放行管理机策略,再把默认策略放在最后一条,不建议用-P设置默认禁止
  • 同一条策略里不同类型的多个条件之间是与的关系,同一个条件的多个参数之间是或的关系

存储

  • iptables策略有效期

    • 配置的策略默认重启后失效,恢复为默认设置
  • 保存iptables策略

    • iptables-save > /etc/sysconfig/iptables
  • 恢复iptables策略

    • iptables-restore /etc/sysconfig/iptables

开机启动

  • 方式一

    • yum -y install iptables-services
    • systemctl start iptables;systemctl enable iptables
  • 方式二

    • iptables-save > /etc/sysconfig/iptables
    • vim /etc/rc.d/rc.local

iptables-restore /etc/sysconfig/iptables
- chmod +x /etc/rc.d/rc.local

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值