一、概念解释
iptables,一个运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的流动与转送。在大部分的Linux系统上面,iptables是使用/usr/sbin/iptables来操作,文件则放置在手册页(Man page[2])底下,可以通过 man iptables
指令获取。通常iptables都需要内核层级的模块来配合运作,Xtables是主要在内核层级里面iptables API运作功能的模块。因相关动作上的需要,iptables的操作需要用到超级用户的权限。
维基百科对iptables的描述如上,详细的描述信息https://zh.wikipedia.org/wiki/Iptables
iptables包含Filter、Nat、Mangle、Raw四种内建表。
Filter表
Filter表是iptables的默认表(无定义时默认使用)包过滤,用于防火墙规则,包含以下三种内建链:
- INPUT链——处理来自外部的数据。
- OUTPUT链——处理向外发送的数据。
- FORWARD链——将数据数据转发到本机的其他网卡设备上。
Net表
地址转换,用于网关路由器。包含以下三种内建链:
- RREROUTING链——处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
- POSTROUTING链——处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
- OUTPUT链——处理本机产生的数据包。
Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。包含以下五种内建链:
- PREROUTING、OUTPUT、FORWARD、INPUT、POSTROUTING
Raw表
Raw表用于处理异常,它具有2个内建链:
- PREROUTING、OUTPUT
动作包括:
- ACCEPT:接收数据包。
- DROP:丢弃数据包。
- REDIRECT:重定向、映射、透明代理。
- QUEUE:防火墙将数据包移交到用户空间。
- RETURN:防火墙停止执行当前链中后续Rules,并返回到调用链(the calling chain)中。
- SNAT:源地址转换。
- DNAT:目标地址转换。
- MASQUERADE:IP伪装(NAT),用于ADSL。
- LOG:日志记录。
二、命令介绍
语法: iptables (选项)(参数)
选项:
-t<表>: 指定要操作的表的;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清除规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-d:指定要匹配的目标数据包ip地址;
-j <目标>:指定要跳转的目标;
-i <网络接口>:指定数据包进入本机的网络接口;
-o <网络接口>:指定数据包要离开本机所使用的网络接口;
示例说明:
iptables -t 表名 <-A/I/D/R> 规则链名[规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口
<-d 目标IP/目标子网> --dport 目标端口 -j 动作
1.清除已有iptables规则
iptables -F #删除某规则链中所有规则
iptables -X #删除某个规则链
iptables -Z #将封包计数器归零。封包计数器是用来计算统一封包出现次数,是过滤阻断式攻击的工具
2.开放指定端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A INPUT -j REJECT #禁止其他未允许的规则访问
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT #允许已建立或相关连的通行
- -m state:启用状态匹配模块。
- –state:状态匹配模块的参数。当数据包到达服务器时,状态字段为NEW;建立连接后数据包的状态字段都是ESTABLISHED。
3.屏蔽IP
iptables -I INPUT -s 192.168.189.234 -j DROP #屏蔽单个IP命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #屏蔽某个子网的命令
4.查看已添加的iptables规则
iptables -nvL
n:只显示IP地址和端口号,不将ip解析为域名。
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数。
L:列出某条规则链中的所有规则。
5.删除已添加的iptables规则
iptables -L -n --line-numbers #将所有iptables以序号标记显示
iptables -D INPUT 3 #删除INPUT链中的第三条规则
6.保存iptables规则并使之生效
/etc/init.d/iptables save #保存规则
service iptables restart #重启服务
参考资料
- centos_iptables命令——http://www.cnblogs.com/hiroada/articles/2220809.html
- iptables命令介绍——http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html