iptables学习

简介

  当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

  iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。

  iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw-->mangle-->nat-->filter

iptables学习_第1张图片
image
iptables学习_第2张图片
image

常用操作

&emsp常用操作命令 说明

-A 在指定链尾部添加规则

-D 删除匹配的规则

-R 替换匹配的规则

-I 在指定位置插入规则

例:iptables -I INPUT 1 --dport 80 -j ACCEPT
(将规则插入到filter表INPUT链中的第一位上)

-L/S 列出指定链或所有链的规则

-F 删除指定链或所有链的规则

-N 创建用户自定义链

例:iptables -N allowed

-X 删除指定的用户自定义链

-P 为指定链设置默认规则策略,对自定义链不起作用

例:iptables -P OUTPUT DROP

-Z 将指定链或所有链的计数器清零

-E 更改自定义链的名称

例:iptables -E allowed disallowed

-n ip地址和端口号以数字方式显示

例:iptables -Ln

常见规则匹配器 说明

-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议

-s addr[/mask] 匹配源地址

-d addr[/mask] 匹配目标地址

--sport port1[:port2] 匹配源端口(可指定连续的端口)

--dport port1[:port2] 匹配目的端口(可指定连续的端口)

-o interface 匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。

例:iptables -A FORWARD -o eth0

-i interface 匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。

--icmp-type 匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型

--tcp-flags mask comp 匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。

例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT
(表示匹配SYN和ACK标记的数据包)

目标动作 说明

ACCEPT 允许数据包通过

DROP 丢弃数据包

REJECT 丢弃数据包,并且将拒绝信息发送给发送方

SNAT 源地址转换(在nat表上)

例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1 

DNAT 目标地址转换(在nat表上)

例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102

REDIRECT 目标端口转换(在nat表上)

例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80

MARK 将数据包打上标记

例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

注意要点:

1、目标地址转换一般在PREROUTING链上操作

2、源地址转换一般在POSTROUTING链上操作

state:匹配指定的状态数据包

参数 说明

--state value value可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)

例子:
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

常见iptables

  MASQUERADE:是动态分配ip时用的IP伪装:在nat表的POSTROUTING链加入一条规则:所有从ppp0口送出的包会被伪装(MASQUERADE)

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

  REDIRECT:重定向,这个在squid透明代理时肯定要用到它

所有从eth1进入的请求80和82端口的数据,被转发到80端口,由squid处理。

iptables -t nat -A PREROUTING - -i eth1 -p tcp -m multiport --dports 80,82 -j REDIRECT --to-ports 80

保存和恢复iptables规则

使用iptables-save可以保存到特定文件中

  iptables-save >/etc/sysconfig/iptables_save

使用iptables-restore可以恢复规则

  iptables-restore

你可能感兴趣的:(iptables学习)