本文参照鸟哥linux服务器篇,归纳一些知识点。
1.linux的封包过滤软件:
iptables(分析封包的表头数据,根据表头数据与定义的规则决定该封包是否进入主机或者被丢弃)
iptables只是linux防火墙的管理工具,真正实现防火墙功能的是netfilter,它是linux内核中实现包过滤的内部结构。
2.注意定义定于规则时的先后顺序:
如果网络封包进入Rule1进行比对时,若符合Rule1,则会执行Action1动作,不理会后续的Rule2,Rule3.....
3.iptable的表格(table)和链(chain):
iptables顾名思义就是ip表,iptables由多个表(table)组成,每个人表用途都不一样,在每个表中又定义了多个链(chain),通过这些链可以设置相应的规则和策略。
四个表:filter、nat、mangle、raw
五个链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
一、filter表:主要跟进入linux本机的数据包有关,这个是默认的table。
二、nat表:主要与进行来源和目的之间的ip和port的转换,与linux本机无关。
三、mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现Qos。
四、raw表:决定数据包是否被状态跟踪机制处理(应用在那些不需要nat的情况下,以提高性能。如大量访问的Web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度)。
优先级:raw>mangle>nat>filter
一、INPUT链:进来的数据包应用此规则链中的策略。
二、OUTPUT链:外出的数据包应用此规则链中的策略。
三、FORWARD链:转发数据包时应用此规则链中的策略。
四、PREROUTING链:对数据包做路由选择前应用此链中的规则(所有的数据包进来的时候都由这个链处理)
五、POSTROUTING链:对数据包做路由选择后应用此链的规则(所有的数据包出来的时候都先由这个链处理)
下图是各表包含的链:
数据包的流向如下图(常用的filter和nat表的精简图):
A:封包进入linux主机使用资源。
B:封包由linux主机转递,没有使用主机资源,而是向后端主机流动。
C:封包由linux主机发出,例如相应客户端的要求。
4.iptables的语法:
一、规则的观察:
iptables -L -n
-t:后面接table,默认是filter。
-L:列出目前的table规则。
-n:不进行ip和hostname的反查。
iptables-save -t(表名)
二、规则的清除:
iptable [-t table] [-FZX]
-F:清除规则链中已有的条目。
-X:清除所有者自定义的规则链。
-Z:清空规则链中的数据包计算器和字节计数器。
三、定义预设政策(policy):
iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
例子:
iptables -t filter INPUT ACCEPT
即修改的是iptables-save查询的结果。
*filter
:INPUT ACCEPT [321090:366632483]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296527:33324326]
COMMIT
四、针对IP,网域、接口和端口的配置:
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源ip/网域] [ --sport 端口] [-d 目标ip/网域] [ --dport 端口]
-j [ACCEPT|DROP|REJECT|LOG]
-A:新增一条规则
-I:插入一条规则,默认是插入为第一条。-I 3则插入为第三条。
-i:封包所进入的网络接口,例如eth0,lo,需要与INOUT链配合。
-o:封包所出去的网络接口,需要与OUTPUT链配合。
-p:此规则链适用于那种封包格式:tcp、udp、icmp、all
-s:封包的来源。可以指定单纯的ip或包括网域 192.169.0.1 或 192.168.0.1/24
--sport:来源端口号,可以是连续的例如1:1245
-d:封包的目的地,格式同上-s
--dport:目的端口号
-j:后面接的动作,上面依次为接受、丢弃、拒绝、记录
例子:
a、接收192.168.0.0/24的包:iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
b、丢弃192.168.0.0/24访问本机21端口的包:iptables -A INPUT -i eth0 -s 192.168.0.0/24 --dport 21 -j DROP
c、丢弃192.168.0.0/24的1到1024端口访问本机ssh端口:iptables -A INPUT -i eth0 -s 192.168.0.0/24 --sport 1:1024 --dport ssh -j DROP
五、iptables的mac和state模块:
iptables -A INPUT [-m state] [--state 状态]
-m:iptables的外挂模块,常见的有state(状态模块)、mac(网卡mac地址模块)
--state:数据包的状态(减少联机下写一条output规则,再写一条input规则的繁琐),主要有:
INVALID:无效的数据包,例如数据损坏的数据包。
ESTABLISHED:已经联机成功的联机状态。
NEW:想要新建立联机的封包状态。
RELATED:最常用,表示这个数据包跟我们主机发出的数据包有关。
例子:
a、已建立或相关的数据包就予以通过:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
b、局域网的aa:bb:cc:dd:ee:ff 主机开放其联机:iptables -A INPUT -m --mac--source aa:bb:cc:dd:ee:ff -j ACCEPT
六、针对icmp数据包的规则:
iptables -A INPUT [-p icmp] [--icmp--type 类型] -j ACCEPT