IPTABLES

Iptables是基于内核的防火墙,也就是说它是在内核中生效的,用户无法直接对其进行操作。所以Iptables就在内核中开了个口,便于我们进行操作。这些口的名字就是表,不要小看了Iptables中的表,防火墙中的规则都是通过表来设置实现的,在表下又定义了规则链来控制数据包。Iptables中有的文件所在,一个         是/etc/sysconfig/iptables它是保存规则的文件,在Iptables中添加了规则会立即生效,但是不会保存,再重启就没有了,所以一定要记得保存规则;另一个是/etc/sysconfig/iptables-config它是向Iptables脚本提供配置文件的文件。

Iptables自带的有三个表:Filter、Nat、Mangle;

        自带的链有五个:Input、Output、Forward、Prerouting、Postroouting。

主要知识点

那么Iptables的表和链具体怎么工做呢?

表:

  filter负责过滤数据包,包括的规则链有,input,output和forward;

  nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;

  mangle表则主要应用在修改数据包内容上,用来做流量×××的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;

链:

  input匹配目的IP是本机的数据包,也就是进入本机的数据包请求;

  output匹配源IP是本机的数据包,也就是本机出去的数据包;

  forward匹配流经本机的数据包,也可以看做是由本机转发的数据包;

  prerouting就是处理还没有进行路由选择的数据包;

  postrouting处理已经进行了路由选择后的数据。

Iptables的工作过程大致是这样的:当本机接到数据请求的时候,先判定其属于哪个表的管理范围,而后确定此数据符合表中哪条链的规则,如果确定符合某规则,就由此规则中我们指定好的动作来处理,如果数据请求不属于任何表的管理范围,那么就正常接收数据包。

主要参数及用法

-A 附加规则,默认是附加到尾部

-I 插入规则,默认是插入到首部

-D 删除规则,其后也可附带数字,表示删除第几条规则

-R 替换规则,其后同样可附带数字,表示替换第几条规则

-F 清空链内的规则,全部清空,后若跟数字代表清空第几条

-N 新建用户自定义的链

-X 删除链,这里只是删除自己建的空链

-E 重命名链

-P 指定默认规则

-Z 清空计数器,每条规则都有来两个计数器,一个是被匹配到的所有数据包的个数;一个是被匹配到的所有数据包的大小

-T 指定要操作的表,默认的表是Filter

-L 查看,列出Iptables的规则;还有一些子选项:-n 以纯数字方式显示;-v显示详细规则的计数器,-v越多显示越详细;--ilne-numbers 排序显示

-s 指定源地址

-d 指定目的地址

-p 匹配协议,如tcp、udp、icmp等。-p选项还支持各种匹配:先指定协议,后跟类型如 --sport源端口、--dport目的端口等;还有一种显示扩展,用-m来指定,如iprange(ip的扩展)limit(指定速率)string(指定匹配的字符串)time(指定时间限制)muitipost(指定协议宽口) 等

-i 数据包的流入接口,作用在Input、Forward、Prerouting

-o 数据包的流出接口,作用在Output、Forward、Postrouting

-j 处理动作,基本动作有:accept 就受、drop拒绝、reject直接拒绝、snat源地址转换、dnat目标地址转换

Iptables的语法:

 iptables [-t 表名] 参数命令 (可附带子命令) 链名 匹配条件 -j 动作

这里要注意的是 表名一定要小写,链名一定要大写。

参数具体用法:

iptables -t指定表 filter -A加规则 INPUT链 -s 源IP -d 目的地址 -j 动作

#iptables -F 删除所有链

# iptables -A INPUT -d 192.168.1.1 -p tcp --dpor 80 -j DROP  拒绝别人访问本机192.168.1.1的80端口,其中-s省略了就表示所有主机,DROP表示拒绝

#iptables -A INPUT -s 192.168.2.1 -d 192.168.1.1 -p icmp --icmp-type 8 -j DROP  拒绝192.168.2.1ping本机,其中协议是icmp类型是8代表的是ping中的请求。

#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#iptables -A Output -p tcp --sport 22 -j ACCEPT这两条规则定义了ssh