iptables介绍
iptables 规则
表和链关系
匹配规则
iptables 常用命令选项
iptables:
一:iptables介绍
如果linux系统连接到因特网或LAN服务器或连接LAN和因特网的代理服务器,则该系统有利于在linux系统上更好控制IP信息过滤和防火墙配置防火墙在做信息包过滤决定时.有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,
而这些表集成在linux内核中.在信息包过滤表中,规则被分组放在我们所谓的链中.而netfilter/iptables IP信息包过滤系统是一款功能强大的工具,可用于添加.编辑和移除规则.
状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
另外,netfilter/iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
防火墙分类: 主机防火墙,网络防火墙
主机防火墙:针对单个主机,工作在内核中的TCP/IP栈上,一般为软件防火墙
网络防火墙:针对多台主机,工作网络边缘,一般为硬件防火墙
网络防火墙分类: 网络层防火墙 应用层防火墙
在internet中,企业通过架设各种服务器系统为用户提供丰富多彩的网络应用,例如web网站,电子邮件系统,FTP服务器,数据库系统等.那么如何来保护这些特定的服务,过滤企业不需要的访问甚至是恶意的入侵呢?试用防火墙正是强有力的防护措施之一.
1.linux防火墙基础
作为隔离内网,过滤非法数据的有力屏障,防火墙通常按实现环境的不同分为硬件防火墙和软件防火墙.硬件防火墙是功能专一的硬件设备,具有比较全面的功能,其工作效率高,但是价格贵,通常只应用于非常重要的主干网络节点.而软件防火墙的功能是由操作系统或软件程序实现的,可以在linux或者windows等系统平台构建软件防火墙.软件防火墙的价格优势比较明显,配置也相对灵活,如果设置得当,同样可以实现硬件防火墙具有的功能和效率.Internet中有大量的企业网络在试用linux系统搭建软件防火墙
1.1 linux防火墙体系主要工作在网络层,针对TCP/IP数据包过滤和限制,属于典型的包过滤防火墙(或称为网络防火墙).linux的防火墙体系基于内核编码实现,因此具有非常稳定的性能和高效率,也因此被更加广泛采纳和应用.
LINUX 防火墙发展历史
linux内核从很早的时候就实现了网络防火墙的功能,并为用户提供了管理防火墙规则的命令工具.
在2.0版本的内核中,包过滤机制是ipfw,管理防火墙规则的命令工具是ipfwadm.
在2.2版本的内核中,包过滤机制是ipchain,管理防火墙规则的命令工具是ipchains.
在2.4版本的内核开始,包过滤机制是netfilter,管理防火墙的命令工具是iptables.
本文以iptables作为主要命令工具,学习linux防火墙的配置和试用
netfilter和iptables
netfilter:指的是linux内核实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(Kernel Space,又称内核空间)的防火墙体系
iptables:指的是管理防火墙的命令工具,程序通常位于/sbin/iptables,属于"用户态"(User Space,又称用户空间)的防火墙体系.
1.2 iptables的规则表 链结构
iptables的作用在于为包过滤的实现提供规则,通过各种不同的规则,告诉netfilter对来自有些源.前往某目的地或具有某些协议特征的数据包应该如何处理.为了更方便地组织和管理防火墙策略,iptables采用了"表"和"链"的分层结构.每个规则"表"相当于内核空间的一个容器,根据处理数据包的时机不同,表容器内包挂不同的规则"链".针对数据包的各种防火墙规则,按顺序依次放入对应的规则"链"中.
规则表:
安装防火墙策略的不同用户,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现.
filter表,包含三个规则链: INPUT,FORWARD,OUTPUT.
filter表对应的内核模块为: iptable_filter
NAT表,包含三个规则链: PREROUTING,POSTROUTING,OUTPUT.
nat (Network Address Translation,网络地址转换)表主要用户修改数据包的IP地址 端口号等信息
nat 表对应的内核模块为 iptable_nat.
mangle表主要用户修改数据包的TOS (Type of Service,服务类型). TTL (Time to live)
表和链关系
netfilter表 链结构四.表:filter,NAT,mangle.raw
filter:筛选过滤
nat:端口映射,地址映射
mangle:修改特定数据包
raw:有限级最高,设置RAW时一般是为了不再让iptables做数据包的连接跟踪
处理,提高性能
四表等级由高到低排列:raw --> man'gle-->nat-->filter
五链:PRETOUING INPUT FORWARDS OUTPUT POSTROUTING
PREROUTING:路由前
INPUT:进入用户进程空间
OUTPUT:进入内核空间
FOEWARDS:内核空间中转发
POSTROUTING:路由后
FORWARD:filter mangle
INPUT:filter mangle
OUTPUT:filter mangle nat
PREROUTING: mangle nat
POSTROUTING: mangle nat
iptables 规则
通:默认为堵.只对能识别的进行放行
堵:默认为通.只对能识别的进行阻塞
处理机制
DROP:丢弃
REJECT:直接拒绝
ACCEPT:接受
SNAT:静态NAT
DNAT:动态NAT
RETURN:返回调用链
格式: -j 处理机制
例如: -j ACCEPT
匹配规则
条件匹配: a通用匹配b扩展匹配c扩展匹配
通用匹配:
-s: 匹配原地址,可以IP,也可以网络地址;可以使用!操作取反,!172.16.0.0/16;
-s 相当于 --src,或 --source
-d:匹配目标地址
-p:匹配协议,通常只使用{TCP|UDP|ICMP}三者之一
-i: 数据报文流入的接口;通常只用于INPUT FORWARD和PREROUTING
-o:流出的接口,通常只能用于OUTPUT FORWARD POSTROUTING
扩展匹配
1.隐含匹配:试用-p {tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展
-p tcp
--dport m[-n]: 匹配的目标端口,可以是连接的多个端口;
--sport:源
--tcp-flags rst,syn,ack,fin sync(等同于 --syn)
例子:放行来自于172.16.0.0/16网络的主机对本机ssh服务的请求;
iptables --A INPUT s 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
iptbales -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEP
放行本机的tftp服务:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp --dport 69 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p udp --dport 69 -j ACCE
dns的udp 53端口
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 172,16,100,7 -d 172.16.0.0/16 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p tcp --dport 53 -j ACCEPT
iptables -A INTPUT -d 172.16.100.7 -p tcp --sport 53 -j ACCEPT
-p icmp
--icmp-type
8 ping 请求
0 ping 应答
例子:放行ping其它主机
ping其他主机的规则
iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT
还有其它主机的ping规则
iptables -A OUTPUT -d 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT
扩展匹配
2.显式夸张:必须明确指定的扩展模块
-m:扩展模块名称 --专用选项1 --专用选项2
multiport:多端口匹配,一次指定多个离散端口
--sport port[,port|,port:port]
--dport
例子:
iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dport 22,80 -j ACCEPT
iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --dport 22,80 -j ACCEPT
iprange: ip地址范围
[!] --src-range from [-to]
[!] --dst-range from [-to]
例子:
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1- 172.
iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16
time:指定时间范围
--datestart YYYY [-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY [-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!] --weekdays day[,day]
例子:
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --
iptables -A OUTPUT -s 172.16.100.7 -P tcp --sport 901 -j ACCEPT
string:字符串匹配
--algo {bm|kmp}: 字符匹配查找时使用算法
--string "STRING":要查找的字符串
--hex-string "HEX-STRING":要查找的字符,先编码成16进制格式
conlimit: 每IP对指定服务的最大并发连接数:
[!] --connlimit-above [n] 如:15
limit: 报文速率控制
--limit #[/second/|minute/hour|/day]
--limit-burst #峰值速率
黑客工具: hping3: 安装此包,做测试
hping -c 1000 -i u1000 172.16.100.7
state:状态匹配
--state
NEW
ESTABLISHED
RELATED
INVALID
法则:
1.对于进入的状态为ESTABLISHED都应该放行;
2.对于出去的状态为ESTABLIESHED都应该放行;
3.严格检查进入的状态为NEW的连接:
4.所有状态为INVALIED都应该拒绝
iptables 常用命令选项
创建删除自定义的规则链
iptables [-t table] -N chain
创建一条自定义的规则连, -t table 指定对应的表名可省略
例如: iptables -N coming
iptables [ -t table ] -X chain
删除一条自定义的规则链,-t table 指定对应的表名可省略
iptables -X coming
修改自定义链名
iptables [-t table] -E old-chain-name new-chain-name
为链指定默认规则
iptables [ -t table ] -P chain target
iptables -t filter -P INPUT ACCPET 为filter表中的INPUT链指定ACCEPT规则
iptables [-t table] {-F|-L|-Z [chain [rulenum]][options...]}
-F :清空链中的规则,规则有编号在链中自上而下,从1开始
-L: 列出表中的所有规则
-n数字格式显示IP和端口
-v以详细格式显示
-vv 更详细的格式显示
-x exactly,精确值 不执行单位换算
--line-number 显示个规则的行号
-Z 清零
iptables [-t table ] {-A|-D} chain rule-specification
iptables -A OUTPUT -s 192.168.1.111 -d 192.168.0.0/16 -p icmp --icmp-type 0 -j ACCEPT
iptbles [-t table ] -D chain rulenum
删除一个规则链
iptables -D OUTPUT 1
常用规则命令:
删除规则
iptbles [-t table] -D chain rulenum
插入规则
iptables [-t table ] -I chain [rulenum] rule-specification
替换指定规则
iptables [-t table] -R chain rulenum rule-specification
只显示指定链上的规则添加命令:
iptables [-t table] -S [ chain [rulenum]] start时也会读取此文件中的内容以设置规则
保存规则
service iptables save
iptables -save > /etc/myiptbles;
iptables -F 清空所有链中的规则;
iptables-restore < /path/tp/some-rulrfile;重读该文档中的规则,规则又恢复了