IPTABLES/netfilter(http://www.netfilter.org) 其实大多数人都认为iptables是linux系统上的一个服务,其实不是的. 我们linux系统上的服务比如说httpd服务在启动起来的时候,是不是在后台启动一个相应的服务进程且在网卡上监听一个端口,而iptables却不然,那么iptables到底是什么呢?其实iptables只是一个工具而已.我们的linux系统有用户空间,和内核空间,而iptables有两个组件,一是netfilter, netfilter组件只是用来过滤防火墙规则,及作出相应的处理机制的,它是集成在内核中的一部分,也就是说它是工作在内核空间的,那么大家都知道用户是不可能直接跟内核空间打交道的,那么netfilter只是工作在内核空间对规则进行处理的,那么规则从何而来呢? 是从iptables的第二个组件iptables而来的,我们上面说了IPTABLES只是一个工作在用户空间的一个工具而已,那么用户就使用这个工具的一个命令来跟工作在内核空间中的netfiter组件打交道的.其实IPTABLES防火墙就是这样的.
IPTABLES常用的表和链有三个filter表 nat表 mangle表, 和五个链 INPUT链 OUTPUT链 FORWARE链 POSTROUTING链 PREROUTING链, 下面来介绍下它们的各个功能呢个功能,
filter表主要是过滤数据包的,IPTABLES几乎所有的数据包过滤都在此表中实现的,filter表也是IPTABLES中默认的表,此表中还包含三个链如下
1.1 INPUT链
过滤所有的目标地址是本机的数据包
1.2 OUTPUT链
过滤所有从本机出去的数据包
1.3 FORWORD链
过滤所有从本机路过的数据包
nat表主要是用于做网络地址转换的(NAT) 在IPTABLES中可以做SNAT(源地址转换),DNAT(目标地址转换),PNAT(即跟SNAT差不多,不一样的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,当使用ppp 或pppoe的方式连接互联网的时候一般适应这中) 。 nat表中包含两个链如下
2.1 PREROUTING链
在数据包到达防火墙的时候改变目标地址 DNAT应用于此链.
2.2 OUTPUT链
可以改变本地产生的数据包的目标地址
2.3 POSTROUTING链
在数据包离开防火墙的时候改变源地址,SNAT应用于次链
mangle表主要是修改数据包头部信息的,此表中包含以下5条链
3.1 PREROUTING链,
在数据包进入防火墙之后,也称为路由前,
3.2 POSTROUTING链,
在数据包确定目标地址后,也称为路由后,
3.3 OUTPUT链
从本机出去的时间包路由前
3.4 INPUT链
数据包进入本机后,路由后
3.5 FORWARD链
第一次路由判断之后,最后一次路由判断之前改变数据包
IPTABLES的状态跟踪连接有4种,分别是,NEW,ESTABLISHED,RELATED,INVALID,除了从本机出去的数据包有nat表的OUTPUT链处理外,其他说有的状态跟踪都在nat表中的PREROUTING链中处理,下面来说下4种状态是什么,
1,NEW状态
NEW状态的数据包说明这个数据包是收到的第一个数据包,
2,ESTABLISHED状态,
只要发送并接到应答,一个数据包的状态就从NEW变为ESTABLEISHED,而且该状态会继续匹配这个连接后继数据包,
3,RELATED状态
当一个数据包的状态处于ESTABLSHED状态的连接有关系的时候,就会被认为是RELATED,也就是说一个链接想要是RELATED状态,首先要有一个ESTABLISHED的连接,
4,INVALID状态
不能被识别属于哪个连接状态或没有任何关系的状态,一般这中数据包要被拒绝的
iptables在RHEL的系统上默认安装的, IPTABLES的命令选项主要分为这么几大类,规则管理,链管理,默认管理,查看,匹配条件,处理动作,基本应该就这些了吧,下面来一一说名,
#iptables -A 添加一条新规则
#iptables -I 插入一条新规则 -I 后面加一数字表示插入到哪行
#iptables -D 删除一条新规则 -D 后面加一数字表示删除哪行
#iptables -R 替换一条新规则 -R 后面加一数字表示替换哪行
#iptables -F 清空链中的所有规则
#iptables -N 新建一个链
#iptables -X 删除一个自定义链,删除之前要保证次链是空的,而且没有被引用
#iptables -E 重命名链
3.默认管理类
#iptables -P 设置默认策略
#iptables -L 查看规则 -L还有几个子选项如下
#iptables -L -n 以数字的方式显示
#iptables -L -v 显示详细信息
#iptables -L -x 显示精确信息
#iptables -L --line-numbers 显示行号
5.1 基本匹配
条件匹配也可以使用 ! 取反
-s 源地址
-d 目标地址
-p 协议{tcp|udp|icmp}
-i 从哪个网络接口进入,比如 -i eth0
-o 从哪个网络接口出去,比如 -o eth0
5.2扩展匹配
5.2.1隐含扩展匹配
-p {tcp|udp} --sport 指定源端口
-p {tcp|udp} --dport 指定目标端口
5.2.2显示扩展匹配
-m state --state 匹配状态的
-m mutiport --source-port 端口匹配 ,指定一组端口
-m limit --limit 3/minute 每三分种一次
-m limit --limit-burst 5 只匹配5个数据包
-m string --string --algo bm|kmp --string "xxxx" 匹配字符串
-m time --timestart 8:00 --timestop 12:00 表示从哪个时间到哪个时间段
-m time --days 表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq 表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配,
6,处理动作类
-j ACCEPT 允许
-j REJECT 拒绝
-j DROP 拒绝并提示信息
-j SNAT 源地址转换
-j DNAT 目标地址转换
-j REDIRECT 重定向
-j MASQUERAED 地址伪装
-j LOG --log-prefix "说明信息,自己随便定义" 记录日志
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。