首先我们要弄明白,防火墙将怎么对待 这些数据包这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入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 如我要来自己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