iptables
来源:互联网 发布:啊哈!算法pdf 编辑:程序博客网 时间:2024/04/26 08:19
Reference:
http://blog.csdn.net/wallace_star/article/details/5625726
http://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html 本文主要基于这个文档
http://www.frozentux.net/documents/iptables-tutorial/ 原版
http://en.wikipedia.org/wiki/Iptables
http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html
http://users.telenet.be/mydotcom/howto/lanconnect/router/linux.htm 如何配置linux作为router
家族组成:
iptables 应用于 IPV4
ip6tables 应用于 IPV6
arptables 应用于 ARP
ebtables 应用于 ethernet
在内核中x_tables模块是这个四个自模块的共用部分。
表
nat 表
nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。
做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。
属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,
那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,
一个一个的被NAT,而是自动地完成。这就是我们为什么不应该在这个表中做任何过
滤的主要原因,对这一点,后面会有更加详细的讨论。
PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。
OUTPUT链改变本地产生的包的目的地址。
POSTROUTING链在包就要离开防火墙之前改变其源地址。
mangle
这个表主要用来mangle数据包。我们可以改变不同的包及包头的内容,
比如 TTL,TOS或MARK。注意MARK并没有真正地改动数据包,它只是在
内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)
可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链:
PREROUTING,POSTROUTING, OUTPUT,INPUT和 FORWARD。
PREROUTING在包进入防火墙之后、路由判断之前改变包,
POSTROUTING是在所有路由判断之后。
OUTPUT在确定包的目的之前更改数据包。
INPUT在包被路由到本地之后,但在用户空间的程序看到它之前改变包。
FORWARD在最初的路由判断之后、最后一次更改包的目的之前mangle包。
注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,
而不是其源目地址。NAT是在nat表中操作的。
filter表
filter表是专门过滤包的,内建三个链,可以毫无问题地对包进行
DROP、LOG、ACCEPT和REJECT等操作。
FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,
INPUT恰恰针对那些目的地是本地的包。
OUTPUT 是用来过滤所有本地生成的包的。
packets, i.e, changing TOS, TTL 4nat PREROUTINGThis chain is used for DNAT mainly5 Routing decision6mangle INPUTAt this point, the mangle INPUT chain is hit7filterINPUTThis is where we do filtering for all incoming
traffic destined for our local host8 local application
Source -- Local Host
what outgoing interface to use3mangleOUTPUT 4natOUTPUTThis chain can be used to NAT outgoing packets
from the firewall itself5 Routing decision, since the previous mangle and
nat changes may have changed how the packet
should be routed.6filterOUTPUTFilter the packet7mangle POSTROUTING 8natPOSTROUTINGWhere we do SNAT9 Go out on some interface10 on the wire
规则的保存与恢复
iptables-save 和 iptables-restore 来保存和恢复规则
保存的格式如下
# Generated by iptables-save v1.4.10 on Mon Jun 18 21:21:58 2012
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [3875:235839]
:POSTROUTING ACCEPT [3875:235839]
COMMIT
# Completed on Mon Jun 18 21:21:58 2012
# Generated by iptables-save v1.4.10 on Mon Jun 18 21:21:58 2012
*mangle
:PREROUTING ACCEPT [18621:12648264]
:INPUT ACCEPT [18621:12648264]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [20596:4505018]
:POSTROUTING ACCEPT [20640:4513342]
COMMIT
# Completed on Mon Jun 18 21:21:58 2012
# Generated by iptables-save v1.4.10 on Mon Jun 18 21:21:58 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [20596:4505018]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i ipsec+ -p 254 -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p ah -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5308 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5901 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 12080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 113 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5656 -j ACCEPT
-A INPUT -p udp -m udp --dport 5004:5005 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5004:5005 -j ACCEPT
-A INPUT -p udp -m udp --dport 20830 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20830 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5060:5062 -j ACCEPT
-A INPUT -p udp -m udp --dport 5060:5062 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2001 -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 9 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8081 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1533 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 30000:30005 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 67:68 -j DROP
-A INPUT -p udp -m udp --dport 67:68 -j DROP
-A INPUT -p tcp -m tcp --dport 137 -j DROP
-A INPUT -p udp -m udp --dport 137 -j DROP
-A INPUT -p tcp -m tcp --dport 138 -j DROP
-A INPUT -p udp -m udp --dport 138 -j DROP
-A INPUT -p tcp -m tcp --dport 139 -j DROP
-A INPUT -p udp -m udp --dport 139 -j DROP
-A INPUT -p tcp -m tcp --dport 1:20 -j DROP
-A INPUT -p tcp -m tcp --dport 111 -j DROP
-A INPUT -p tcp -m tcp --dport 161:162 -j DROP
-A INPUT -p tcp -m tcp --dport 520 -j DROP
-A INPUT -p tcp -m tcp --dport 6348:6349 -j DROP
-A INPUT -p tcp -m tcp --dport 6345:6347 -j DROP
-A INPUT -p tcp -m limit --limit 3/min -j LOG --log-prefix "FIREWALL: " --log-level 6
-A INPUT -p udp -m limit --limit 3/min -j LOG --log-prefix "FIREWALL: " --log-level 6
-A INPUT -j DROP
COMMIT
# Completed on Mon Jun 18 21:21:58 2012
#后表示为注释
*后跟表的名字, 接下来就是这个表的内容。
表包含了链 和 规则。
链的详细说明是:<chain-name> <chain-policy> [<packet-counter>:<byte-counter>]
后面就是该链的规则。
规则
iptables [-t table] command [match] [target/jump]
可以使用上面的命令来添加iptable中的规则。
该命令中指定了如下几个部分。
-t 选项指定了修改哪个表,
在command中指定了在哪个链中,添加/删除/修改/插入 某个规则
Command
-A 添加
-D 删除
-R 替换
-I 插入
-F 清空规则
-Z 归零计数器
-P 设置链的policy,就是默认的target
-N 新建用户自定义链
-X 删除用户自定义链
-E 重命名某个自定义链
-L 显示
Match
作者把match归成五类。
1. generic match 通用匹配
2. tcp match
3. udp match
4. icmp match
5. state, owner, limit match
以上2-4可以称为隐式匹配,
5是显式匹配,显式匹配必须使用-m来指定。
Generic Match 通用匹配
-p, --protocol 匹配协议
-s, --src 匹配源ip地址
-d, --dst 匹配目标ip地址
-i 匹配进入的接口地址
-o 匹配离开的接口地址
-f 匹配分片的非第一个包
tcp match
tcp match 都需要以 -p tcp 为前提
--sport 匹配源端口
--dport 匹配目的端口
--tcp-flags 匹配tcp的flag, 如SYN, ACK, FIN, RST, PSH
udp match
udp match都需要以-p udp为前提
--sport 匹配源端口
--dport 匹配目的端口
icmp match
icmp match 都要以-p icmp为前提
--icmp-type 匹配icmp的类型
limit match
-m limit --limit 3/hour 每小时出现3次
-m limit --limit-burst 不详
mat match
-m mac --mac-source xxxx 匹配源mac地址
mark match
-m mark --mark num 匹配包被设置的mark值
multiport match
-p tcp -m multiport --source-port 22,53,80 匹配多个源端口
-p tcp -m multiport --destination-port 23,4 匹配多个目的端口
-p tcp -m multiport --port 22,34,32 匹配源和目的端口一样的包
owner match
-m owner --uid-owner 50
-m owner --gid-owner 50
-m owner --pid-owner 43
-m owner --sid-owner 43
state match
-m state --state STATE
可以匹配四种状态, INVALID, ESTABLISHED, NEW, RELATED。
TOS match
-m tos --tos value
TTL match
-m ttl --ttl value
Target/Jump
该语法是 --jump target 或 -j target
可以跳转到 某个具体的操作(ACCEPT 或者 DROP) 或者是同个表内的另外一个链
1. ACCEPT target
在本表中接受,不在匹配链中或该表中的其他规则。
但仍然会匹配其他表的规则。
2. DNAT target
用于转换ip地址。
DANT target只能用在nat表的PREROUTING和OUTPUT链中,或者是被这两条链调用的链里。
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10
把发往15.45.23.67 80的tcp包 转成目的地址为 192.168.1.1-192.168.1.10 的一个。 每个流使用相同的地址。
3. DROP target
4. LOG target
--log-level
--log-prefix
--log-tcp-sequence
--log-tcp-options
--log-ip-options
5. MARK target
--set mark
6. QUEUE target
用于队列的处理
7. REDIRECT target
只能用在nat表的PREROUTING 和 OUTPUT链
-j REDIRECT --to-ports 8080
8. REJECT target
这个和DROP基本一样, 区别在于除了阻塞包之外,还发送错误信息。
-j REJECT --rejetct-with "reason"
9. RETURN target
就像是return 语句, 返回父链。
-j RETURN
10. SNAT target
只能用于nat 表的postrouting链中, 只要符合条件的第一个包被SNAT, 则该会话的其他包也会被SNAT。
11. TOS target
可以用来设置TOS值
-j TOS --set-tos 0x10
将TOS 设置为 0x10.
12. TTL target
ttl只能在mangle表内设置
-j TTL --ttl-set 设置
-j TTL --ttl-dec 减少
-j TTL --ttl-inc 增加
13. ULOG target
用于记录日志,向用户空间发送来保存。 通过netlink socket。
--ulog-nlgroup 2 向2号netlink组发包
--ulog-prefix prefix 记录的前缀
--ulog-cprange size 向用户空间拷贝包的字节数
--ulog-qthreshold num 收集到num包后,再向用户空间发送记录
- IPTABLES
- Iptables
- iptables
- iptables
- Iptables
- iptables
- iptables
- iptables
- iptables
- IPTABLES
- iptables
- iptables
- iptables
- iptables
- iptables
- iptables
- iptables
- iptables
- 基于HZK16的汉子显示技术
- 【Java】利用反射hacking java程序
- SSH+Activiti 整合(Spring 3.1.1 + Struts 2.3.3 + BoneCP 0.7.1 + Hibernate 4.1.4 + Activiti 5.9)
- 5种流行的Linux发行版:选择你喜欢的Linux
- 第一次面试成功----四创软件
- iptables
- Android 恐怖幽灵音效 程序(源码详解)
- 【浅析】Java程序比C/C++程序慢的影响因素
- Linux的五个查找命令:find,locate,whereis,which,type
- qt4.6.4编译笔记
- 跟JBPM学设计模式之原型模式
- iphone&ipad图标去除高亮的光圈效果
- 狼性教育——让孩子成为主宰命运地强者
- linux .d 的意思