共计 4130 个字符,预计需要花费 11 分钟才能阅读完成。
防火墙
防火墙作为一种内部网与外部网之间的访问控制设备,通常安装在内部网络与外部网络的边际,防火墙具有很好的网络保护作用。入侵者必须先通过防火墙的安全防线才能接触计算机。可以将防火墙配置不同的安全级别,达到不同的安全防护。
iptables 与 netfilter 的关系
netfilter/iptables 是集成在 Linux2.4x 版本内核中的包过滤防火墙系统。它可以实现数据包过滤,网络地址转换以及数据包管理功能。Linux 中的防火墙系统中,netfilter 位于内核空间,负责对本机所有流入,流出,转发的数据包进行查看,修改,丢弃,拒绝等操作,由于 netfilter 位于内核空间,用户一般无法接触内核和修改内核,所以就需要一些命令行工具进行管理,常用的有 iptables,firewalld 等工具。因此,真正实现防火墙功能的是 netfilter,它是 Linux 内核中实现包过滤的内部结构。
iptables 结构
简单来说,iptables 是由表组成,表是链的集合,链上有规则。如果将 iptables 比作一栋楼,那么表、链、规则是:
iptables
表(tables)
链(chains)
规则(policy)
大楼
每一层楼
一层楼的房间
房间内的布局
iptables 中有四表五链
表
作用
filter
实现数据包的过滤(常用)
nat
修改数据包的地址和端口(常用)
mangle
修改数据包的服务类型、TTL、并且可以配置路由实现 QOS 内核模块(用得不多)
raw
决定数据包是否被状态跟踪机制处理(用得不多)
而链分别是:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
filter 表的链 filter 表是 iptables 默认的表,有 3 条链,分别是 INPUT、FORWARD 和 OUTPUT 链。
INPUT:对于指定到本地套接字的包,即到达本地防火墙服务器的数据包。
FORWARD:路由穿过的数据包,即经过本地防火墙服务器的数据包。
OUTPUT:本地创建的数据包
nat 表的链对于 nat 表来说有 3 条链,分别是 PREROUTING、OUTPUT 和 POSTROUTING 链。
PREROUTING:所有的数据包进来的时侯都先由这个链处理
OUTPUT:本地创建的数据包在路由前进行改变
POSTROUTING: 在数据包即将出去时改变数据包信息,所有的数据包出来的时侯都先由这个链处理
iptables 工作流程
当一个数据包进入网卡时,当一个数据包进入网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转送出去。
如果数据包就是进入本机的,它就会沿着图向上移动,到达 INPUT 链。数据包到了 INPUT 链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过 OUTPUT 链,然后到达 POSTROUTING 链输出。
如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD 链,然后到达 POSTROUTING 链输出。
规则表之间的优先顺序:Raw>mangle>nat>filter
规则链的优先顺序分 3 种情况
入站数据流向
从外界到达防火墙的数据包,先被 PREROUTING 规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说 Internet 用户访问防火墙主机中的 web 服务器的数据包),那么内核将其传给 INPUT 链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如 Apache 服务器)进行响应。
转发数据流向
来自外界的数据包到达防火墙后,首先被 PREROUTING 规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问 QQ 站点的数据包),则内核将其传递给 FORWARD 链进行处理(是否转发或拦截),然后再交给 POSTROUTING 规则链(是否修改数据包的地 址等)进行处理。
出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网 DNS 服务器时),首先被 OUTPUT 规则链处理,之后进行路由选择,然后传递给 POSTROUTING 规则链(是否修改数据包的地址等)进行处理。
工作流程小结:
1、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。2、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。4、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
iptables 语法
iptables 的语法命令格式:
iptables -t [表名] 命令选项 [链名] 匹配参数 [- j 目标动作]
说明:表名和链名:用于指定 iptables 操作的是哪个表哪条链命令选项:用于指定管理 iptables 规则的方式 (增加,删除等) 匹配参数:用于指定对符合什么条件的数据包进行处理目标动作:用于指定对数据包的处理
选项:
-t: 指定需要维护的防火墙规则表,不使用 - t 时,默认操作 filter 表
命令选项:
-A: 追加防火墙规则
-D: 删除防火墙规则
-I: 插入防火墙规则
-F: 清空防火墙规则
-L: 列出防火墙规则
-R: 替换防火墙规则
-Z: 清空防火墙数据表统计信息
-P: 设置链默认规则
匹配参数
[!] -P: 匹配协议,! 代表取反即不匹配
[!] -s: 匹配源地址
[!] -d: 匹配目标地址
[!] -i: 匹配入站网卡接口
[!] -o: 匹配出站网卡接口
[!] –sport: 匹配源端口
[!] –dport: 匹配目标端口
[!] –src-range: 匹配源地址范围
[!] –dst-range: 匹配目标地址范围
[!] –limit: 匹配数据表速率
[!] –mac-source: 匹配源 MAC 地址
[!] –sports: 匹配源端口
[!] –dports: 匹配目标端口
[!] –state: 匹配状态
[!] –string: 匹配应用层字串
目标动作
ACCEPT: 允许数据包通过
DROP: 丢弃数据包
REJECT: 拒绝数据包通过
LOG: 将数据包信息记录 syslog 日志
DNAT: 目标地址转换
SNAT: 源地址转换
MASQUERADE: 地址欺骗
REDIRECT: 重定向
iptables 的保存默认的 iptables 防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都将丢失,所以对防火墙规则进行及时的保存操作是有必要的。备份工具:
iptables-save > /etc/sysconfig/iptables
还原工具:
iptables-restore < /etc/sysconfig/iptables
或者执行 service iptables save 也行。
iptables 常见规则示例
1、查看 filter 表的所有规则
iptables -nL
2、查看 nat 表的所有规则
iptables -t nat -nL
3、清空 filter 表的所有规则
iptables -t filter -F
4、往 filter 表添加一条规则,丢弃 192.168.0.1 主机发给本机的所有数据包
iptables -t filter -A INPUT -s 192.168.0.1 -j DROP
5、往 filter 表插入一条规则,拒绝 192.168.0.2 主机 ping 本机
iptables -I INPUT -s 192.168.0.2 -p icmp -j REJECT
6、查看 filter 表中防火墙规则并显示规则编号
iptables -nL –line-number
7、删除 filter 表中 INPUT 链的第一条规则
iptables -D INPUT 1
8、替换 filter 表 INPUT 链的第二条规则,拒绝除了 192.168.0.3 之外的任何主机连接本机
iptables -R INPUT 2 ! -s 192.168.0.3 -j REJECT
9、修改 filter 表 INPUT 链的默认规则为接收数据包
iptables -P INPUT ACCEPT
10、禁止来自 10.0.0.188 ip 地址访问 80 端口的请求
iptables -A INPUT -s 10.0.0.188 -p tcp –dport 80 -j DROP
11、实现把访问 10.0.0.3:80 的请求转到 172.16.1.17:80
iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp –dport 80 -j DNAT –to-destination 172.16.1.6:80
12、只允许远程主机访问本机的 80 端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp -j DROP
13、实现 172.16.1.0/24 段所有主机通过 124.32.54.26 外网 IP 共享上网。
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT –to-source 124.32.54.26
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
14、允许任意客户端访问服务主机提供的日常服务(HTTP,HTTPS,DNS,NTP,SMTP,POP3)
iptables -A INPUT -p udp –dport 25 -j ACCEPT
iptables -A INPUT -p udp –dport 53 -j ACCEPT
iptables -A INPUT -p tcp –dport 53 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 110 -j ACCEPT
iptables -A INPUT -p tcp –dport 143 -j ACCEPT
iptables -A INPUT -p tcp –dport 443 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
15、禁止任何主机访问本机 22 端口
iptables -A INPUT -p tcp -dport 22 -j DROP