Linux 防火墙及防火墙规则

防火墙的分类

包过滤型防火墙

工作在OSI参考模型的网络层 它根据数据包头源地址、目的地址、端口号和协议类型 等标志确定是否允许数据包通过

 

代理型防火墙

主要工作在OSI的应用层 代理服务在确认客户端连接请求有效后接管代理 代为向服 务器发出连接请求

代理型防火墙可以允许或拒绝特定的应用程序或服务,还可以实施数据流监控、过滤、 记录和报告功能

代理服务器通常有高速缓存功能

代理防火墙的最大缺点是速度较慢(客户机请求的地址没有存在于缓存中)

 

状态检测型防火墙

可以动态地根据实际应用需求 自动生成或删除包过滤规则

不但能根据数据包的源地址、目标地址、协议类型、源端口、目标端口等对数据包进行 控制 而且能记录通过防火墙的连接状态 直接对包里的数据进行处理

 

网关防火墙

DMZ网关防火墙

 

 

netfilter

位于Linux内核中的包过滤防火墙功能体系

称为Linux防火墙的”内核态”

 

iptables

位于/sbin/iptables 是用来管理防火墙的命令工具

为防火墙体系提供过滤规则/策略 决定如何过滤或处理到达防火墙主机的数据包

成为Linux防火墙的”用户态”

 

-------习惯上 上述两种称呼都可以代表Linux防火墙

 

规则链

规则的作用在于对数据包进行过滤或处理 根据处理时机的不同 各种规则被组织在不 同的”链”中

规则链是防火墙规则/策略的集合

 

默认的5种规则链

INPUT 处理入站数据包 (外网入 内网出 箭头指向防火墙 进入防火墙)

OUTPUT 处理出站数据包

FORWARD 处理转发数据包

POSTROUTING 在进行路由选择后处理数据包

PREROUTING 在进行路由选择前处理数据包

 

规则表

具有某一类相似用途的防火墙规则 按照不同处理时机区分到不同的规则链以后 被归 置到不同的”表”中

规则表是规则链的集合

 

默认的4个规则表

raw 表 确定是否对该数据包进行状态跟踪

mangle 表 为数据包设置标记

nat 表 修改数据包中的源、目的IP地址或端口(网关型防火墙 至少两个网卡)

filter表 确定是否放行该数据包(过滤)

 

Linux 防火墙及防火墙规则

 

iptables 的规则表、链结构

Linux 防火墙及防火墙规则

 

规则表间的优先顺序

raw、mangle、nat、filter

 

规则链间的匹配顺序

入站数据 PREROUTING、INPUT

出站数据 OUTPUT、POSTROUTING

转发数据 PREROUTING、FORWARD、POSTROUTING

 

规则链内的匹配顺序

按顺序依次进行检查 找到相匹配的规则即停止(LOG策略会有例外)

若在该链内找不到相匹配的规则 则按该链的默认策略处理

Linux 防火墙及防火墙规则

 

iptables命令的语法格式

ipatables [-t 表名] 管理选项 [链名] [条件匹配] [-j目标动作或跳转]

不指定表名时 默认为filter表

不指定链名时,默认表示该表内所有链

除非设置规则链的缺省策略(如果不是设置默认规则) 否则一定需要条件匹配

 

设置规则内容:

-A在链尾追加一条新的规则

-I 在指定位置(或链首)插入一条新的规则

-R 修改、替换指定位置或内容的规则

-P 设置指定链的默认策略

 

列表查看规则

-L 列表查看各规则信息

--line-numbers 查看规则信息时显示规则的行号

-n以数字形式显示IP地址、端口等信息

-v 显示数据包个数、字节数等详细信息

 

Linux 防火墙及防火墙规则

 

清除规则

-D 删除指定位置或内容规则

-F 清空规则链内的所有规则

 

自定义规则链

-N 创建一条新的规则链

-X 删除自定义的规则链

 

-h 查看iptables命令的使用帮助

 

删除指定位置的规则

Linux 防火墙及防火墙规则

 

清空所有规则

Linux 防火墙及防火墙规则

 

指定表格清空规则

Linux 防火墙及防火墙规则

 

创建一条新的规则链

Linux 防火墙及防火墙规则

Linux 防火墙及防火墙规则

 

设置匹配数据包的条件

通用条件匹配

可直接使用 不依赖于其他的条件或扩展模块

包括网络协议、IP地址、网络接口等匹配方式

 

隐含条件匹配

一般需要以特定的协议匹配作为前提

包括端口、TCP标记、ICMP类型等匹配方式

 

显式条件匹配

需要使用”-m扩展模块”的形式明确指定匹配方式

包括多端口、MAC地址、IP地址范围、数据包状态等匹配方式

 

 

通用条件匹配

可直接使用,不依赖于其他的条件或扩展模块

包括网络协议、IP地址、网络接口等匹配方式

 

协议匹配

使用"-p协议名"的形式

协议名可使用在"/etc/protocols"文件中定义的名称

常用的协议包括tcp、udp、icmp等

 

地址匹配

使用"-s源地址"、"-d目标地址的形式"

地址可以使单个IP地址、网络地址(带掩码长度)

 

接口匹配

使用"-i网络接口名"、"-o网络接口名"形式 分别对应接收、发送数据包的网络接口

 

拒绝进入防火墙的所有ICMP包

Linux 防火墙及防火墙规则

 

允许防火墙转发除ICMP以外的所有包

Linux 防火墙及防火墙规则

 

拒绝转发来自192.168.1.11主机的数据

Linux 防火墙及防火墙规则

 

丢弃从外网接口(eth1)进入防火墙主机的源地址为172.16.0.0/12的数据包

Linux 防火墙及防火墙规则

 

拒绝转发从eth1口出去的目标地址为61.35.4.3的数据包

Linux 防火墙及防火墙规则

 

隐含条件匹配

一般需要以特定的协议匹配作为前提

包括端口、TCP标记、ICMP类型等匹配方式

 

端口匹配

使用"-sport源端口"、"-dport"目的端口的形式

采用"端口1:端口2"的形式可以指定一个范围的端口

 

允许转发使用22端口的ssh数据包

Linux 防火墙及防火墙规则

 

允许本机开放从TCP端口20-80出去的端口

Linux 防火墙及防火墙规则

 

禁止其他主机ping

Linux 防火墙及防火墙规则

 

允许ping其他主机

Linux 防火墙及防火墙规则

 

或者  iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP

  iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

 

  iptables -I INPUT -i eth1 -p tcp - -tcp-flags SYN,RST,ACK SYN -j REJECT

  iptables -I INPUT -i eth1 -p tcp - -syn -j REJECT

 

ICMP类型匹配

使用”--icmp-type ICMP类型”的形式

ICMP类型可以使用类型字符串或者对应的数值 例如Echo-Request、Echo-Reply

 

TCP标记匹配

使用”--tcp-flags 检查范围 被设置的标记”的形式

如”--tcp-flags SYN,RST,ACK SYN”表示检查SYN,RST,ACK这3个标记 只有SYN为1时满足条件

 

显式条件匹配

需要使用“-m 扩展模块”的形式明确指定匹配方式

包括多端口、MAC地址、IP地址范围、数据包状态等匹配方式

 

MAC地址匹配

使用“-m mac”结合“--mac-source MAC地址”的形式来表示数据包的源MAC地址

 

多端口匹配

使用“-m multiport”结合“--sports 源端口列表”或者“--dports 目标端口列表”的形式

多个端口之间使用逗号“,”分隔 连续的端口也可以使用冒号“:”分隔

 

IP地址范围匹配

使用“-m iprange”结合“--src-range 源IP范围”或者“--dst-range 目标IP范围”的形式

以“-”符号连接起始IP地址、结束IP地址

 

数据包状态匹配

使用“-m state”结合“--state 状态类型”的形式

同时表示多种状态时以逗号“,”分隔

常见的数据包状态包括:NEW、ESTABLISHED、RELATED、INVALID

 

禁止转发来自MAC地址为00:0C:29:27:55:3F的主机的数据包

Linux 防火墙及防火墙规则

 

允许防火墙本机对外开放端口20 21 25 110以及被动模式FTP端口1250-1280

Linux 防火墙及防火墙规则

 

禁止转发源地址为192.168.1.20-192.168.1.99的TCP数据包

Linux 防火墙及防火墙规则

 

禁止转发与正常TCP连接无关的非—syn请求数据包

Linux 防火墙及防火墙规则

 

拒绝访问防火墙的新数据包 但允许响应连接或与已有连接相关的数据包

Linux 防火墙及防火墙规则

 

“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,”RELATED”表示与已建立的连接有相关性的,比如FTP数据连接等

Linux 防火墙及防火墙规则

 

常见的数据包处理方式

ACCEPT 放行数据包

DROP 丢弃数据包

REJECT 拒绝数据包

LOG 记录日志信息 并传递给下一条规则处理(防止SSH**)

用户自定义链名 传递给自定义链内的规则进行处理

 

SNAT 修改数据包的源地址信息

DNAT 修改数据包的目标地址信息

 

导入、导出防火墙规则

导出规则 iptables-save

结合重定向输出”>”符号保存规则信息

导入规则 iptables-restore

结合重定向输入”<”符号恢复规则信息

 

编写防火墙脚本文件

预先加载扩展模块 设置环境参数

引入可控变量 增强脚本的可移植性、可重用性

通过shell语句灵活控制防火墙策略

 

防火墙的一般结构

设置网段、网卡、IP地址等变量

加载包过滤相关的内核模块 FTP相关: ip_nat_ftp、ip_conntrack_ftp

用于添加的具体防火墙规则内容

清空原有规则,建立新的规则

确认开启路由转发功能

方法1    /sbin/sysctl -w net.ipv4.ip_forward=1

方法2    echo 1 > /proc/sys/net/ipv4/ip_forward

方法3    修改/etc/sysctl.conf,设置net.ipv4.ip_forward=1

设置iptables脚本中的自定义变量

定义变量名对应内外网卡对应的ip和接口名称

INTERNET_IP=”212.13.24.23”

INTERNET_IF=”eth1”

LAN_IP=”192.168.200.1”

LAN_IF=”eth0”

 

加载模块

加载支持ftp连接跟踪的功能模块:/sbin/modprobe ip_conntrack ftp

加载支持对ftp连接进行NAT转换的功能模块:/sbin/modprobe ip_nat_ftp

 

iptables脚本开头初始化语句

/sbin/iptables -F

/sbin/iptables -t nat -F

/sbin/iptables -t mangle -F

/sbin/iptables -t raw -F

/sbin/iptables -X

/sbin/iptables -t nat -X

/sbin/iptables -t mangle -X

/sbin/iptables -t raw -X

/sbin/iptables -P INPUT ACCEPT

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -P FORWARD ACCEPT

 

综合实验

1   配置入站链默认拒绝,其它链都是允许

    Linux 防火墙及防火墙规则

 

允许入站接口是本地回环接口的任何数据

Linux 防火墙及防火墙规则

 

允许所有客户机访问Linux服务器的Samba共享

Linux 防火墙及防火墙规则

 

允许响应所有客户机的DNS请求

Linux 防火墙及防火墙规则

 

只允许一台客户机ping通服务器

Linux 防火墙及防火墙规则

 

2   配置入站和出站链默认是拒绝,其它链都是允许

Linux 防火墙及防火墙规则

 

禁止某一个客户机访问Linux服务器的共享(只能使用--tcp-flag实现)

Linux 防火墙及防火墙规则

 

但允许服务器访问那个客户机上的共享(只能使用--tcp-flag实现)

Linux 防火墙及防火墙规则

 

禁止服务器ping那台客户机,但允许那台客户机ping通服务器(只能使用--icmp-type)

Linux 防火墙及防火墙规则

 

3   配置服务器出站链默认是拒绝,其它链都是允许

Linux 防火墙及防火墙规则

 

客户机不能访问服务器上任何资源

Linux 防火墙及防火墙规则

 

要求服务器能访问任意客户机上的所有资源,例如能ping通客户机,也可以ssh和http 访问客户机(只能使用--state实现)

Linux 防火墙及防火墙规则