iptables 介绍
iptable过滤流程
命令格式
iptables [-t table] command [chain] [match][target]table
filter: 默认表,处理包的过滤的表。没有-t就指filter表
nat: 处理网络地址转换的表(network address translation)
mangle:可以修改包的信息,如ttl,tos
raw:高级用法,根据链接状态做相应处理chain: Rule的集合,通常跟数据流向有关
默认的chain:
filter: INPUT (接收的数据包), OUTPUT(发出去的数据包), FORWARD(要转发的数据包)
nat: PREROUTING(路由前处理), POSTROUTING(路由后处理), OUTPUT
mangle: INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING
raw: PREROUTING, OUTPUTcommand:对chain操作的命令,这是立即生效的
-P :设置默认策略的(设定默认门是关着的还是开着的)
iptables -P INPUT (DROP|ACCEPT) 默认是关的/默认是开的
-F: FLASH,清空规则链的
iptables -t nat -F PREROUTING清空nat表里的PREROUTING chain
N:NEW 新建一个链
-X: 用于删除用户自定义的空链(先清空再删除)
-E:重命名chain
-Z:清空链,及链中默认规则的计数器的target指的是要做什么操作。
系统定义的target有ACCEPT(接收), DROP(直接丢弃), QUEUE(数据返回到用户空间处理) and RETURN(返回到调用的链,略过后面的rule处理), 还有一些扩展target,如REJECT,MASQUERADE(源地址伪装),REDIRECT(重定向,主要用于实现端口重定向)。DROP和REJECT的区别就是DROP直接丢包,而REJECT会返回一个错误数据。rule
对rule的操作:
-A(append) 在指定链的末尾添加一条新的规则
-I (insert)在指定链中插入一条新规则,为指明插入位置
-D(delete)删除制定链里的某条规则
-R (replace)修改、替换指定链的某条规则,按序号或内容确定要替换的规则-L (list) 查看规则rule命令:
-t table 显示某表的所有规则
-n 显示ip address
-v 显示verbose,指较多信息规则匹配
-s 源地址匹配
-d 目标地址匹配
-p 协议匹配,如tcp, udp, icmp
-i 接收输入的网络接口匹配
-o 发送输出的网络接口匹配规则匹配扩展
如对协议的-p扩展
–dport 指定目标端口
–sport 指定源端口
–tcp-fiags:检查TCP的标志位 (SYN,ACK,FIN,PSH,RST,URG)举例
iptables -t filter -A INPUT -p tcp -s 192.168.1.11 -j DROP
iptables -A INPUT -i ppp0 -p tcp –sport 80 -j ACCEPTSNAT & DNAT
SNAT基于原地址的转换一般用在我们的许多内网用户通过一个外网的口上网的时候,这时我们将我们内网的地址转换为一个外网的IP,我们就可以实现连接其他外网IP的功能。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT –to-source 172.16.100.1
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADEDNAT对于目标地址转换,数据流向是从外向内的,外面的是客户端,里面的是服务器端通过目标地址转换,我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器,而我们的服务却放在内网服务器的不同的服务器上。
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp –dport 80 -j DNAT –todestination 172.16.100.2iptables -t nat -A PREROUTING -d 0.0.0.0/0 -p tcp –dport 80 -j DNAT –to 192.168.43.1:8080
不管目标IP地址是什么,只要是发往80端口的tcp包,都转发到192.168.43.1的8080端口
参考文档
http://blog.chinaunix.net/uid-22780578-id-3346350.html
https://en.wikipedia.org/wiki/Iptables