一、iptables是什么?
iptables是Linux系统内置的防火墙命令,其实它更像是一个代理,通过它用户可以将其安全设定放置到内核的安全框架里,这个框架就是netfilter,顾名思义,可以理解为网络过滤器,即对从网络上发来的数据包、ip进行检测,确定是接受、拒绝、丢弃还是转发,进而对数据包做出一系列的处理操作。
二、iptables/netfiler工作原理?
在学习网络的时候,我们知道主机之间的通信实际是将封装了目的ip、源ip、端口、各类协议(tcp、udp等)的ip数据包以帧的形式在实际的物理链路上传输到达目的网络的每一个主机,然后由主机检查目的地址是不是自己,如果是则接收处理;不是则丢弃,那么这个检查交付过程又是怎么实现的呢?
这就涉及到netfiler的工作原理,那么netfiler到底是如何工作的呢?
iptables是按照规则来办事的——“如果数据包符合某种规则,就按照规则所指定的行为处理”。由这套规则构建出了链和表两个概念,在linux内核中有四表五链:
链:在防火墙的实现中,就是通过将报文与这些制定的规则相匹配进而来对报文采取相应的处理,所以简单的说,将一系列的规则链接起来就抽象形成了链。
input链:当收到防火墙本地地址的数据包时,应用此链的规则
output链:当向外发送数据包时,应用此链规则
forward链:转发数据包时,应用此链
prerouting链:“路由前”链,处理刚到达本机的数据包,在对数据包做路由选择之前应用此链,如转换数据包中目的ip地址(DNAT)
postrouting链:“路由后”链,在对数据包做路由选择之后应用此链
而表又是什么?对于不同链上肯定会存在功能一致的规则,由此提出了表。
表是相同功能的规则的集合,linux内核为我们提供了四种表,所有的规则都属于这四类表,也即是链中的规则是这四张表中规则的不同组合中,先看一下有哪几类四种表:
filter表:负责过滤功能
net表:实现网络地址转换
mangle表:拆解报文,修改,重新封装
raw表:关闭nat表上启用的连接追踪机制
防火墙就是在内核空间根据这一系列表中的规则来实现数据包的处理和转发。
三、iptables基本命令
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
- table、chain:指明iptabls要操作的表名、链名,未指明时默认使用filiter表
- command :插入I、增加A、删除D、查看等
- CRETIRIA: 匹配条件,指明要操作的数据包的特征
- Action:控制类型,指的是数据包的处理方式,accept、reject、drop
1、查看当前iptables规则
service iptables status
2、查看某表中的规则
iptables --line-number -t 表名 -nL
3、删除规则
iptables -D INPUT 编号
4、添加新入站规则
iptables -A INPUT -s ip地址 -p 协议 --dport 端口 -j 处理方式
5、替换规则
iptables -R INPUT 编号 -s ip地址 -p 协议 --dport 端口 -j 处理方式
四、iptables实例
禁止192.168.1.0子网里所有的客户机上网。
iptables -I FORWARD -s 192.168.1.0/24 -j DROP
不允许192.168.100.0/24网络对80端口访问
iptables -A INPUT -s 192.168.100.0/24 -d 172.16.55.7 -p tcp --dport 80 -j DROP
丢弃错误的Tcp包
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
禁止与192.168.10.1的所有连接
iptables -t nat -A PREROUTING -d 192.168.10.1 -j DROP
设置icmp包过滤,允许每秒1个包,限制触发条件是10个包
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
ps:使用iptables命令操作的规则仅对当前会话有效,规则存在于内存中,如果重启就会丢失规则
总结