一、IPtables 入门简介:+
iptables 是linux 内核集成的IP 信息包过滤系统,如果linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利在linux系统上更好的控制IP信息包过滤和防火墙配置。
防火墙在做信息包过滤时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包是一款功能强大的工具,可用于编辑、添加和移除规则。
二、linux防火墙工具的分类
(1)netifilter(内核空间,kernelspace):是内核的一部分,有一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
(1)位于linux内核中的包过滤功能体系。
(2)称为linux 防火墙的“内核态”。
(2)iptables
(1)位于/sbin/iptables,用来管理防火墙规则的工具
(2)称为linux 防火墙的“用户态”
三、包过滤的工作层次(网络层,针对ip数据包),如下图
四、IPtables 表与链功能详解
注意:当配置iptables 规则时,许多协议都是双向通信。所以需要同时配置输入链和输出链。
五、Iptables 的基本语法:
(1)语法构成
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
如下图所示,禁止ping 包输入到这台主机
(2)数据包的常见控制类型:
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒接通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
(3)添加新的规则:
-A :在链的末尾追加一条规则
-I :在链的开头(或指定序号)插入一条规则
实例如下
(4)查看规则列表:
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号
(5)删除、清空、清除规则
-D //删除链内的指定序列号的一条规则
-F //清空所有规则
-Z //清除链中使用的规则
-
(6)设置默认策略,大写字母P
六、规则的匹配条件:
(1)常见的通用匹配条件:
例子:
iptables -I INPUT ! —p icmp -j ACCEPT // ! 号表示取反
禁止除了ICMP以外的协议可以通信
(2)隐含匹配的条件:
-P // tcp、udp、icmp
--sport //指定源端口
--dport //指定目的端口
-s // 源地址
-d // 目的地址
-i // 数据包进入的网卡
-o // 数据包出口的网卡
例子:
(3)常用的显示匹配条件:
1.多端口匹配: -m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
2.ip范围分配: -m iprange --src-range IP范围
3.mac地址匹配: -m mac --mac-source mac地址
4.匹配状态: -m state --state 连接状态
5. -m limit --limit 3/minutes 每三分钟一次
6. -m limit --limit-burst 5 只匹配五个数据包
7. -mtime--timestart 8:00 --timestop 12:00 表示从哪个时间到那个时间
例子:
保存防火墙规则:
service iptables save
注意:配置INPUT时,要清空filter 表,清空filter表,表示防火墙不起任何作用(相当于关闭),可以设置自己的策略,
七、iptables (企业) 案例分析:
(1)INPUT ACCEPT [0:0] #该规则表示INPUT表的默认策略是ACCEPT;
(2)FORWARD ACCEPT [0:0] #该规则表示FORWARD表的默认策略是ACCEPT;
(3)OUTPUT ACCEPT [0:0] #该规则表示OUTPUT表的默认策略是ACCEPT;
(4)-A INPUT -m state --state ESTABLSHED,RELATED -j ACCEPT #意思是允许进入的数据包只能是刚刚我发出去的数据包回应,ESTABLISHED:已建立的连接状态。RELATED:该数据包与本机发出的数据包有关。
(5)-A INPUT -p icmp -j ACCEPT #允许icmp包进来
-A INPUT -i lo -j ACCEPT #意思是允许本地回环接口在INPUT表的所有数据通信,-i 参数是指定接口,接口就是lo,lo是loopback(本地回环接口)
(6)-A INPUT -j REJECT -reject-with icmp-host-prohibited
-A FORWARD -j REJECT -reject-with icmp-host-prohibited
#这两条意思是表示在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包,并且发送一条 host prohibited的消息给被拒绝的主机。
-m state --state //模糊匹配一个状态
NEW //用户发起一个新连接
ESTABLISHED //对一个新的请求进行回应
RELATED // 两个完整连接之间的相互关系,一个完整连接,需要依赖于另一个完整的连接
INVALID //无法识别的状态
(7)web服务器,开启80端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
(8)邮件服务器,开启25,110端口
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
(9)ftp服务器,开启21 端口:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
(10)DNS服务器,开启53端口
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
(11)允许icmp包通过,也就是允许ping
iptables -A INPUT -p icmp --j ACCEPT
iptables -A OUTPUT -p icmp --j ACCEPT
(12)将本机的8080端口转发至其他主机,主机ip:192.168.1.12,目标主机ip和端口:192.168.1.13:8080,
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.13:8080
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 8080 -j SNAT --to-source 192.168.1.12
echo 1 > /proc/sys/net/ipv4/ip_forward
同时开启端口转发