一、防火墙,iptables和netfilter定义
防火墙:是由软件和硬件设备组合而成的一种隔离技术,它工作于网络或主机的边缘(通信报文的进出口),对于进出本网络或主机的数据包根据事先定义的检测规则进行匹配检测,允许或是限制传输的数据包通过。
netfilter :内核的一部分,内核中工作在tcp/ip网络协议栈上的框架,由一些数据包过滤表组成,这些表包含内核用户控制数据包过滤处理的规则集。
iptables :administration tool for IPv4 packet filtering and NAT .用来插入、修改和删除数据包过滤表中的规则的管理工具。定义的规则通过内核接口直接送至内核,立即生效,但不会永久有效,如果需要永久有效,需要保存至配置文件中,可以选择开机加载(方法???)或者手动加载。
二、iptables 深入学习
iptables对于每一个chain,都是对其中的rule进行从上到下的匹配,一旦匹配则不再向下匹配,因此在添加rule时要注意-A和-I的差别,一个添加在首部,一个添加在尾部。
基本语法格式:
iptables [ �Ct 表名 ] 命令选项 [ 链名 ] [ 条件匹配 ] [ �Cj 目标动作或跳转 ]
Tip:若不指定表名,默认使用filter表。
iptables主要参数
-A 向规则链中添加一条规则,默认被添加到末尾
-t 指定要操作的表,默认是filter
-D 从规则链中删除规则,可以指定序号或者匹配的规则来删除
-R 进行规则替换
-I 插入一条规则,默认被插入到首部
-F 清空所选的链,重启后恢复
-N 新建用户自定义的规则链
-X 删除用户自定义的规则链
-p 用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,
-s 指定源地址
-d 指定目的地址
-i 进入接口
-o 流出接口
-j 采取的动作,accept,drop,snat,dnat,masquerade,reject
--sport 源端口
--dport 目的端口,端口必须和协议一起来配合使用
注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写
查看策略规则
iptables -L -n
-t 接表明,如果不加,默认是-t filter
-L 列出一个或所有的规则
清除规则
iptables -F 清除所有规则
iptables -Z 链的计数器清零
默认我们是对filter表进行操作
用命令行的操作,只是个临时的操作,如果需要永久的操作,则保存到配置文件里面去。
规则链
prerouting 路由之前
input 进入
output出去
forward转发
postrouting路由之后
nat 地址转换
prerouting
postrouting
目标地址转换在进入的端口改
源地址转换在出去的端口改
下面是iptables优先匹配图
四表五链
raw,mangle,nat,filter
可以使用自定义链,但只在被调用时才发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制,用可以删除自定义的空连,默认连无法删除。
每个规则都有两个内置的计数器:被匹配的报文个数,被匹配的报文大小之和。
规则:匹配标准,处理动作
iptables [-t TABLE]COMMANDCHAIN[num] 匹配标准 -j 处理办法
匹配规则
通用匹配
-s , --src 指定源地址
-d , --dst 指定目标地址
-p {icmp,udp,tcp} 指定协议
-i interface 指定数据表问流入的接口
用于定义标准的链:PREROUTING,INPUT,FORWARD
-o interface 指定数据报文流出的接口
用于定义标准的链:OUTPUT,POSTROUTING,80);">
-j target
ACCE[T
DROP
REJECT
iptables -t filter -A INPUT -s 192.168.1.72/32 -d 192.168.103.108/32 -j DROP
扩展匹配
隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}
显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能
命令:
管理规则:
-A 附加一条规则,添加在链的尾部
-I CHAIN [num] 插入一条规则,插入为对应CHAIN上的第num条
-D CHAIN [num] 删除指定链中的第num条规则
-R CHAIN [num] 替换指定的规则,
管理链:
-F [CHAIN]:flush 清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN :设定指定链的默认策略
-N 自定义一个新的空链
简单Iptables使用示例:
1. 在filter表的INPUT链末尾增加一条规则:
iptables -t filter -A INPUT -p tcp -j ACCEPT
2. 在filter表的INPUT链行首增加iptables �CI INPUT �Cp udp �Cj ACCEPT ( 此处省略了“-t filter”选项,默认以filter处理)
3. 在filter表的INPUT链中插入一条防火墙规则,做为链的第二条规则:
iptables �CIINPUT 2�Cp icmp �Cj ACCEPT
4. 查看filter表INPUT链中的所有规则,同时显示规则的序号:
iptables �CL INPUT �Cline-numbers
5. 删除filter表INPUT链中第2条规则:
iptables �CD INPUT 2
6. 清空filter、nat、mangle表各链中的所有规则:
iptables �CF
iptables �Ct nat �CF
iptables �Ct mangle �CF
7. 设置filter表FORWARD规则链的默认策略为DROP
iptables �CP FORWARD DROP
条件匹配示例:
1. 协议匹配:如拒绝进入防火墙的所有icmp协议数据包
iptables�CI INPUT�Cp icmp�Cj REJECT
允许转发除icmp协议以外的所有数据(使用!可以将条件取反)
iptables�CA FORWARD! �Cp icmp�Cj ACCEPT
2. 地址匹配:(”-s 源地址”/ “-d 目标地址”)
拒绝转发来自192.168.1.1主机的数据
iptables�CA FORWARD�Cs 192.168.1.1�Cj REJECT
3. 网络接口匹配:(“-i 网络接口名”/ “-o 网络接口名”分别对应接收数据包的网卡和发送数据包的网卡)
丢弃从外网接口eth1进入防火墙本机的源地址为私网地址的数据包
iptables�CA INPUT�Ci eth1�Cs 192.168.0.0/16�Cj DROP
iptables�CA INPUT�Ci eth1�Cs 172.16.0.0/12�Cj DROP (这里运用了子网汇总)
iptables�CA INPUT�Ci eth1�Cs 10.0.0.0/8�Cj DROP
4. 端口匹配:用于检查数据包的TCP或UDP端口号,需要以“-p tcp”或“-p udp”匹配为前提,使用“--sport 源端口”、“--dport 目标端口”的形式。端口可以表示为单个端口号或者用冒号分割的端口范围。
仅允许管理员从192.168.1.0/24网段使用SSH方式远程登录防火墙主机
iptables�CA INPUT�Cp tcp�Cdport 22�Cs 192.168.1.0/24�Cj ACCEPT
iptables�CA INPUT�Cp tcp�Cdport 22�Cj DROP
5. TCP标记匹配:在Iptables命令中使用“--tcp-flags 检查范围 被设置的标记”的形式,两个参数“检查范围”和“被设置的标记”均为TCP标记的列表,各标记之间以逗号分割。“检查范围”告诉Iptables需要检查数据包的哪几个标记,“被设置 的标记”则明确匹配对应只为1的标记。【SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对】
拒绝从外网接口eth1直接访问防火墙本机的数据包,但是允许响应防火墙TCP请求的数据包进入;
iptables�CP INPUT DROP
iptables�CI INPUT�Ci eth1�Cp tcp--tcp-flags SYN,RST,ACK SYN�Cj REJECT
iptables -I INPUT -i eth1 -p tcp ! --syn -j ACCEPT
(注:--syn同等于:--tcp-flags SYN,ACK,FIN SYN,详情可以man iptables)
6. ICMP类型匹配:ICMP类型可以使用字符串或数字代码,例如“Echo-Request”(数字代码为8),“Echo-Reply”(数字代码为0),“Destination-Unreachable”(数字代码为3),分别对应ICMP协议的请求、回显、目标不可达数据。
禁止其它主机ping防火墙主机,但是允许防火墙ping其它主机(允许接收ICMP回应数据)。
iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type Destination-Unreachable -j ACCEPT
7. 显示条件匹配:这种匹配功能需要额外的内核模块提供,因此需要手工指定匹配方式,在Iptables命令中使用“-m 模块关键字”的形式调用显示匹配,当然还需要指定匹配内容。
a. MAC地址匹配:例如禁止转发来自MAC地址为00:01:12:AA:3F:DD的主机数据包
iptables�CA FORWARD�Cm mac�Cmac-source 00:01:12:AA:3F:DD�Cj DROP
b. 多端口匹配:Iptables中使用“―dports 端口列表”,“―sports 端口列表”的形式对应源端口地址列表、目标端口地址列表。
允许防火墙本机开放TCP端口20、21、25、110及被动模式FTP端口1250~1280
iptables�CA INPUT�Cp tcp�Cm multiport�Cdports 20,21,25,110,1250:1280�Cj ACCEPT
c. 多IP地址匹配:Iptables中使用“--src-range IP地址范围”“--dst-range IP地址范围”的形式对应源IP地址范围、目标IP地址范围。
禁止转发IP地址为192.168.1.1~192.168.1.10的TCP数据包
iptables�CA FORWARD�Cp tcp�Cm iprange�Csrc-range 192.168.1.1-192.168.1.10�Cj DROP
d. 状态匹配:常见的数据包状态包括NEW(与任何连接无关的)、ESTABLISHED(响应请求或已建立连接的)和RELATED(与已有连接相关的)
禁止转发与正常TCP连接无关的非--syn请求数据包(如网络中存在一些非法攻击数据包)
iptables�CA FORWARD�Cm state�Cstate NEW�Cp tcp !�Csyn�Cj DROP
防火墙规则的导入、导出
直接执行iptables-save命令时,会把当前设置的防火墙规则信息输出到终端。通常情况下,可以使用重定向将信息保存为指定的配置文件,结合系统默认提供的Iptables服务脚本,可以自动加载位置于/etc/sysconfig/iptables文件中的规则配置。
使用iptables-restore命令,可以从已保存的配置文件中导入Iptables规则(该文件必须是使用Iptables-save命令导出的配置数据)。