首先我们要弄明白,防火墙将怎么对待数据包。这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入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]
这条命令是显示当前有什么已经设置好的防火墙规则,可能的显示结果如下:
ChainINPUT (policy ACCEPT) target prot opt source destination
ChainFORWARD (policy ACCEPT) target prot opt source destination
ChainOUTPUT (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/network] [--dport ports] [-j ACCEPTDROP]
以上是iptables的基本语法
A是添加的意思
I是播入的意思
io 指的是数据要进入或出去所要经过的端口,如eth1 eth0pppoe等
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地址传来的数据我们可以这样写
iptables -A INPUT -i eth1 -p tcp -s 192.168.2.6 -j ACCEPT
3如果我们要拒绝来自己192.168.2.0/24这个网的telnet连接
iptables -A INPUT -i eth1 -p udp -s 192.168.2.0/24
--sport 23 -j DROP
4.删除INPUT链中第二条规则
iptables -D INPUT 2