Linux 防火墙

iptables的基本认识

Netfiler组件
  • 内核空间,集成在linux内核中
  • 扩展各种网络服务的结构化底层框架
  • 内核中选取五个位置放了五个hook(勾子) function(INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING), 而这五个hook function向用户开放,用户可以通过一个命令工 具(iptables)向其写入规则
  • 由信息过滤表(table)组成,包含控制IP包处理的规则集( rules),规则被分组放在链(chain)上
三种报文流向:
  • 流入本机:PREROUTING –> INPUT–>用户空间进程
  • 流出本机:用户空间进程 –>OUTPUT–> POSTROUTING
  • 转发:PREROUTING –> FORWARD –> POSTROUTING
防火墙工具

iptables

  • 命令行工具,工作在用户空间
  • 用来编辑规则,写好的规则被送往netfilter告诉内核如何去处理信息包

firewalld

  • centos 7 引入了新的前端管理工具
  • 管理工具:
    firewall-cmd 命令行
    firewall-config 图形

iptables的组成

iptables由四个表和五个链以及一些规则组成

四个表table:filter、nat、mangle、raw

  • filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
  • nat表:network address translation 地址转换规则表
  • mangle:修改数据标记位规则表
  • Raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
  • 优先级由高到低的顺序为:raw–>mangle–>nat–>filter

五个内置链chain

  • INPUT
  • OUTPUT
  • FORWARD
  • PREROUTING
  • POSTROUTING
当我们创建一条规则的时候,我们首先要明确我们需要在哪条链上执行动作,根据不同的功能选择合适的链,同样,我们也需要通过不同的功能选择不同的表。下图就是iptables中链和表的对应关系:

这里写图片描述

数据包过滤匹配流程

这里写图片描述

IPTABLES和路由

路由功能发生的时间点
报文进入本机后

  • 判断目标主机是否是为本机
    是: INPUT
    否:FORWARD

报文离开本机之前

  • 判断由哪个接口送往下一跳
    这里写图片描述
内核中数据包的传输过程

内核中数据包的传输过程

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

iptables命令

  • 规则格式: iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-targetoptions]
  • -t table:
    raw, mangle, nat, [filter]默认

SUBCOMMAND:
1、链管理:

  • -N:new, 自定义一条新的规则链
  • -X:delete,删除自定义的空的规则链
  • -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有: ACCEPT:接受
    DROP:丢弃
  • -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名, 也不能被删除

2、查看

  • -L:list, 列出指定鏈上的所有规则,本选项须置后
  • -n:numberic,以数字格式显示地址和端口号
  • -v:verbose,详细信息
  • -vv 更详细
  • -x:exactly,显示计数器结果的精确值,而非单位转换后的 易读值
  • –line-numbers:显示规则的序号 常用组合:
    –vnL –vvnxL –line-numbers
  • -S selected,以iptables-save 命令格式显示链上规则

3、规则管理

  • -A:append,追加
  • -I:insert, 插入,要指明插入至的规则编号,默认为第一条
  • -D:delete,删除 (1) 指明规则序号 (2) 指明规则本身
  • -R:replace,替换指定链上的指定规则编号
  • -F:flush,清空指定的规则链
  • -Z:zero,置零 iptables的每条规则都有两个计数器
    (1) 匹配到的报文的个数
    (2) 匹配到的所有报文的大小之和
  • chain:PREROUTING,INPUT,FORWARD,OUTPUT, POSTROUTING

匹配条件

  • 基本:通用的,PARAMETERS
  • 扩展:需加载模块,MATCH EXTENTIONS
    1、基本匹配条件:无需加载模块,由iptables/netfilter自行提供
  • [!] -s, –source address[/mask][,…]:源IP地址或范围
  • [!] -d, –destination address[/mask][,…]:目标IP地址或范围
  • [!] -p, –protocol protocol:指定协议,可使用数字如0(all) protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or “all“ 参看:/etc/protocols
  • [!] -i, –in-interface name:报文流入的接口;只能应用于数据 报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
  • [!] -o, –out-interface name:报文流出的接口;只能应用于数 据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
NAT
  • NAT: network address translation
    PREROUTING,INPUT,OUTPUT,POSTROUTING
    请求报文:修改源/目标IP,由定义如何修改
    响应报文:修改源/目标IP,根据跟踪机制自动实现
  • SNAT:source NAT POSTROUTING, INPUT
    让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
    请求报文:修改源IP
  • DNAT:destination NAT PREROUTING , OUTPUT
    把本地网络中的主机上的某服务开放给外部网络访问(发 布服务和端口映射),但隐藏真实IP
    请求报文:修改目标IP

实验

SNAT实现
SNAT:改postrouting链
工作原理图
这里写图片描述
实验环境需要三台服务器:A,B,C
网络配置环境表格
这里写图片描述
实验步骤:
1.首先在A机中添加一条路由,网关指向192.168.243.7

 route add default gw 192.168.243.7 

2.打开网关服务器的路由转发:

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

3.在网关服务器上添加SNAT策略

iptables -t nat -A POSTROUTING -s 192.168.243.0/24 -j SNAT --to-source 172.18.41.7  

如果是动态IP上网,则改动下SNAT策略如下

iptables -t nat -A POSTROUTING -s 192.168.243.0/24 -j MASQUERADE  

验证:
在A机种ping C机IP
这里写图片描述

在C机中抓包:

[root@R1 ~]#tcpdump -i ens37 -nn icmp

这里写图片描述
结论发现:
当我们在局域网内A机(192.168.243.6)发出请求IP时,发现在互联网服务器端请求IP来源地址是是网关服务器IP,Internet中的服务器并不知道局域网PC机的实际IP地址,中间的转换完全由网关主机完成,起到了保护内部网络的作用。


实验 DNAT实现

互联网访问局域网内网时安全设置
SNAT:改postrouting链

iptables -t nat -A PREROUTING  -d 172.18.41.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.243.6

验证:
在C机中通过访问 ping 172.18.41.7
观察A机中 httpd 日志

tail -f /var/log/httpd/access_log 

观察到是访问IP是172.18.41.8
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值