Iptables笔记(转帖) 基础
1. 表: mangle: 改变包的(TOS/TTL/MARK)属性。建议不加任何过滤。 nat: 用于转换包的源地址和目标地址。流的第一个包会进行匹配,后面的包会做按第一个包一样处理。包括DNAT/SNAT/MASQUERADE。 filter: 用于过滤,对包的抉择ACCEPT或者DROP。
2. 链: PREROUTING: 所有进入的包最先进入的链 POSTROUTING: 所有发送包最后通过的链 INPUT: 进入本地的链 OUTPUT: 本地发送出去的链 FORWARD: 转发的链,不进入本地
通常有三种状态: a) 进入本地的包:NETWORK-->(mangle)PREROUTING-->(nat)PREROUTING-->-->(mangle)INPUT-->(filter)INPUT--> b) 从本地发出的包:-->(mangle)OUTPUT-->(nat)OUTPUT-->(filter)OUTPUT-->(mangle)POSTROUTING-->(nat)POSTROUTING-->NETWORK c) 路由的包:NETWORK-->(mangle)PREROUTING-->(nat)PREROUTING-->-->(mangle)FORWARD-->(filter)FORWARD-->(mangle)POSTROUTING-->(nat)POSTROUTING-->NETWORK
3. 状态防火墙:所有状态的改变和计算都是在nat表中的PREROUTING链和OUTPUT链里完成的。
4. 状态记录表:/proc/net/ip_conntrack [UNREPLIED]连接还没有收到回应 [ASSURED]两个方向已无流量 当记录表慢的时候,没有[ASSURED]标记的记录将被删除。 记录条数目可以设置:/proc/sys/net/ipv4/ip_conntrack_max
5. 数据包的四种状态: NEW: conntrack看到的某个连接的第一个包,并没有收到对方的应答。 ESTABLISHED: 数据已经在两个方向进行了传输。有应答就算,比如ICMP的错误返回包。 RELATED: 当和ESTABLISHED状态又发生新连接时候。比如ftp-data和ftp-control。 INVALID: 无效,通常DROP。
语法: iptables [-t table] command [match] [target/jump] table 对哪个表的操作,默认是filter表 match 根据什么对包进行匹配 target 匹配到的数据包如何处理
1. command 可以见iptables的帮助 iptables -h 2. match. -p 匹配协议。协议在/etc/protocols中定义。默认的是tcp,udp,icmp。 3. match. -s,-d 匹配源地址和目的地址。可以是单个IP,也可以是网络地址。192.168.0.0/24 4. match. -f 匹配被分片的包的第二片和后面的所有片。 5. match. -m multiport --source-port 22,110 多端口匹配 6. match. -m owner --pid-owner 78 对某个进程匹配(另外如--uid-owner,--sid-owner) 7. DNAT target 改写目的IP地址,只能用在nat表中的PREROUTING链和OUTPUT链中。 SNAT target 改写源IP地址,只用于nat表中的POSTROUTING链中。 iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.9 # 将所有的访问15.45.23.67:80端口的数据做DNAT发到192.168.1.9:80 如果和192.168.1.9在同一内网的机器要访问15.45.23.67,防火墙还需要做设置,改变源IP为防火期内网IP 192.168.1.1。否则数据包直接发给内网机器,对方将丢弃。 iptables -t nat -A POSTROUTING -p tcp --dst 15.45.23.67 --dport 80 -j SNAT --to-source 192.168.1.1 # 将所有的访问15.45.23.67:80端口的数据包源IP改为192.168.1.1 如果防火墙也需要访问15.45.23.67:80,则需要在OUTPUT链中添加,因为防火墙自己发出的包不经过PREROUTING。 iptables -t nat -A OUTPUT --dst 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.9 8. MASQUERADE target 和SNAT target类似。不使用--to-source,因为伪装的,不需要指定源IP,只可选用--to-ports指定端口。对于静态IP,通常使用SNAT,保留连接跟踪,对于动态IP,通常使用MASQUERADE,不保留连接跟踪,但会占用更多的开销。 9. MIRROR target 颠倒IP头中的源地址与目的地址,再转发。 10. REDIRECT target 在防火墙内部转发包到另外一个端口,只用在nat表的PREROUTING链和OUTPUT链中。常用在透明代理中。 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-8090 11. REJECT target 和DROP基本一样。但是DROP不返回错误信息,REJECT可以指定返回的错误信息。 iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with icmp-net-unreachable 12. RETURN target 返回上一层,顺序是:子链——>父链——>缺省的策略。 13. TTL target 用来更改包的TTL,有些ISP根据TTL来判断是不是有多台机器共享连接上网。 iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64 iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 1 # 离开防火墙的时候实际上TTL已经-2了,因为防火墙本身要-1一次。 iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 1 # 离开防火墙的时候不增不减,tracert就不好用了,呵呵。 14. LOG target 在内核空间记录日志,dmesg等才能看。 15. ULOG target 在用户空间记录日志。
打开转发IP功能(IP forwarding): echo "1" > /proc/sys/net/ipv4/ip_forward 如果使用PPP、DHCP等动态IP,需要打开: echo "1" > /proc/sys/net/ipv4/ip_dynaddr
|