>[info]###标题 : Linux防火墙 IPtables 配置:一、常用命令详解
作者 : fankey <6424051@qq.com>
时间 : 2015-09-30
>[success]### IPtables的组成规则 : **四张表** , **五条链接** , **规则**
一. **四张表** :`filter 表(常用)`,`nat 表(常用)`,`mangle 表`,`raw 表`
>[danger]filter 表的作用 : 访问控制 , 规则匹配
>[warning]nat 表的作用 : 地址转发
>[info]mangle 表和 raw 表不常用 , 其作用暂不解释
二. **五条链接** :`INPUT` , `OUTPUT` , `FORWARD` , `PREROUTING` , `POSTROUTING`
![document/2015-09-30/560bbfb13b261](https://box.kancloud.cn/document_2015-09-30_560bbfb13b261.png)
![document/2015-09-30/560bc108d1735](https://box.kancloud.cn/document_2015-09-30_560bc108d1735.png)
![document/2015-09-30/560bc15a0ae74](https://box.kancloud.cn/document_2015-09-30_560bc15a0ae74.png)
>[success]二、常用命令列表 : -A 追加规则、 -D 删除规则、 -R 修改规则、 -I 插入规则、 -L 查看规则 ……
###`1. -A 命令`
| 命令 | -A |
| :-------: | :--------- |
| 范例 |iptables -A INPUT ...|
| 说明 | 新增规则(追加方式)到某个规则链(这里是INPUT规则链)中,该规则将会成为规则链中的最后一条规则 |
###`2. -D 命令`
| 命令 | -D |
| :-------: | :--------- |
| 范例 |iptables -D INPUT --dport 80 -j DROP
或 iptables -D INPUT 1 (索引删除)|
| 说明 | 从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除 |
###`3. -R 命令`
| 命令 | -R |
| :-------: | :--------- |
| 范例 |iptables -R INPUT 1 -s 192.168.0.1 -j DROP|
| 说明 | 取代现行规则,规则被取代后并不会改变顺序。(1是位置)|
###`4. -I 命令`
| 命令 | -I |
| :-------: | :--------- |
| 范例 |iptables -I INPUT 1 --dport 80 -j ACCEPT|
| 说明 | 插入一条规则,原本该位置(这里是位置1)上的规则将会往后移动一个顺位|
###`5. -L 命令`
| 命令 | -L |
| :-------: | :--------- |
| 范例 |iptables -L INPUT|
| 说明 | 列出某规则链中的所有规则 (范例是列出INPUT规则链中所有信息) |
####`-L 命令 附加参数说明 : iptables 附加参数 -L `
| 参数 | 注解 |
| :-------: | :--------- |
| `-n` |以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名|
| `-v` | 显示详细信息|
| `-vv` | 同上(v越多越详细)|
| `-vvv` | 同上(v越多越详细)|
| `-x` | 在计数器上显示精确值,不做单位换算|
| `--line-numbers` |显示规则的行号(删除某规则时的索引行号)|
|`-t nat`|显示所有的关卡的信息|
|范例|`iptables --line-numbers -L INPUT`|
|说明|范例是列出 INPUT链中的所有规则,并且在这些规则前显示其索引 (删除规则时可以根据索引删除)|
###`6. -F 命令`
| 命令 | -F |
| :-------: | :--------- |
| 范例 |iptables -F INPUT|
| 说明 | 删除某规则链(这里是INPUT规则链)中的所有规则|
###`7. -P 命令`
| 命令 | -P |
| :-------: | :--------- |
| 范例 |iptables -P INPUT DROP|
| 说明 | 定义过滤政策。 也就是未符合过滤条件之封包,预设的处理方式|
###`8. -Z 命令`
| 命令 | -Z |
| :-------: | :--------- |
| 范例 |iptables -Z INPUT|
| 说明 | 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具|
###`9. -N 命令`
| 命令 | -N |
| :-------: | :--------- |
| 范例 |iptables -N allowed|
| 说明 | 定义新的规则链 allowed|
###`10. -X 命令`
| 命令 | -X |
| :-------: | :--------- |
| 范例 |iptables -X allowed|
| 说明 | 删除某个规则链 (范例是删除 allowed 规则链)|
###`11. -E 命令`
| 命令 | -E |
| :-------: | :--------- |
| 范例 |iptables -E allowed disallowed|
| 说明 | 修改某自订规则链的名称 (范例是把 allowed 改为:disallowed)|
>[info]####`命令使用场景 : `
`场景一 : 禁止80端口的TCP协议访问`
`iptables -A INPUT -p tcp --dport 80 -j REJECT`
`场景二 : 允许80端口的TCP协议访问`
`iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
`场景三 : 允许30-60之间的端口都可以访问`
`iptables -A INPUT -p tcp --dport 30:60 -j ACCEPT`
`场景四 : 开放 ping 命令,可以 ping 主机ip`
`iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT`
`场景五 : 查询当前INPUT链下有多少规则,并且显示规则索引`
`iptables -n --line-numbers -L INPUT`
`得到结果如下图:`
![document/2015-10-01/560cb0f93f8d7](https://box.kancloud.cn/document_2015-10-01_560cb0f93f8d7.png)
`场景六 : 删除8080端口的tcp访问`
`首先执行规则查询,查看要删除规则所在的索引 : `
`iptables -n --line-numbers -L INPUT`
![document/2015-10-01/560cdbbc05668](https://box.kancloud.cn/document_2015-10-01_560cdbbc05668.png)
`执行删除: iptables -D INPUT 3`
![document/2015-10-01/560cdca322d3d](https://box.kancloud.cn/document_2015-10-01_560cdca322d3d.png)
`场景七:开启SVN服务的3690端口 : `
`iptables -I INPUT -p tcp --dport 3690 -j ACCEPT`
然后保存更改 : `service iptables save`
重新启动防火墙 : `service iptables restart`
查看防火墙状态 : `service iptables status`
开启FTP端口21 :
`iptables -A INPUT -p tcp --dport 21 -j ACCEPT`
开启MySql端口3306 :
`iptables -I INPUT -p tcp --dport 3306 -j ACCEPT`
要添加内网ip信任(接受其所有TCP请求)
`iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT`
过滤所有非以上规则的请求
`iptables -P INPUT DROP`
数据同步端口 873
`iptables -A INPUT -p tcp --dport 873 -j ACCEPT`
`iptables -A INPUT -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT`
(注意:一定要有这句)