赞
踩
netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
5种规则链
4个规则表:
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
注意事项:
[root@server ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@server ~]# iptables -t filter -I INPUT -p udp -j ACCEPT
[root@server ~]# iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
[root@server ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 7 993 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 370 23696 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
[root@server ~]# iptables -t filter -D INPUT 2
[root@server ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 9 1127 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0
2 441 27884 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
[root@server ~]# iptables -t filter -F INPUT
[root@server ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
num pkts bytes target prot opt in out source destination
[root@server ~]# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 47 packets, 2804 bytes) #默认规则为ACCEPT
pkts bytes target prot opt in out source destination
[root@server ~]# iptables -P INPUT DROP #更改默认规则为DROP
[root@server ~]# iptables -nvL INPUT
Chain INPUT (policy DROP 22 packets, 1888 bytes) #默认规则变为DROP
pkts bytes target prot opt in out source destination
可直接匹配,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
常用的通用匹配条件:
[root@server ~]# iptables -I INPUT -s 192.168.209.138 -p icmp -j REJECT
[root@server ~]# iptables -I INPUT -i ens33 -s 192.168.209.140 -p tcp -j REJECT
使用-s选项或者-d选项即可匹配报文的源地址与目标地址,而且在指定IP地址时,可以同时指定多个IP地址,每个IP用"逗号"隔开,但是,-s选项与-d选项并不能一次性的指定一段连续的IP地址范围,如果我们需要指定一段连续的IP地址范围,可以使用下面显式匹配中的iprange扩展模块。
要求以特定的协议匹配作为前提,包括端口、tcp标记、icmp类型等条件。
常用的隐含匹配条件:
#拒绝来自192.168.10.10的ssh请求
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport 22 -j REJECT
#拒绝192.168.10.10主机访问本机的22-25端口
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport 22:25 -j REJECT
#拒绝192.168.10.10主机访问本机的0-25端口
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport :25 -j REJECT
#拒绝192.168.10.10主机访问本机的25端口以及其后的所有端口(直到65535)
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport 25: -j REJECT
#禁止所有icmp类型的报文进入本机
[root@server ~]# iptables -t filter -I INPUT -p icmp -j REJECT
#本主机能ping通其他主机,其他主机不能ping通本主机
[root@server ~]# iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT #8表示请求,0表示回应,3表示不可达
借助tcp隐含匹配的–sport或者–dport都可以指定一个连续的端口范围,但是无法同时指定多个离散的、不连续的端口,如果想要同时指定多个离散的端口,需要借助显式匹配的"multiport"多端口匹配。
要求以“-m扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。
常用的显式匹配条件:
#禁止来自192.168.10.10的主机上的tcp报文访问本机的22号端口、36号端口以及80号端口
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp -m multiport --dports 22,36,80 -j DROP
#拒绝来自192.168.10.10至192.168.10.20之间的主机报文访问本主机
[root@server ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.10.10-192.168.10.20 -j REJECT
使用iprange扩展模块可以指定"一段连续的IP地址范围",用于匹配报文的源地址或者目标地址。
为了让"提供服务方"能够正常的"响应"我们的请求,于是在主机上开放了对应的端口,开放这些端口的同时,也出现了问题,别人利用这些开放的端口,"主动"的攻击我们,他们发送过来的报文并不是为了响应我们,而是为了主动攻击我们,
问题就是:怎样判断这些报文是为了回应我们之前发出的报文,还是主动向我们发送的报文呢?
我们可以通过iptables的state扩展模块解决上述问题。
对于state模块的连接而言,"连接"其中的报文可以分为5种状态,报文状态可以为NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED。
我们只要放行状态为ESTABLISHED的报文即可。
[root@server ~]# iptables -t filter -I INPUT -m state --state ESTABLISHED -j ACCEPT
[root@server ~]# iptables -t filter -A INPUT -j REJECT
防火墙配置
#SNAT
iptables -t nat -I POSTROUTING -s 192.168.1.10 -o ens33 -j SNAT --to-source 12.0.0.1
#DNAT
iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens33 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10
iptables-save:保存防火墙规则,上述所有操作都是临时的,重启时规则会失效,想要永久保存,可以用iptables-save重定向到/etc/sysconfig/iptables-config,也可以备份到指定文件中,如/opt/iptables.bak
iptables-restore:恢复防火墙规则,当原有的防火墙规则被破坏时,可用备份文件进行恢复
iptables-restore < /opt/iptables.bak
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。