SECURITY:iptables防火墙(网络层)

防火墙

  • 防火墙指(firewall)的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。
  • 防火墙是一种隔离工具,工作于主机和网络边缘,对于出入本机或网络的报文,根据事先定义的检查规则左匹配检验,对于能被匹配的报文做出处理的组件。
  • Firewall 分主机防火墙和网络防火墙,从实现方式分软件防火墙和硬件防火墙;防火墙是对报文的过滤和处理,首先我得知道报文的发送是单向的,这就涉及到源和目标的问题,如何理解什么是源,什么是目标
    A —————发送报文—————>B A:源主机,源IP, B:目标主机,目标IP
    A<—————收到报文响应———B A:目标主机,目标IP, B:源主机,源IP

包过滤防火墙

  • 包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作。
  • 包过滤是一种内置于Linux内核路由功能之上的防火墙类型,其防火墙工作在网络层

四表五链

  • filter(过滤表):过滤数据包
  • nat(地址转换表):network address translation,用于网络地址转换(IP、端口)
  • mangle(包标记表):修改数据包的服务类型、TTL、并且可以配置路由实现QOS
  • raw(状态跟踪表):决定数据包是否被状态跟踪机制处理

  • INPUT:进来的数据包应用此规则链中的策略
  • FORWARD:转发数据包时应用此规则链中的策略
  • OUTPUT:外出的数据包应用此规则链中的策略
  • PREROUTING:对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
  • POSTROUTING:对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

表实现的链

在这里插入图片描述

包过滤匹配流程

  • 规则链内的匹配顺序
    – 顺序对比,匹配即停止(LOG除外)
    – 若无任何匹配,则按该链的默认策略处理

iptables用法解析

  • 管理程序位置
    /sbin/iptables

iptabels基本用法

  • 注意事项/整体规律
    – 可以不指定表,默认为filter表
    – 可以不指定链,默认对应表的所有链
    – 如果没有匹配的规则,则使用防火墙默认规则
    – 选项/链名/目标操作 用 大写字母,其余都小写

iptabels语法格式

  • iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
  • iptables命令的常用选项
    在这里插入图片描述

iptables命令

-L 列出指定链上的所有规则
-t 指定表,默认为filter
-n 以数字格式显示地址和端口号
-v 显示详细信息
–line-number 显示规则编号
-F 清空规则链,省略链表示清空指定表上的所有链
-N 创建新的自定义规则链
-X 删除用户自定义的空的规则链
-P 指定链的默认策略,包括accept、drop
-A 将新规则追加至指定链的尾部
-I 将新规则插入链的指定位置
-D 删除指定链上的指定规则

匹配规则

-s 指定源ip(也可以指定网段)
-d 指定目标ip(也可以指定网段)
-p 指定协议
–dport 指定端口
-j jump至指定的targrt
-j target:jump至指定的target
ACCEPT:允许通过/放行
DROP:丢弃
REJECT:拒绝
LOG:记录日志
RETURN:返回调用链
REDIRECT:端口重定向
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装

防火墙规则实例

  • 清空所有策略:
    iptables -F #默认filter表
    iptables -t nat -F #nat表
  • 自定义一个链:
    iptables -I INPUT -p udp -j ACCEPT#插入规则至filter表中的INPUT链的开头,允许任何人使用UDP协议访问本机
    iptables -I INPUT 2 -p icmp -j ACCEPT#插入规则至filter表中的INPUT链的第2行,允许任何人使用ICMP协议访问本机
    iptables -t filter -A INPUT -p tcp -j ACCEPT #追加规则至filter表中的INPUT链的末尾,允许任何人使用TCP协议访问本机
  • 查看iptables防火墙规则
    iptables -nL # 查看filter表所用链的规则
    iptables -nL INPUT --line-numbers #仅查看INPUT链的规则,同时显示行号
  • 删除规则
    iptables -D INPUT 3 #删除filter(默认)表中INPUT链的第3条规则
    iptables -t filter -D INPUT 3 #删除filter表中INPUT链的第3条规则
  • 设置防火墙默认规则
    iptables -t filter -P INPUT DROP
  • 保存规则
    iptables-save > /etc/sysconfig/iptables

filter过滤和转发控制

开启内核的IP转发

Linux内核默认支持软路由功能,通过修改内核参数即可开启或关闭路由转发功能

echo 0 > /proc/sys/net/ipv4/ip_forward            #关闭路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward            #开启路由转发
//注意以上操作仅当前有效,计算机重启后无效
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
#修改/etc/sysctl.conf配置文件,可以实现永久有效规则

iptables防火墙规则的条件

iptables防火墙可以根据很多很灵活的规则进行过滤行为,具体常用的过滤条件如下表
在这里插入图片描述

主机型防火墙案例

iptables -I INPUT -p tcp --dport 80 -j REJECT
iptables -I INPUT -s 192.168.2.100 -j REJECT
iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT
iptables -I INPUT -i eth0 -p tcp --dport 80 -j REJECT
iptables  -A  INPUT  -s 192.168.4.100  -j  DROP
//丢弃192.168.4.100发给本机的所有数据包
iptables  -A  INPUT -s  192.168.2.0/24  -j  DROP
//丢弃192.168.2.0/24网络中所有主机发送给本机的所有数据包
iptables -A  INPUT -s  114.212.33.12  -p tcp --dport 22 -j  REJECT
//拒绝114.212.33.12使用tcp协议远程连接本机ssh(22端口)

网络型防火墙案例

  • 打开proxy的路由转发功能
  • 实验拓扑图:
    在这里插入图片描述

添加网关的命令

  • 方法一(临时)
route add default gw 192.168.4.5
  • 方法二(永久)
nmcli connection modify eth0 ipv4.gateway 192.168.4.5
nmcli connection up eth0
  • 方法三(永久)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.4.200  #添加这一行
  • 修改防火墙规则
iptables -P FORWARD DROP  #设置filter表FOEWARD链默认DROP规则
iptables -A FORWARD -p tcp --sport 80 -j ACCEPT  #添加filter表FOEWARD链通过tcp协议中原端口为80的规则
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT  #添加filter表FOEWARD链通过tcp协议中目的端口为80的规则
  • 一次定义多个端口
iptables -A FORWARD -p tcp -m multiport --sports 22,80,8080,3306 -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dports 22,80,8080,3306 -j ACCEPT

测试结果,client1可以访问web1的tcp协议80等等端口的服务

扩展匹配

扩展条件的方法

  • 前提条件
    – 有对应的防火墙模块支持
  • 基本用法
    – -m 扩展模块 --扩展条件 条件值

常见的扩展条件类型

选项 用法
MAC地址匹配 -m mac --mac-source MAC地址
多端口匹配 -m multiport --sports 源端口列表
多端口匹配 -m multiport --dports 目标端口列表
IP范围匹配 -m iprange --src-range IP1-IP2
IP范围匹配 -m iprange --dst-range IP1-IP2

扩展案例

根据MAC地址过滤

iptables  -A  INPUT  -p tcp --dport 22\
> -m   mac --mac-source  52:54:00:00:00:0b  -j  DROP
#拒绝52:54:00:00:00:0b这台主机远程本机

基于多端口设置过滤规则

iptables  -A  INPUT  -p tcp   \
> -m  multiport --dports  20:22,25,80,110,143,16501:16800  -j  ACCEPT
#一次性开启20,21,22,25,80,110,143,16501到16800所有的端口

根据IP地址范围设置规则

iptables  -A  INPUT  -p tcp  --dport  22  \
> -m  iprange  --src-range  192.168.4.10-192.168.4.20   -j  ACCEPT
#允许从 192.168.4.10-192.168.4.20 登录
注意,这里也可以限制多个目标IP的范围,参数是--dst-range,用法与--src-range一致。
iptables -A INPUT -p tcp --dport 22  -s 192.168.4.0/24  -j  DROP
禁止从 192.168.4.0/24 网段其他的主机登录

配置SNAT实现共享上网

SANT源地址转换

  • Source Network Address Translation
    – 修改数据包的源地址
    – 仅用于nat表的POSTROUTING

设置防火墙规则,实现IP地址的伪装(SNAT源地址转换)

  • 确保proxy主机开启了路由转发功能
  • 设置防火墙规则,实现SNAT地址转换
iptables  -t  nat  -A POSTROUTING \
> -s  192.168.4.0/24 -p tcp --dport 80  -j SNAT  --to-source 192.168.2.5
  • 登陆web主机查看日志
tail  /var/log/httpd/access_log
.. ..
192.168.2.5 - - [12/Aug/2018:17:57:10 +0800] "GET / HTTP/1.1" 200 27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

通过日志会发现,客户端是先伪装为了192.168.2.5之后再访问的web服务器!

  • 扩展知识,对于proxy外网IP不固定的情况可以执行下面的地址伪装,动态伪装IP。
iptables  -t  nat  -A POSTROUTING \
> -s  192.168.4.0/24 -p tcp --dport 80 -j MASQUERADE

最后,所有iptables规则都是临时规则,如果需要永久保留规则需要执行如下命令:

service  iptables save
或者
iptables-save > /etc/sysconfig/iptables
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章