要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入、离开或者经过我们的计算机。
首先我们要弄明白,防火墙将怎么对待这些数据包。这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入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 restartiptables的默认设置为三条链都是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 如我要来自己l0接口的数据全部接受,我们可以写成这样:
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
|