要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入、离开或者经过我们的计算机。
首先我们要弄明白,防火墙将怎么对待这些数据包。这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入INPUT链,从我们的计算机发出的数据包会经过OUTPUT链,如果一台计算机做一个网络的网关(处于内网和外网两个网络连接的两台计算机,这两台计算机之间相互通讯的数据包会经过这台计算机,这台计算机即相当于一个路由器),可能会有很多数据经过这台计算机,那么这些数据包必经FORWARD链,FORWARD链即数据转发链。明白了这些“链”的概念我们才能进一步学习使用iptables。
现在我们再来分析一下iptables规则是如何工作的,假如我们要访问网站www.yahoo.com,我们要对www.yahoo.com发出请求,这些数据包要经过OUTPUT链,在请求发出前,Linux的内核会在OUTPUT链中检查有没有相应的规则适合这个数据包,如果没有相应的规则,OUTPUT链还会有默认的规则,或者允许,或者不允许(事实上,不允许有两种,一种是把请求拒绝,告诉发出请示的程序被拒绝;还有一种是丢弃,让请求发出者傻等,直到超时)。如果得到允许,请求就发出了,而www.yahoo.com服务器返回的数据包会经过INPUT链,当然,INPUT链中也会有相应的规则等着它。
下面我们介绍几个iptable的命令:
iptables -L [-t filter]
这条命令是显示当前有什么已经设置好的防火墙规则,可能的显示结果如下:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
从这里我们可以看出,iptables有三个链分别是INPUT、OUTPUT和FORWARD。其中:
INPUT 是外部数据要进入我们主机的第一外关卡(当然你前面也可以再加硬件防火墙)
OUTPUT 是你的主机的数据送出时要做的过绿卡
FORWARD 是转发你在NAT时才会用到
要设置iptables主要是对这三条链进行设置,当然也包括-nat的另外三个链,我们以后再说。
你要用iptables你就得启动它,启动命令:service iptables restart
iptables的默认设置为三条链都是ACCEPT,如下:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
以上信息你可以用iptables -L看到
总体来说iptables可以有二种设置
1.默认允许,拒绝特别的
2.默认拒绝,允许特别的
二者都有自己的特点,从安全角度看个人偏向于第二种,就是默认拒绝,允许特别的。但iptalbes默认是第一种,默认允许,拒绝特别的。
你可以用命令改变默认值来达到我们的要求,命令如下:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
你再用iptables -L查看一下就会觉得默认值以改了。
先来谈炎几个参数XZFL
-F 清除规则
-X 清除链
-Z 将链的记数的流量清零
一般来说,在创建访问规则时,都会将原有的规则清零,这是一个比较好的习惯,因为某些规则的存在会影响你所建的规则。
基本语法:
iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD] [-io interface]
[-p tcp,udp.icmp,all] [-s ip/nerwork] [--sport ports]
[-d ip/netword] [--dport ports] [-j ACCEPT DROP]
以上是iptables的基本语法
A 是添加的意思
I 是播入的意思
io 指的是数据要进入或出去所要经过的端口,如eth1、eth0、pppoe等
p 你所要指定的协议
-s 指源地址,可以是单个IP,如:192.168.2.6,也可以是一个网络,如:192.168.2.0/24,还可以是一个域名,如163.com,如果你填写的是域名,系统会自动解析出他的IP并在iptables里显示
--sport 来源端口
-d 同-s相似,只不过他指的是目标地址,也可以是IP、域名和网络
--dport 目标端口
-j 执行参数,ACCEPT、DROP
注意:如果以有参数存在,则说明全部接受:
1 如我要来自lo接口的数据全部接受,我们可以写成这样:
iptables -A INPUT -i lo -j ACCEPT
2 如果我们想接受192.168.2.6这个IP地址传来的数据我们可以这样写:
iptablse -A INPUT -i eth1 -p tcp -s 192.168.2.6 -j ACCEPT
3 如果我们要拒绝来自192.168.2.0/24这个网的telnet连接:
iptablse -A INPUT -i eth1 -p udp -s 192.168.2.0/24 --sport 23 -j DROP