什么是iptables
说白了,iptables
在linux
当中充当类似防火墙的功能。它依赖于linux内核的netfilter
模块,在它的基础上实现了自己的规则,转发筛选数据包。
和firewalld的区别
我们只需要知道,区别就是筛选方式和手段不一样,但是都是依赖netfilter
实现的。具体的区别是什么,有兴趣的可以自己搜索。
安装iptables
yum install iptables iptables-services && systemctl start iptables && yum enable iptables
概念
Tables
iptables
中按照功能分为五种不同类型的表格(table
)
- filter: 适用于做数据包的筛选,如果没有指定的话,是默认table
- nat: 适用于网络地址做转发 (NAT)
- raw: 适用于在配置文件放行一些连接,在经过任何table之前都会先经过此table
- mangle: 适用于专业数据包变更
- security: 适用于强制的访问控制网络规则
指定table使用-t (--table)
选项
Chains
每个表格都可以含有多条链(chain
)。本篇文章主要关注filter
,主要介绍INPUT,FORWARD,OUTPUT。
- INPUT chain 处理要访问当前系统的数据包
- OUTPUT chain 是本地生成的数据包
- FORWARD chain 适用于通过当前主机转发的数据包
用户使用-N (--new-chain)
选项添加一条新的链,使用-X (--delete-chain)
选项删除一条链。
Rules
rules
被定义为一组规则,这组规则会把数据包匹配到指定目标。rules
在chain
中是以list的形式存在,所有的Rule
会进行排序,然后数据包一条一条的匹配,知道匹配到指定路由。
Matches
一个match
是一个数据包的判断条件。下面是部分匹配选项的说明
-s (--source)
: 指定数据包的源,可以是IP,主机名
-d (--destination)
: 指定目的地
-p (--protocol)
: 匹配协议,如果不指定,接受任何协议
-i (--in-interface)
: 匹配接收数据包的接口和输出接口
Target
表示数据包通过匹配规则后的动作,并且使用-j (--jump)
选项跳转。下面是四个内置的target
:
- ACCEPT: 允许数据继续传输而不需要其他的验证
- DROP: 拒绝数据包
- QUEUE: 把数据包传递到用户空间
- RETURN: 把数据包传递给上一个
chain
中的下一个rule
操作示例
查看所有Chains
iptables --list
查看所有Rules
iptables --list-rules
查看某个FORWARD上的所有rule
iptables -L FORWARD
主机192.168.0.2拒绝主机192.168.0.1的所有数据包
iptables -A INPUT -s 192.168.0.1 -d 192.168.0.2 -j DROP
删除INPUT的第一条rule
iptables -D INPUT 1
更多操作查看
iptables --help