Linux防火墙
linux下防火墙工作在网络层, 就是对TCP/IP数据包进行过滤,属于包过滤防火墙,包过滤机制是:netfilter, 管理防火墙规则命令工具:iptables
一.iptables的规则表、链结构
iptables管理4个表、以及他们的规则链:
1.filter
用于路由网络数据包
- INPUT 网络数据包流向服务器
- OUTPUT 网络数据包从服务器流出
- FORWARD 网络数据包经服务器路由
2.nat
nat,用于NAT表.NAT(Net Address Translation )是一种IP地址转换方法。
- PREROUTING, (prerouting, pre-route,预路由, 到达前)网络数据包到达服务器时可以被修改
- POSTROUTING, (postrouting, post-route,流出前) 网络数据包在即将从服务器发出时可以被修改
- OUTPUT 网络数据包流出服务器
3.mangle
mangle,用于修改网络数据包的表,如TOS(Type Of Service),TTL(Time To Live),等
- INPUT 网络数据包流向服务器
- OUTPUT 网络数据包流出服务器
- FORWARD 网络数据包经由服务器转发
- PREROUTING 网络数据包到达服务器时可以被修改
- POSTROUTING 网络数据包在即将从服务器发出时可以被修改
4.raw
raw, 用于决定数据包是否被跟踪机制处理
- OUTPUT 网络数据包流出服务器
- PREROUTING 网络数据包到达服务器时可以被修改
二.数据包过滤匹配流程
- 规则表之间的优先顺序:raw>mangle>nat>filter
- 规则链之间的优先顺序:入站数据流向>转发数据流向>出站数据流向
三.管理和配置Iptables规则
1.基本语法
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-] 目标动作或跳转
- 表名链名用于指定iptables命令所做对象,未指定默认filter表
- 命令选项指于管理iptables规则的方式(插入、删除··);
- 条件匹配指定对条件的符合而处理;
- 目标动作或跳转指定数据包的处理方式。
2.管理iptables规则
2.1控制选项
-A在链尾添加一条规则-D从链中删除一条规则-I在链中插入一条规则-R修改、替换某链的某规则-L列出某个链上的规则-F清空链,删除链上的所有规则-N创建一个新链-X删除某个规则链-P定义某个链的默认策略-n数字形式显示结果-v查看规则列表详细信息-V查看iptables命令工具版本-h查看命令帮助信息-line-numbers查看规则列表,显示顺序号
2.2增加、插入、删除和替换规则
iptables [-t表名] <-A | I | D | R> 链名 [规则编号] [-i | o 网卡名称] [-p 协议类型] [-s 源IP地址 | 源子网] [--sport 源端口号] [-d目标IP地址 | 目标子网] [--dport目标端口号] <-j动作>
参数说明如下。
[-t表名]:定义默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。-A:新增加一条规则,该规则将会增加到规则列表的最后一行,该参数不能使用规则编号。-I:插入一条规则,原本该位置上的规则将会往后顺序移动,如果没有指定规则编号,则在第一条规则前插入。-D:从规则列表中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。-R:替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号。<链名>:指定查看指定表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。[规则编号]:规则编号用于插入、删除和替换规则时用,编号是按照规则列表的顺序排列,规则列表中第一条规则的编号为1。[-i | o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出。网卡名称可以使用ppp0、eth0和eth1等。[-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP和ICMP等。[-s 源IP地址 | 源子网]:源主机的IP地址或子网地址。[--sport 源端口号]:数据包的IP的源端口号。[-d目标IP地址 | 目标子网]:目标主机的IP地址或子网地址。[--dport目标端口号]:数据包的IP的目标端口号。<-j动作>:处理数据包的动作,各个动作的详细说明可以参考表10-3。
(1).插入
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
(2).查看
查看Filter表的INPUT链中的所有规则,同时显示顺序号
[root@xx ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:8070
2 ACCEPT tcp -- anywhere anywhere tcp dpt:8090
3 ACCEPT tcp -- anywhere anywhere tcp dpt:ospf-lite
4 ACCEPT tcp -- anywhere anywhere tcp dpt:cslistener
5 ACCEPT tcp -- anywhere anywhere tcp dpt:irdmi
6 ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
7 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
8 ACCEPT icmp -- anywhere anywhere
9 ACCEPT all -- anywhere anywhere
10 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
11 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
查看filter表各链中所有规则的详细信息,以数字形式显示地址和端口信息
[root@lingzhixun ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
14 1780 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8070
14 1780 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8090
49 5978 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8899
251 42782 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000
2793 174K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:
