今天详细讲下linux防火墙iptables。
1.表和链
iptables有如下几个表:
- mangle表主要功能是修改数据包
- nat表主要用来修改包的源地址和目标地址
- filter表主要用来对包进行过滤
对于mangle一般不建议使用,会出现一些意想不到的问题,如果你愿意完全可以忘掉mangle的存在,后面主要围绕nat和filter讲解。
1.1 mangle
说了忘掉的。
1.2 nat
nat有如下几条链
- PREROUTING 对进来的包进行处理
- POSTROUTING 对出去的包进行处理
- OUTPUT 对本地产生的出去的包进行处理
1.3 filter
filter有如下几条链
- INPUT 对进来得包进行处理
- OUTPUT 对出去的包进行处理
- FORWARD 对转发的包进行处理
2.规则
一条规则一定是挂在某条链上的,一条链一定是挂在某张表上的,所以一条规则一定是挂在某张表的某条链上的。
1 2 3 4 5 |
table | ---chain | ---rule |
2.1 语法
新增一条规则需要使用iptables
命令(需要root权限)。
我们先来看下iptables
的基本语法
|
|
参数table是可选的,如果没有设置table默认则是filter。
2.2 初始化
在添加规则之前我们一般会初始化防火墙
|
|
这里有个值得注意的地方就是一定要记得设置
filter
的INPUT
,OUTPUT
的默认行为为ACCEPT
,因为如果不设置,后面的命令把所有规则删除了,这个时候就会走到链的默认行为,如果之前的默认行为是DROP
或REJECT
那就会把自己挡在外面(假定你是ssh登录),到时候真是欲哭无泪。
2.3 添加规则
|
|
根据上面的语法我们得知规则就是matches
和target
。
一旦
matches
成功就执行后面的target
,如果不成功则继续下一条规则。
例如开放22端口
|
|
这里的matches
就是-p tcp -m tcp --dport 22
,target
就是-j ACCEPT
target比较常用的有
ACCEPT
,DROP
,REJECT
我们还可以修改matches
以达到更精确的控制
|
|
上面命令仅当网段是192.168.1.1-225
的ip访问22端口时才会匹配,所以你可以不断调整你的matches
来达到你的目的。
说到这里你可能会有疑问了,如果所有的规则都没匹配上怎么办。还记得之前说的链的默认规则吗?
我们之前把INPUT
设置为了ACCEPT
,之所以把它设置为ACCEPT
是为了避免我们设置规则的时候把自己关在外面,当你把所有规则设置好之后确认没有任何问题之后记得把它设置为DROP
,这个时候你的防火墙才真真正正有效了。
|
|