iptables 使用Netfilter框架旨在将对数据包窒息感如(过滤)的函数挂接进网络栈。可以理解为Netfilter提供了一个框架,iptables在它之上建立了防火墙功能。
iptables的是什么?
iptables的用户空间的命令行程序,用于配置Linux 2.4.x及更高版本IPv4报文过滤规则集。其目标是系统管理员。
iptables的包还包括 ip6tables。的 ip6tables被用于配置IPv6数据包过滤器。
依存关系
iptables的需要内核提供给ip_tables数据包过滤器。这包括所有的2.4.x及更高版本的内核版本。
主要特点
- 列出的包过滤规则集的内容
- 在添加/删除/修改规则的包过滤规则集
- 上市/清空每个规则的包过滤规则集的计数器
我们现在还提供日常的开发过程中。他们可从以下的位置:ftp://ftp.netfilter.org/pub/iptables/snapshot(或我们的任何一个镜像)。
iptables策略是由一组有序的规则建立的,它告诉内核应该如何处理某些类别的数据包。每一个iptables规则应用于一个表中的一个链。一个iptables链是一个规则集,这些规则按序语包含共同特征的数据包进行比较。
(1)规则表(table)由规则链的集合组成,不同的规则表用于实现不同类型的功能
(2)规则链(chain)由规则的集合组成,保存在规则表中;在规则表中不同的规则链代表了不同的数据包流向
(3)规则(rule) 是最基本的设置项,用于对防火墙的策略进行设置;流经某个数据链的数据将按照先后顺序经过规则的“过滤”
iptables缺省具有3个规则表:
(1)Filter:用于设置包过滤
(2)NAT:用于设置地址转换
(3)Mangle:用于设置网络流量×××等应用
不同的规则表由不同的规则链组成
(1) Filter:INPUT、FORWARD、OUTPUT
(2)NAT:PREROUTING、POSTROUTING、OUTPUT
(3)Mangle:PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD
Iptables应用
作为主机防火墙实现外部网络与主机之间的访问控制
作为网络防火墙提供外部网络与内部网络的访问控制
作为网关服务器实现网络地址转换(NAT)功能,实现内部网络通过网关主机共享访问外部网络
iptables配置文件与策略设置文件
配置文件:/etc/sysconfig/iptables-config
策略文件:/etc/sysconfig/iptables
iptables [-t tables] [-L] [-n]
参数说明:
- -t:后面接 iptables 的 table ,例如 nat 或 filter ,如果没有 -t table的话,那么预设就是 -t filter 这个 table !
- -L:列出目前的 table 的规则
- -n:不进行 IP 与 HOSTNAME 的转换,屏幕显示讯息的速度会快很多!
iptables [-t tables] [-FXZ]
参数说明:
-F :清除所有的已订定的规则;
-X :杀掉所有使用者建立的 chain (应该说的是 tables )
-Z :将所有的 chain 的计数与流量统计都归零
iptables [-t tables] [-P] [INPUT,OUTPUT,FORWARD| PREROUTING,OUTPUT,POSTROUTING] [ACCEPT,DROP]
参数说明:
-P :定义政策( Policy )。注意,这个 P 为大写啊!
INPUT :封包为输入主机的方向;
OUTPUT :封包为输出主机的方向;
FORWARD:封包为不进入主机而向外再传输出去的方向;
PREROUTING :在进入路由之前进行的工作;
OUTPUT :封包为输出主机的方向;
POSTROUTING:在进入路由之后进行的工作。
iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD] [-io interface] [-p tcp,udp,icmp,all] [-s IP/network] [--sport ports] [-d IP/network] [--dport ports] -j [ACCEPT,DROP]
参数说明:
-A :新增加一条规则,该规则增加在最后面,例如原本已经有四条规则,使用 -A 就可以加上第 五条规则!
-I :插入一条规则,如果没有设定规则顺序,预设是插入变成第一条规则,例如原本有四条规 则,使用 -I 则该规则变成第一条,而原本四条变成 2~5
- INPUT :规则设定为 filter table 的 INPUT 链
- OUTPUT :规则设定为 filter table 的 OUTPUT 链
- FORWARD:规则设定为 filter table 的 FORWARD 链
-i :设定『封包进入』的网络卡接口
-o :设定『封包流出』的网络卡接口
interface :网络卡接口,例如 ppp0, eth0, eth1....
-p :请注意,这是小写呦!封包的协定啦!
- tcp :封包为 TCP 协定的封包;
- upd :封包为 UDP 协定的封包;
- icmp:封包为 ICMP 协定、
- all :表示为所有的封包!
-s :来源封包的 IP 或者是 Network ( 网域 );
--sport:来源封包的 port 号码,也可以使用 port1:port2 如 21:23 同时通过 21,22,23 的意 思
-d :目标主机的 IP 或者是 Network ( 网域 );
--dport:目标主机的 port 号码;
-j :动作,可以接底下的动作;
- ACCEPT :接受该封包
- DROP :丢弃封包
- LOG :将该封包的信息记录下来 (预设记录到 /var/log/messages 文件)
-m :表示封包的状态,状态有底下数种:
-m mac --mac-source aa:bb:cc:dd:ee:ff
这个就是我们上面提到的可以控制 网卡卡号, MAC 的设定方法! 那个 aa:bb:cc:dd:ee:ff 就是网络卡的 MAC !
-m state --state <状态>
有数种状态,状态有:
INVALID:无效的封包,例如数据破损的封包状态
ESTABLISHED:已经联机成功的联机状态;
NEW:想要新建立联机的封包状态;
RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机!
例如使用 8080 这个 port 来启动 WWW ,但是别人都以 port 80 来联机,所以,您就可以使用上面的方式来将对方对您主机的联机传递到 8080。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
ICMP的各项类别所代表的意义
类别代号 | 类别名称 | 意义 |
0 | Echo Reply | 代表一个响应信息 |
3 | Distination Unreachable | 表示目的地不可到达 |
4 | Source Quench | 当 router 的负载过时,这个类别码可以用来让发送端停止继续发送讯息 |
5 | Redirect | 用来重新导向路由路径的信息 |
8 | Echo Request | 请求响应讯息 |
11 | Time Exeeded for a Datagram | 当数据封包在某些路由传送的现象中造成逾时状态,此类别码可告知来源该封包已被忽略的讯息 |
12 | Parameter Problem on a Datagram | 当一个 ICMP 封包重复之前的错误时,会回复来源主机关于参数错误的讯息 |
13 | Timestamp Request | 要求对方送出时间讯息,用以计算路由时间的差异,以满足同步性协议的要求 |
14 | Timestamp Replay | 此讯息纯粹是响应 Timestamp Request 用的 |
15 | Information Request | 在 RARP 协议应用之前,此讯息是用来在开机时取得网络信息 |
16 | Information Reply | 用以响应 Infromation Request 讯息 |
17 | Address Mask Request | 这讯息是用来查询子网络 mask 设定信息 |
18 | Address Mask Reply | 响应子网络 mask 查询讯息的 |