iptables摘要

原创 0301  2017-03-29 17:20 
一.iptables的三张表(命令iptables -L -n查看到的表是默认的filter表)
  iptables有三张表,分别为:
filter:管理本机数据包的进出。
nat:管理后端主机(防火墙内部主机的)访问internet
mangle:管理有特殊标记的包(此表使用的较少,本文不介绍)
除了三张默认的表外,我们还可以自定义额外的链。
    每个表格与其中的链的用途如下。
1)filter:主要跟Linux本机有关,是默认的table.
-》INPUT:主要与数据包想要进入Linux本机有关
-》OUTPUT:主要与linux本机所要送出的数据包有关
-》FORWARD:与linux本机没有关系,它可以将数据包转发到后端的计算机中,与NAT表的相关性很高
2)nat:这个表格主要用于来源地与目的地的IP或port转换,与本机无关,主要与linux主机后的内部计算机
有关
-》PREROUTING:在进行路由判断之前执行的规则(DNAT/REDIRECT)
-》POSTROUTING:在进行路由判断之后执行的规则(SNAT/MASQUERADE)
-》OUTPUT:与发送出去的数据包有关
3)mangle:这个表格主要是与特殊数据包的路由标记有关,早期仅有PREROUTING及OUTPUT链;从kernel
2.4.18之后加入了INPUT及FORWARD链,由于这个表格与特殊标记相关性较高,我们不再讨论。
二.本文中把开启了iptables的Linux充当一台安装了两块网卡,分别连接了内网和外网的防火墙。
1)先来看看目前本机的防火墙规则是怎样的吧。
#iptables [-t tables] [-L] [-nv]
参数:
-t:后面接table,例如nat 或 filter,若省略此项目,则使用默认的filter.
-L:列出目前的table的规则
-n:不进行IP与HOSTNAME的反查,显示信息的速度会快很多
-v:列出更多的信息,包括通过该规则的数据包的总个数,相关的网络接口等
范例:列出 filter 表格的3条链的规则
#iptables -L -n
范例:列出更多信息
#iptables -L -nv
范例:列出nat表格中的规则项目:
#iptables -t nat -L -n
2)清除表中的规则
#iptables [-t tables] [-FXZ]
参数:
-F:清除所有的已定规则
-X:除掉所有用户“自定议”的链(应该说的是tables)
-Z:将所有的chain的计数与流量统计都归零
范例:清除本机防火墙filter的所有规则
#iptables -F
#iptables -X
#iptables -Z
这三个命令会将本机防火墙的所有规则都清除,但却不会改变默认策略(policy),所以如果不是在本机下
达这三行命令,很可能会将自己挡在家门口(若INPUT设置为DROP)。
3)定义默认策略(policy)
清除规则之后,接下来就要设置规则的策略了。还记得策略指的是什么吗?当数据包不在我们设置的规则之
内时,该数据包通过与否,以policy的设置为准。通常将INPUT的policy定义为DROP,其它两个定义ACCEPT.
#iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT/DROP]
参数:
-P:定义策略(policy)。注意,这个为大写的P
ACCEPT:该数据包可以接收
DROP:该数据包直接丢弃,不让client端知道为何被丢弃
范例:将本机的filter表中的INPUT默认策略设置为DROP,其他设置为ACCEPT
#iptables -P INPUT DROP
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
可以用同样的方法修改nat表,加上 -t nat 及修改相应的链即可。
三.数据包的基础比对IP/netmask I/O设备
下面就开始进行数据包的比对设置。我们先由最基础的IP与网段特征开始设置,然后再考虑网卡设备的限制
#iptables [-AI 链] [-io 网卡接口] [-p 协议] [-s 源ip/网段] [-d 目标ip/网段] -j [ACCEPT/DROP]
参数:
-AI 链:针对某条链进行规则的“插入”或“添加”
-A:新增加一条规则。该规则增加在原规则的最后面
-I:插入一条规则。如果没有指定此规则的顺序,默认是插入娈成第一条。
例如原本有四条规则,使用-I插入一条规则后则刚插入的那条变成第一条,原来的四条规则都向后移一位。例如在-I指定了顺序(-I INPUT 3),则插入后,此条规则变成了第三的位置。
-io 网络接口:设置数据包进出的接口规范。
-i:数据包所进入的那个网络接口,例如eth0等,需要跟INPUT链配合
-o:数据包传出的那个网络接口,需与OUTPUT链配合
-p 协议:设置此规则适用于哪种数据包格式。主要的数据包格式有:tcp/udp/icmp/all
-s 源IP/网段:设置此规则的数据包来源地址,可以是IP,也可以是一个网段,例如:
IP:192.168.1.1
网段:192.168.1.0/24  192.168.1.0/255.255.255.0 均可以。
如果设置为“不许”时,在IP或网段前面加个“!”,表示除了哪个IP/网段。
-d 目标IP/网段:同-s一样,只是这里指的是目标IP/网段
-j:后面接操作,主要的操作有接受(ACCEPT)、丢弃(DROP)、记录(LOG)
范例一:所有来自lo这个接口的数据包,都予以接受
#iptables -A INPUT -i lo -j ACCEPT
仔细看会发现没有-s和-d的参数,这表示不论数据包来自何处,想要去往何处,只要是来自lo这个接口,就予以接受。相当于any any
范例二:来自192.168.1.1这个IP的数据包都予以接收
#iptables -A INPUT -i eth0 -s 192.168.1.1 -j ACCEPT
不管什么数据包格式,只要来自192.168.1.1就予以接受
范例三:来自192.168.1.0/24可接受,但来自来192.168.1.10的所有包丢弃
#iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP
#iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
上述这个范例很重要,因为与顺序有关,要先丢弃192.168.1.10后再允许1.0这个网段。
如果想要记下某个规则的记录该怎么办?可以这样做:
#iptables -A INPUT -s 192.168.2.200 -j LOG
注意,上面这个规则没有定义网络接口,也就说,不管从哪个接口,只要源IP是这个,就记录进日志
即/var/log/messages这个文件中
四.协议TCP/UDP的规则比对
在谈到TCP和UDP时,比较特殊的是那个端口,在TCP方面则另外有所谓的联机数据包状态,包括最常见的SYN
主动联机数据包格式。那么如何针对这两种数据包格式进行防火墙的规则设置呢?如下:
#iptables [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 源IP/网段] [--sport 端口范围] [-d 目标IP/网
段] [--dport 端口范围] -j [ACCEPT|DROP]
参数:
--sport 端口范围:限制来源的端口号码,端口号码可以是连续的,例如 1024:65535
--dport 端口范围:限制目的地的端口号码。
范例一:想要联机进入本机PORT 21的数据包都阻止:
#iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
范例二:想连到主机端口(upd port 137,138 tcp port 139,445)的都放行
#iptables -A INPUT -i eth0 -p upd --dport 137:138 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
范例三:只要来自192.168.1.0/24的1024:65535端口的数据包,想要联机到本机的ssh port,就予以阻止:
#iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP
注意:如果使用--sport及--dport这两个参数,就必须指定tcp或udp数据包格式,否则iptables会报
错“Unknown arg”。
范例四:将来自任何地方来源的port 1:1023的主动联机到本机的1:1023联机丢弃
#iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 -j DROP
五.状态模块:MAC与RELATED
状态模块是用来分析想要进入防火墙的数据包是否为刚刚发出去请求的响应,如果是,就予以放行,如果不
是,就会拒绝进入。
#iptables -A INPUT -m state --state 状态
参数:
-m :一些Iptables的模块,主要觉的有(state:状态模块|mac:网卡硬件地址)
--state :一些数据包的状态,主要有:
INVALID:无效的数据包,例如数据破损的数据包状态
ESTABLISHED:已经联机成功的联机状态
NEW:想要新建立联机的数据包状态
RELATED:这个最常用,表示数据包与我们主机发送出去的数据包有关联
范例一:只要是联机成功的数据包或与已发出去请求相关的数据包就予以通过,不合法数据包就丢弃。
#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -m state --state INVALID -j DROP
范例二:针对局域网内的aa:bb:cc:dd:ee:ff主机开放其联机
#iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
参数:
--mac-source:源主机的MAC
通过这玩意儿,你就可以更严格地定义LAN内的其他主机能否联机到本机权限了
六. ICMP数据包的规则的比对
ICMP的格式相当多,而且很多ICMP数据包的类型格式都 是进行网络检测用的,所以最好不要将所有的ICMP
数据包都丢弃.通常我们会把ICMP type 8 (echo request)拿掉,让远程主机不知道我们是否存在,也不
会接受ping的响应。数据包格式的处理是这样的:
#iptables -A INPUT -p icmp --icmp-type 类型 -j ACCEPT
参数:
--icmp-type :后面需要接ICMP的数据包类型,也可以使用代号,例如8代表 echo request 的意思
范例:ICMP type 为 0,3,4,11,12,14,16,18的数据包可以进入本机:
#vi somefile
---------------------------
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
icmp_type="0 3 4 11 12 14 16"
for typeicmp in $icmp_type
do
iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
done
----------------------------
#sh smoefile
这样就能够开放部分的ICMP数据包格式进入本机进行网络检测工作。
七.防火墙的记录、恢复与测试
我们可以使用下面的两个命令将当前的主机上的防火墙规则“储存”下来,在下次想要恢复这个规则时,可
以使用命令直接恢复。
#iptables-save > filename
这个命令是保存当前主机防火墙规则的命令,并把这些规则重定向到filename文件中
#iptables-restore < filename
这个命令是把保存在filename文件中的防火墙规则回复成当前规则。
而在Red Hat系统的RHEL,CentOS,Fedora中,如果将filename文件存为"/etc/sysconfig/iptables",并且利
用chkconfig将iptables设置为开机默认启动,那么一开机系统就会主动加载防火墙规则啦。
本文地址:http://www.xplus.vip/?p=24
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:ThreeHotIceTea
版权声明:本文为原创文章,版权归 0301 所有,欢迎分享本文,转载请保留出处!

发表评论


表情