!!!!在配置Linux的转发功能的时候要首先配置echo 1 > /proc/sys/net/ipv4/ip_forward

关于防火墙的相关概念

  • 主机防火墙:为单个主机进行防护
  • 网络防火墙:对网络入口进行维护,服务防火墙后的局域网
  • 主机防火墙和网络防火墙相辅相成
  • 硬件防火墙:硬件级别实现防火墙
  • 软件防火墙:使用软件处理逻辑

    对于iptable的理解华人netfilter的理解

    一个客户端代理,将用户的安全设定执行到对应的“安全框架——netfilter”中。
    netfilter是真正的防火墙框架,位于内核空间

  • ipfilter:该方式可以直接分析最底层的封装包表头数据来进行过滤,素以包括MAC地址,IP、TCP,UDP、ICMP等封装包的信息都可以进行过滤分析的功能

  • 真正意义上iptables并不是防火墙,只是用来定义防火墙的==功能规则的“防火墙管理工具,将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正意义上实现防火墙的功能”

    iptables阻挡封包的方式

  • 拒绝让internet的封包进入Linux主句的某些port

  • 拒绝让某些来源IP的封包进入
  • 拒绝让带有某些特殊标志的封包进入
  • 分析硬件地址来提供服务

    五链四表

    image.png

五链

iptables命令中设置过滤数据和处理数据的包的策略叫做规则,将多个规则合并为一个链,叫做规则链,规则链依据处理数据包的位置不通而进行分类

  • PREROUTING:在进行路由判断之前进行的规则
  • INPUT:处理入站的数据包
  • OUTPUT:处理出战的数据包
  • FORWARD:处理转发的数据包
  • POSTROUTING:在进行路由判断之后要进行的规则

    不同数据包经过的链的情况

  • 只需要转发报文,不经过input链, 只需要:PREROUTING(路由前),转发(forward),路由后(postrouting)

  • 到本地某个进程的报文:PREROUTING‐‐> INPUT‐‐>OUTPUT ‐‐>POSTROUTING
  • 由本机转发的报文:PREROUTING ‐‐> FORWARD ‐‐> POSTROUTING
  • 由本机的某个进程发出报文(通常为响应报文): OUTPUT ‐‐> POSTROUTING

    四表

    iptables种的规则表用于容纳规则链,规则表是允许状态的,那么规则链就设置被禁止的规则,而反之如果规则表是默认是禁止状态的,那么规则链就是这只被允许的规则

  • raw表:关闭nat上启用的连接追踪机制

  • mangle表,拆解报文,修改报文,重新封装报文
  • nat表,网络地址转换
  • filter表,负责过滤功能,防火墙

    规则的概念

  • 规则:根据指定的条件来尝试匹配每个流经“关卡“的报文,一旦匹配成功,则由规则之后的指定的处理动作来进行处理

  • 匹配条件

    基本匹配条件:sip、dip 拓展匹配条件:sport、dport 拓展条件也是条件的一部分,只不过使用的时候需要用-m参数声明对应的模块

  • 处理动作

    accept:接受
    drop:丢弃
    reject:拒绝
    snat:源地址转换,解决内网用户同一个公网地址上上网的问题
    masquerade:是snat的一种特殊形式,使用动态的、临时会变的ip上
    dnat:目标地址转换
    redirect:在本机作端口映射
    log:记录日志,/var/log/messages文件记录日志信息,然后将数据包传递给下一条规则

iptables的常规用法

  • iptables <-t 表名>选项<链名><条件><-j 控制类型>
  • iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] – j[ACCEPT|DROP]
  • 常见参数

    -P 设置默认策略 -F清空规则链 -L查看规则链 -A在规则链的末尾加入新的规则 -I num 在规则链的头部加入新的规则链 -D num 删除指定一条规则链 -s匹配来源地址,加入!表示除这个IP地址之外的地址 -d匹配目标地址 -i 网卡名称 匹配从这块网卡流入的数据 -o网卡名称 匹配从这块网卡出去的数据 -p 匹配协议,如tcp、udp、icmp —dport num 匹配目标端口号 —sport num 匹配来源端口号

查看规则(-vxL)

  • 格式 iptables [-t tables] [-L] [-nv]

-t:指定表名,默认是filter表
-L:指定链名,默认是所有链
-v:显示详细信息
-x:展开数字
示例:iptables -t filter -vxL INPUT
对于展示出来的规则表的各个字段的解释

  • policy:当前链的默认策略,当所有规则都没有匹配成功的时候执行默认策略
  • packets:当前链默认策略匹配到的包的数量
  • bytes:当前链默认策略匹配到的包的数量
  • pkts:对应规则匹配到的包的数量
  • bytes:对应规则匹配到的包的大小
  • target:对应规则执行的动作
  • prot:对应的协议,是否针对某些协议应用此规则
  • opt:规则对应的选项
  • in:数据包从哪个接口流入
  • out:数据包从哪个接口流出
  • source:源IP地址
  • destination:目的IP地址

    删除规则(-D)

    iptables -t filter -vxL INPUT --line-numbers在显示规则链的时候显示数字
    删除规则示例代码

  • 删除指定序号规则iptables -t filter -D INPUT 1

  • 根据条件删除指定规则iptables -t filter -D INPUT -s 192.168.80.0/24 -j ACCEPT

    修改规则(-R)

    示例代码iptables -t filter -R INPUT 1 -s 192.168.80.0/24 -j REJECT

    修改链的默认规则(-P)

    示例代码iptables -t filter -P INPUT [处理动作]

    转发本地端口

    示例代码iptables -t nat -A PREROUTING -p tcp --dport 6666 -j REDIRECT --to-port 22

    自定义链(-N)

    ```python 创建自定义链 iptables -t filter -N http_chain 引用自定义链 iptables -I INPUT -p tcp —dport 80 -j http_chain 创建规则 iptables -t filter -A http_chain -s 192.168.80.1 -j REJECT iptables -t filter -A http_chain -s 10.1.0.0/16 -j REJECT

```

删除自定义链(-X)

与创建自定义链的方向相反

  1. 删除自定义链的引用 iptables -t filter -D INPUT -p tcp --dport 80 -j http_chain
  2. 删除自定义链的所有规则iptables -F http_chain
  3. 删除自定义链iptables -X http_chain

    匹配条件(常见)

  • 基本匹配条件

    -s:指定源ip地址
    -d:指定目的ip地址
    -p:指定协议类型
    -i:指定网卡流入,PREROUTING/INPUT/FORWARD
    -o:指定网卡流出,OUTPUT/POSTROUTING

  • 扩展条件

    tcp/udp —dport:指定目的端口 —sport:指定源端口

示例代码
允许所有ssh的连接请求

  • iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  • iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

    NAT案例!!!

    SNATiptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT --to-source 10.1.0.59
    iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j MASQUERADE
    在server1上访问8822端口的时候,转到server2的22端口的ssh服务