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