在了解iptables之前我们先了解一下 防火墙 的概念:
防火墙(英文:firewall)是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的数据通过。防火墙可以是一台专属的硬件也可以是架设在一般硬件上的一套软件。
在网络中,所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度地阻止网络中的黑客来访问你的网络。
简单理解就是当其他用户想要发送数据包给服务器,就必须经过防火墙才能到达主机,如果没有这一层防火墙保护,那可想而知服务器直接暴露在公网上是多么危险的,当然防火墙也是包含有硬件防火墙和软件防火墙两种,其实有很多硬件防火墙也是利用Linux最小化使用iptables再去加上图形化web界面集成硬件,就成了硬件防火墙。
总体说来,iptables就是由“四表五链”组成。
- 防火墙四表:
filter:过滤,防火墙
nat :network address translation 网络地址转换
mangle:拆解报文,作出修改,封装报文
raw: 关闭nat表上启用的链接追踪机制
- 防火墙五链:
PREROUTING :数据包进入路由之前
INPUT :目的地址为本机
FORWARD :实现转发
OUTPUT :原地址为本机,向外发送
POSTROUTING :发送到网卡之前
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-m:加载其他模块功能;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
- iptables 语法
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> –sport 源端口 <-d 目标IP/目标子网> –dport 目标端口 -j 动作
举例:在全局禁止的状态下
全局禁止# iptables -t filter -P INPUT DROP
举个例子# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
解析:防火墙只允许tcp协议80端口访问,其他全部禁止
表名包括:
raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
net:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。
规则链名包括:
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
动作包括:
accept:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。
查看与清除iptables规则(没有特殊指定默认filter表)
iptables -F #清除所选链中的所有规则
iptables -Z #指定链的计数器,清零
iptables -X #删除用户自定义的规则链
举个例子:iptables -t nat -F #清空nat表规制
策略设定
防火墙中,主要以这两规制为主
iptables -t filter -P INPUT ACCEPT #设定filter的INPUT链为开放状态
iptables -t filter -P INPUT DROP #设定filter的INPUT链为禁止状态
细讲匹配数据包类型和运用其他模块功能
防火墙的应用最主要的还是匹配数据包类型和运用其他模块功能,没有这两个功能的细化,我们使用的防火墙也不能有那么好的效果;只有准确的匹配,才能更好的提高我们防火墙的作用,提高管理服务器的安全性。
- -p:指定匹配的数据包协议类型
=== tcp 、 udp 、 icmp 装载协议
=== sport :source 源端口
=== dport :dst 目标端口
- -m:加载其他模块功能
=== limit 模块
-m limit --limit 6/m --limit-burst 10
##限制TCP首次连接的频率,每6分钟指派10包(对访客请求过大的时候做的限制)
运用以及解析:
iptables -t filter -A INPUT -p icmp -m limit --limit 2/m --limit-burst 60 -j ACCEPT
##限制 TCP icmp协议 首次连接的频率,每2分钟指派60个包
=== multiport 模块
-m multiport --souce-port 22,53,80
-m multiport --destination-port 22,53,80
##对目标端口(源端口)的允许或者限制
运用以及解析:
iptables -t filter -A INPUT -p tcp -m multiport --source-port 22,80,53
##放行源端口 22、80、53 进入防火墙 或(--destination-port 22,53,80 放行目标端口)
=== state 模块
-m state --state INVALID ESTABLISHED NEW RELATED
INVALID 无效状态,数据包损坏。
ESTABLISHED 完全有效的数据包,两端都已经建立链接。
NEW 新建立的链接。
RELATED 在已经建立链接的基础上,产生的新的链接。
运用以及解析:
iptables -t filter -A INPUT -m state --state INVALID,NEW -j DROP
##对无效状态和新链接的包进行丢弃处理
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##对完全有效和在已经建立链接的基础上的包进行放行处理
=== mac 模块
-s 10.1.1.10/32 -m mac --mac-source +MAC地址
##对特定的源地址主机的 IP 以及 MAC 绑定,防止欺骗(比如:管理服务器的管理员)
运用以及解析:
iptables -t filter -A INPUT -s 192.168.10.10 -d 10.10.1.1 -m mac --mac-source 00:0c:ab:bc:cd:de -j ACCEPT
##允许源192.168.10.10对目标10.10.1.1的任何操作(例:管理员管理服务器),并且绑定IP地址
=== time 模块 和 string 模块
-m time --timestart 01:00 --timestop 04:00 -m string --algo kmp --string "taobao"
iptables -t filter -A INPUT -m time --timestart 01:00 --timestop 04:00 -m string --algo kmp --string "taobao" -j DROP
##在设定的时间段内(9:00-12:00),带有taobao关键字的全部丢弃掉
##注意:我们的时间与世界时钟相差八个小时,所以设定时间必须在原来的基础上减去8个小时
在接下来的博客编写中会涉及到放火墙的实战脚本,同时也会在我们的小项目中带出防火墙的应用,细化防火墙的知识。
希望大家(❤ ω ❤)喜欢。