Iptables
What:iptables 是一个免费得防火墙解决方案,通过iptables 可以完成包过滤,重定向以及网络地址转换等功能。
Netfilter/iptables 是表的容器
而表又是链的容器
而链是规则的容器。
Iptables 的功能实现的基础是通过定义的规则来进行处理的。
规则(rules)其实就是用户输入的一些特定的处理方式,当数据包符合当前的条件时就怎么怎么样。规则存储在不同的表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。
在iptables 内置了4张表,filter,nat,mangle以及raw.根据名字可以很好的理解,有实现过滤的,实现地址转换,以及对应的包修改的。
链(chains):数据包在传递的过程中会通过不同的 路径,你可以在 到达或者经过不同的路径前后执行不同的规则,比如在数据包到达网卡之前,这些路径被称作链。
如下图所示。
不同的表 拥有不同的链
Filter 表: INPUT FORWARD OUTPUT
过滤数据包,可以对某些数据包 进行丢弃,放行等处理
INPUT | 过滤进入主机的数据包 |
FORWARD | 负责转发流经主机数据包 |
OUTPUT | 就是处理从主机发出去的包 |
Nat 表: PREROUTING POSTROUTING OUTPUT
用于网络地址转换,比如原始ip以及目标ip地址改写,可以共享上网(代替路由器)
PREROUTING | 处理用户请求中的目的地址,目的端口,端口转发IP映射。 |
POSTROUTING | 处理离开服务器的请求,源端口,源IP,共享上网。局域网之所以可以进行访问外网,就是类似此功能,改源目的地址。外网接收后,会把数据包重新丢回路由器,路由器再根据地址转换,转换为对应的内网主机地址 |
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址 |
Mangle表:PREROUTING POSTROUTING INPUT OUTPUT FORWARD
用于修改包的服务类型,TTL等信息
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
如果不指定表明,默认使用filter表
常用命令选项
选项 | 含义 |
-A | 在指定链的末尾添加一条新的规则 |
-D | 删除指定链中的那个某一条规则 |
-I | 在指定链中插入一条新规则,默认在行首 |
-R | 修改或替换指定链中的规则 |
-p | 指定协议 tcp/udp/icmp |
-d | 目标ip地址 |
-s | 源ip地址 |
-i | 数据进来时通过的网卡 |
-o | 数据出去时候通过的网卡 |
-dport | 目标端口 |
-sport | 源端口 |
-L | 列出指定链中的规则 |
-F | Flush 清空 |
-n | 使用数字形式显示输入结果 |
-j | 行为 ACCEPT 允许 DROP 丢弃 REJECT 拒绝 LOG 在 文件中记录日志信息,然后继续将包传递 |
在链式处理中,如果匹配到某一条规则 如果规则结果是通过或拒绝或丢弃 后就不会在执行后面的规则
如果当前规则 没有明确处理,比如LOG,或没有匹配上,则继续校验后面的规则
如以下命令 在filter 表中的INPUT链 增加 所有的icmp协议的数据包都拒绝
Iptables –I INPUT –p cimp –j REJECT
如 拒绝 转发来自192.168.1.11 主机的数据包。 其中-s代表源地址
Iptables –A FORWARD –s 192.168.1.11 –j REJECT
# 如果访问地址是192.168.1.1:80 则将 请求转发到192.168.1.3:8080
Iptables –t nat PREROUTING –d 192.168.1.1 –p tcp –dport 80 –j DNAT –to-destination 192.168.1.3:8080
实现外部IP 10.0.32.2 一对一映射到内网IP 192.168.2.3
# 将目标地址为 10.0.32.2 的目标地址改写成 192.168.2.3
Iptables –t nat –A PREROUTING –d 10.0.32.2 –j DNAT –to-destination 192.168.2.3
# 将 源地址是192.168.2.3 的源地址做一次SNAT 映射,重定向到外网10.0.32.2
Iptables –t nat –A POSTROUTING –s 192.168.2.3 –j SNAT –to-source 10.0.32.2