Iptables 是用来设置、维护和检查Linux内核的IP包过滤规则的。
可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处理与之相匹配的包。这被称作‘target’(目标),也可以跳向同一个表内的用户定义的链。
Iptables中的filter表一般就是用来配置过滤用的。
Iptables的最大优点是它可以配置有状态的防火墙,这是ipfwadm和ipchains等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为ESTABLISHED、INVALID、NEW和RELATED。
状态ESTABLISHED指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态NEW意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后,RELATED表示该信息包正在启动新连接,以及它与已建立的连接相关联。
iptables的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。用户可以定制自己的规则来满足特定需求,从而只允许用户想要的网络流量进入系统。
另外,iptables是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
iptables由四个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
这五个规则链也被称为五个钩子函数(hook functions),五个位置。
iptables -V
whereis iptables
iptables --help
iptables -t filter –L
iptables -t nat -L
iptables -t mangle –L
iptables -t raw –L
ip_tables_names
)iptables -t filter/nat/mangle/raw -L INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
查看某条链的rule。iptables –t nat –L PREROUTING
。/proc/net
iptables –t /raw/mangle/nat/filter –X
。如:iptables -t raw -X
,因为此时没有建链,所以没效果iptables –t raw/mangle/nat/filter –F
。其实就是把规则一个个删除。(注:-F删除,-L查看)Kali上的iptables不以服务形式管理。在Kali启动时iptables默认自动启动。
Kali系统保存iptables规则的方式也比较特殊。下面举一个例子:
输入策略:操作机可以ping目标机;目标机不能ping操作机。
指令:iptables -A INPUT -p icmp --icmp-type 8 -j DROP
保存到文件:iptables-save > /etc/iptables.up.rules
查看文件:cat /etc/iptables.up.rules
重启后添加的规则会丢失,这时我们可以在网络启动时应用我们保存的规则。
则可以这样做:
打开文件:gedit /etc/network/interfaces
添加:pre-up iptables-restore
保存退出
现有规则如下:
则执行iptables -F && iptables -L
设置filter表中3个链的默认策略为拒绝。
命令如下:iptables -P INPUT DROP && iptables -P OUTPUT DROP && iptables -P FORWARD DROP
使用iptables -L查看是否设置成功。结果如图所示(把我的ssh都断了):
可以看到,都DROP了。
向filter表的INPUT链的最后添加一条规则,对来自10.10.10.254这台主机的数据包丢弃。命令如下:iptables -A INPUT -s 10.10.10.254 -j DROP
向filter表的INPUT链中添加一条规则,拒绝来自其他主机的ping请求。命令如下:iptables -A INPUT -p icmp --icmp-type 8 -j DROP
(之前做过,这里就不重复了)
删除规则:iptables -F
设置接受数据包:iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT
定义规则:iptables -t filter -A INPUT -s 10.10.10.254 -p icmp -j DROP
注:-t 表;-A 链;-s 源地址;-p 协议;-j 目标(动作)
现在不要IP为10.10.10.254这台主机了,转向系统为winxp、IP为10.10.10.130。在winxp主机上安装科来网络分析系统进行抓包分析。
注:当然,wireshark、fiddler也OK
iptables [-p table] 链管理 chain
-t table : filter,nat,mangle,raw (默认为 filter)链管理:
-F : 清空规则链
-N :创建新的自定义规则链
-X : drop 删除用户自定义的规则链
-P : Policy 为指定链设置默认策略;iptables -t filter -P FORWARD DROP
-E:重命令自定义链规则管理:
-A:蒋新规则添加到指定的链上
-I:将新规则插入到指定的位置
-D:删除链上的指定规则
-R:替代指定链上的规则查看:
-L:列表,列出指定链上的指定的规则
-n -v –line-numbers -x 等参数匹配条件:
基本匹配:
-s 原地址IP
-d 目的IP
-p 协议{tcp|udp|icmp}
-i 数据报文的流入接口
-o 数据报文的流出接口扩展匹配:-m match_name
-dport PORT:目标端口,可以是单个端口
-sport PORT:源端口
-p udp|tcp|icmp
–icmp-type
0 : echo-reply
8 : echo-request目标(filter):
-j TARGET:jump至指定的TARGET
- ACCEPT 接受
- DROP 丢弃
- REJECT 拒绝访问
- RETURN 返回调用链
所以,根据上图,我们能够想象出某些常用场景中,报文的流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING
其中,数据流图如下:
因为各个表有着不同的链,故他们分别是这样的:
windows server 2008 IP:10.10.10.133(用户:administrator 密码:abc123+
kali IP:10.10.10.128
linux IP:10.10.10.254(网关)
linux IP:10.10.10.129(服务器)
设置windows开启telnet:
iptables -A OUTPUT -p tcp --dport 23 -j DROP
解析:首先禁止telnet就意味着我们禁止的是自己的,当然就得用OUTPUT,而不是INPUT,指定telnet的协议tcp,指定端口–dport为23,然后指定你要干嘛-j DROP(抛弃)
iptables -A INPUT -p icmp -j DROP
首先,mangle表示用来干嘛的?用于对特定数据包的修改!
通过第一章的总结,我们知道mangle里面都有哪些链,分别是:
注:清空大师:iptables -F && iptables -X
注意,mangle表仅有的-j 目标有:
对10.10.10.133
进行Ping:
我们可以看出返回的ttl值为128:
TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段。TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。
现修改ttl值:iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 66
结果如下:
解析:这里的包肯定是传进来的,在INPUT之前就得修改包的内容(不然就只给自己看啊),所以得使用PREROUTING表。然后选定网卡(IP地址是10.10.10.128的网卡,如果有多张又不指定,就完了),至于目标-j,这个没有DROP(这是filter的)。。。还包括TTL,了解详细设置可以执行指令:
iptables -j TTL -h|more
1MARK(特殊标记,用来做高级路由),分别使用以下命令:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 3
- 命令解释:在对数据包路由之前,可以根据协议,端口等对数据包进行标记。这里我们列举ssh(端口为22)标记值为2;http(端口为80)标记值为3。。
- MARK用来给包设置特殊的标记。iproute2能识别这些标记,并根据不同的标记(或没有标记) 决定不同的路由。用这些标记我们可以做带宽限制和基于请求的分类。将封包做标记,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。
要求找一条路径使延时最小,一些标准服务如SSH、FTP- control 就需要这个选项。
命令:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j TOS --set-tos 0x10
使用命令:iptables -t mangle -L
首先IP为10.10.10.129开启tomcat功能:
Kali执行命令:
ab -c 1000 -n 5000 http://10.10.10.129:8080
注:如果测试第一次失败了,可以多次尝试。
- ab是apachebench命令的缩写。
- ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试tomcat的负载压力,也可以测试nginx、lighthttp、apache、IIS等其它Web服务器的压力。
- ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。
- -c命令为:一次产生的请求个数。默认是一次一个。
iptables -t raw -A PREROUTING -p tcp -m tcp --dport 8080 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp -m tcp --sport 8080 -j NOTRACK
使用“iptables -t raw -L”查看向raw表添加的规则。如图。
通过NOTRACK给不需要被连接跟踪的包打标记,也就是说,如果一个连接遇到了-j NOTRACK,conntrack就不会跟踪该连接
Iptables–A是添加规则的命令
sport, source port 源端口
dport, destination port 目的端口
Agnitum Outpost Firewall Pro是一个受到越来越多用户喜爱和关注的优秀防火墙,占用资源相对较小,设置灵活方便,稳定强悍,可以算得上个人防火墙中的佼佼者了。东西虽好,可是很多人在使用中只是让软件的默认设置在发挥作用,而防火墙的默认设定往往更侧重于兼容性方面的考虑,想让防火墙更好的发挥作用,就需要你根据自己的网络情况作出调整和配置。
具有一般防火墙常有的应用程序访问规则控制以及独特的私人信息保护(防止密码泄露)、内容管理(防止查看不合适的网页内容,允许按特定关键字以及特定网地进行过滤)、DNS 缓存保护、Web页交互元素控制(过滤您不需要的例如 GIF/ActvieX/Flash/图片等界面元素)、反间谍软件(带有类似杀毒软件实时监控,防止恶意软件的入侵)、特定应用程序行为控制等。独特的自我保护机制可以防止Outpost自身被恶意软件非法终止或运行所需的文件被篡改。
网络防火墙 (OutPost Firewall Pro)是一款功能之强大,可以秒杀很多防火墙软件,包括了广告和图片过滤、内容过滤、DNS缓存等功能。它能够预防来自Cookies、广告、电子邮件病毒、后门、窃密软件、解密高手、广告软件和其它Internet危险的威胁。
Agnitum Outpost Firewall是一款短小精悍的网络防火墙软件,2009年世界排名第二,它的功能是同类PC软件中最强的,甚至包括了广告和图片过滤、内容过滤、DNS缓存等功能。它能够预防来自Cookies、广告、电子邮件病毒、后门、窃密软件、解密高手、广告软件和其它 Internet 危险的威胁。该软件不需配置就可使用,这对于许多新手来说,变得很简单。尤为值得一提的是,这是市场上第一个支持插件的防火墙,这样它的功能可以很容易地进行扩展。该软件资源占用也很小。
包过滤可以分为协议包过滤和端口包过滤。
协议包过滤是因为数据在传输过程中首先要封装然后到达目的地时再解封装,不同协议的数据包它所封装的内容是不同的。
协议包过滤就是根据不同协议的封装的包头内容不一样来实现对数据包的过滤。可以分为IP包过滤、TCP包过滤、UDP包过滤等多种数据包的过滤。
端口的包过滤和协议包过滤类似,只不过它是根据数据包的源端口和目的端口来进行的包过滤。
所谓防火墙指的是一个有软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问政策、验证工具、 包过滤和 应用网关4个部分组成,
防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件(其中硬件防火墙用的很少只有国防部等地才用,因为它价格昂贵)。该计算机流入流出的所有网络通信均要经过此防火墙。
软件防火墙单独使用软件系统来完成防火墙功能,将软件部署在系统主机上,其安全性较硬件防火墙差,同时占用系统资源,在一定程度上影响系统性能。其一般用于单机系统或是极少数的个人计算机,很少用于计算机网络中。
推荐下载地址:https://www.onlinedown.net/soft/57372.htm
如图设置,当有人ping自己时,会拦截,并记录: