iptables介绍
iptables可以将规则组合成一个列表,在用户空间运行绝对详细的访问控制功能,定义规则的工具本身不是防火墙。 加载到内核空间中的netfilter中并定义为在防火墙上运行的规则。
放内核的位置必须是特定的位置,必须是tcp/ip协议栈通过的位置。 该tcp/ip协议栈必须通过的位置、能够实现读取规则的位置被称为netfilter .
当主机接收到一个分组时,分组首先在内核空间中处理,如果发现目的地地址是自己,则将其传递到用户空间并传递到对应的APP应用,如果发现目的地不是自己,则丢弃或传输分组。 netfilter根据iptables定义的规则决定数据的去留。
iptables实现防火墙功能的原理是,数据包通过内核的过程中有五个重要的地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING称为钩子函数,ipting
双过滤器IP(iptables ) )。
此外,在过滤ip之前,您还需要知道数据发送到您这台主机的大致流程
如下图所示
首先数据包经过PREROUTING,由该链决定数据包的方向
目标地址为本地时,向INPUT发送,让INPUT决定是否接收并发送到用户空间。 流程为-;
如果满足PREROUTING的nat表上的传输规则,则发送到FORWARD,经过POSTROUTING发送。 流程为---
主机发送分组时,流程为-
一般的过滤ip在输入链上过滤即可,如下
iptables-I input-s“192.168.0.1”- j drop///禁止对该ip的所有数据包访问
禁用对iptables-I input-s 192.168.1.0/24-j drop//192.168.1.255段中ip数据包的访问
但是,在iptables中,如果匹配多个IP地址,则会写入多个iptables规则,如果需要匹配数百到数千个IP地址,则会对性能产生很大影响。 于是就有了ipset。
过滤IP(IPSet )
ipset在这方面有了很大的改善,其最主要的是在结构和规则的检索上有很大的改善,在发生上述情况时,ipset对性能总是稳定在相对值上。 根据提供的测试结果,如果规则在300-1500之间,则对性能的影响几乎是水平线。 所以无私的鸭子防火墙规则太多的时候请试试。 iptables本身没有性能瓶颈,但由于ip集优化错误,导致netfilter读取规则的性能下降。 ipset是ip集规则的优化。
1 .安装
下载http://ipset.netfilter.org/官网ipset-6.34.tar.bz2
tar xvf ipset-6.34.tar.bz2
cd ipset-6.34
./configure
化妆
制造安装
创建ipset
创建ipsetcreateblacklisthash : net//ipset集合
ipset -L //可以显示您创建的ipset集合
ipset add blacklist 192.168.0.1 //将ip添加到您创建的ipset集合中
ipset添加黑列表10.68.22.1
//--------将创建的ipset集合设置为添加到过滤器链、INPUT链中
-------------过滤集合中的所有ip
iptables-I输入- mset-- match-setblacklistsrc-j drop
服务可移植保存
从ipset集合中删除ipset del blacklist 10.68.22.1 //以前添加的ip
ipsetsaveblacklist -将fblacklist.txt//ipset设置集合保存到文件
删除ipsetdestroyblacklist//IPSet集合
ipset restore-f重新加载black list.txt//以前保存的集合
您可以随时将不同网段的ip添加到ipset集合中,并且即使iptables规则使用此集合,也可以看到它是动态的
中动态添加的ip,规则都能立马生效四 黑名单访问日志的跟踪
ipset的加入会让你更加容易管理黑名单,但是项目有时候需要你跟踪黑名单里ip的访问 记录黑名单的访问时间和相关信息。所幸最终是iptables将ipset集合加入规则的 而iptables本身就开放了日志 而我们需要做的是开启独立的iptables日志.
1.在rsyslog.conf 添加配置
/etc/rsyslog.conf中添加不同的日志级别(默认warn(=4))
kern.* /var/log/iptables.log
重启日志配置: service rsyslog restart
2.滚动日志配置
所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长, 因此必须对日志文件进行定期清理以免造成磁盘空间的不必要的浪费。liunx下有一个专门的日志滚动处理程序logrotate,logrotate能够自动完成日志的压缩、备份、删除工作,系统默认把logrotate加入到系统每天执行的计划任务中,这样就省得管理员自己去处理了
在 /etc/logrotated.d/syslog 中追加以下语句:
/var/log/kern-warn-log {
rotate 50 剩余文件数
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
3.在iptables规则加入日志跟踪(以之前设置的ipset黑名单为例)
iptables -I INPUT -m set --match-set blacklist src -j LOG --log-prefix "ssh – blacklist "
后测试验证:通过加入黑名单ip设备 去telnet本机ip 会发现连不通 同时去cat /var/log/iptables.log 得到如下信息
而ssh – blacklist 就是iptables设置的一个标志信息 其中日志会显示数据包是从哪个网卡进来的 源数据mac,ip 和目的mac ip 数据包大小等信息。有兴趣可搜iptables默认日志字节对应的信息。