Linux 防火墙——Iptables
1、防火墙分类:
A、硬件防火墙和软件防火墙
●硬件防火墙国外的有cisco PIX、ASA,juniper netscreen
●国内的有联想、天融信等
B、软件防火墙:Microsoft ISA和Linux下的iptables
用iptables配置防火墙能达到硬件防火墙一样的功能,对于小企业用iptables是理想的选择。
对于连接到网络上的Linux 系统来说,防火墙是必不可少的防御机制,它只允许合法的网络流量进出系统,而禁止其它任何网络流量。为了确定网络流量是否合法,防火墙依靠它所包含的由网络或系统管理员预定义的一组规则。这些规则告诉防火墙某个流量是否合法以及对于来自某个源、至某个目的地或具有某种协议类型的网络流量要做些什么。
2、什么是iptables
iptables是一种基于包过滤的防火墙。
包过滤:网络流量由IP信息包以流的形式从源系统传输到目的地系统的一些小块数据组成。这些信息包有包头,即在每个包前面所附带的一些数据位,它们包含有关信息包的源、目的地址及协议类型等信息。防火墙根据一组规则检查IP包的头部,以确定接受哪个包或拒绝哪个包。这一过程称之为包过滤。Iptables需要2.4以上版本的内核支持。
Iptables只是一个管理内核包过滤的工具,可以加入、修改或删除核心包过滤表(链)中的规则。实际上真正来执行这些过滤规则的是netfilter(Linux核心中一个通用架构)及其相关模块(如iptables模块和nat模块)。
IP信息包过滤系统由两个组件net filter和iptables组成
net filter组件也称为内核空间(kernel space),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables:是一种工具,也称为用户空间(user space),它使的添加、修改和删除信息包
过滤表中的规则变得更容易。
3、netfilter的工作原理
netfilter是Linux核心中一个通用架构,它提供了一系列的“表”(tables),每个表由若干“链”(chains)组成,而每条链中可以有一条或数条规则(rules)组成。我们可以这样来理解,netfilter 是表的容器,表是链的容器,而链又是规则的容器。
系统缺省的表为"filter",该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。
当有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下三种情况:
1)、如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
2)、如果数据包的目的地址不是本机,也就是说,这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
3)、如果数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。
4、数据包流向图示
数据包NAT 否filter NAT
---------->PREROUTING----->路由走向判断--------->FORWARD-------->POSTROUTING--------> 目标地址转换| | 源地址转换
是|到本机来|
| |
filter | INPUT filter | OUTPUT
| |
| |
本机处理————————————
5、Iptables中的表和链
iptables包含下面三种表
1)、filter table,过滤表
2)、nat table,用于地址转换
3)、mangle table,俗称矫正表,我们不做过多讨论
iptables的链
1)、INPUT链:用于处理输入包,即目的地是本地的包。
2)、OUTPUT链:用于处理输出包,即由本地生成的包。
3)、FORWARD链:用于处理转发包,即不是本地产生的且目的地也不是本地包。
4)、PREROUTING链:用于目标地址的转换。
5)、POSTROUTING链:用于源地址的转换
filter table包含INPUT、FORWARD、OUTPUT链
nat table包含PREROUTING、POSTROUTING、OUTPUT链
6、Iptables的语法格式
iptables [-t table] command [match] [target/jump ]
Command:告诉程序该做什么,如:插入或删除一个规则。
Match:细致地描述了包的某个特点,以使这个包区别于其他包。在这里可以指定包的源IP地址、网络接口、端口、协议类型等。
Target/jump:通过对数据包与所有规则的匹配结果,内核将做出相应的处理。
1)command
●#iptables -F = --flush #清除所有规则
●#iptables -X = --delete-chain #清除所有自定义规则
●#iptables - L = --list #列出当前所有规则
●#iptables -A = --append #在所选链的尾追加一条规则
●#iptables -D = --delete #从所选链中删除一条规则
●#iptables –R = --replace #在所选链中替换一条匹配的规则
●#iptables –I = --insert #插入规则
●#iptables –P = --policy #指定缺省规则
2)match
●根据源地址进行匹配的–s [!] addr[netmask]
●根据目的地址进行匹配-d [!] addr[netmask]
●根据协议进行匹配的–p [!] icmp | [!] tcp | [!] udp
●根据端口进行匹配,这时必须指定协议,必须是tcp或udp协议。
●根据数据包源端口进行匹配的--sport [!] port --source-port = --sport
●根据封包的目的端口进行匹配--dport [!] port --destination-port = --dport
●根据包进入本地所使用的网络接口来匹配包–i,--in-interface,要注意这个匹配操作只能用于
INPUT、FORWARD和PREROUTING这三个链
●根据包离开本地所使用的网络接口来匹配包-o,--out-interface,只能用于FORWARD, OUTPUT
and POSTROUTING
3)target/jump
●ACCEPT #接受,等于不进行过滤
●DROP #丢弃,别人可以判断出您的系统使用了防火墙
●REJECT #弹回,貌似跟本没有打开这端口。
7、Iptables实例
开启server 端的telnet pop3 smtp http ssh服务
1)思考
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
:当client连接server的telnet服务时,client和server各使用什么端口
2)使得只有192.168.16.x和192.168.16.y 的机器可以连接您的pop3服务器。但同一
网段的其他人不行。
3)使用lsmod|grep ip命令,查看内核中iptables modules 的载入情况
4)禁止某一人ping到你,但别人可以
5)使得你不能telnet 到192.168.16.50 ,分别用INPUT 和OUTPUT方法实现。
6)理解下面的脚本
#!/bin/bash
iptables-F;iptables-X; IP=”192.168.16”
iptables -A INPUT -p tcp --dport 110 -s $IP.101 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -s $IP.102 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -s $IP.0/24 -j REJECT
iptables -A INPUT -p icmp -s $IP.101 -j REJECT
iptables - A INPUT -s $IP.101 -p tcp—dport 23 -j REJECT
iptables -A INPUT -s $IP.0/24 -p tcp—dport 23 -j ACCEPT
7)下面脚本的用途
for i in nat filter mangle ;do
iptables -t $i -F
iptables -t $i -X
done
8)设置缺省策略为INPUT 和OUTPUT拒绝全部,但允许你对你自己的ip地址(192和127)进行任何访问。
9)允许1个指定主机访问本地80和22端口,其他不行
10)把默认策略设为drop,允许自己ping 自己,所有人包括自己能访问自己的80端口
11)当默认策略drop以后,能访问别人的80和22端口
8、常用命令
service iptables status #状态
service iptables start #启动
service iptables stop #关闭
service iptables save #保存,重启依然生效
9、对前面学过的服务进行控制,允许一部分人访问,拒绝其他人