第十二周学习内容:防火墙、日志、时钟和sudo权限管理
第十二周作业:
1、详述iptables五链。
每台主机可能同时要打开多个端口供其他主机的进程或者服务访问,但在现今的网络环境中随意开放端口是非常危险的行为,可能会被另有企图的人所利用进行各种***。而防火墙的最根本功能就是堵住所有端口,不让网络上其他主机任意访问,就叫包过滤功能。防火墙的工作原理就是在数据包必经之地设置关卡,也可理解为钩子,在这些关卡上设置各种规则,对数据包进行过滤,只留下安全可靠的数据包进入用户空间。数据包到达主机就遇到了第一个关卡叫PREROUTING,经过路由后,部分数据包是访问本机用户空间的则会经过INPUT,而不访问本机只是进行转发的将送往FORWARD,同样的从本机发出去往其他主机的数据包先要经过OUTPUT,通过PREROUTING和OUTPUT检查的数据包在经过路由后需再经由POSTOUTING检查后方可发出,总结下来共有5个关卡:PREROUTING-INPUT-FORWARD-OUTPUT-POSTOUTING,他们所组成的架构叫做netfilter,也就是防火墙的核心。Linux的防火墙程序经过许多代的发展现在使用的是iptables,而在iptables中这5个关卡一般被称为五链。iptables的功能非常强大,除了使用最多的包过滤功能fliter以外,还有nat(地址转换)、mangle(QOS和策略路由)、raw(关闭nat时其记录的表项中的连接追踪信息),这4个功能每个对应一张表,合起来就被称为四表。所以可以把iptables的核心内容简称为四表五链,在写具体规则时一定要写清楚在哪张表的哪个链上具体部署哪项规则。
网上找了一张四表五链的图,可以更直观的理解:
2、举例实现iptables多端口匹配、连接追踪、字符串匹配、时间匹配、并发连接限制、速率匹配、报文状态匹配等应用 。
iptables上定义规则一般有两个大方向,全部拒绝放行白名单或全部放行拒绝黑名单,前者更安全一些。规则由两部分组成,匹配条件和处理动作,即根据匹配条件来尝试匹配报文,一旦匹配成功则由处理动作做出相应的处理。匹配条件可分为基本和扩展,处理动作也有基本、扩展和自定义。iptables命令的基本用法:iptables [-t+表]+命令+链+规则,默认是加在fliter表上的。
准备三台主机:IP地址为10.0.0.8-10.0.0.10。在主机3上配置iptables规则,用主机1和2去做测试,
多端口匹配:要利用扩展匹配条件,需要加载扩展模块multiport,表示以离散或连续的方式定义多端口匹配条件,最多15个。
主机3上启用了ftp和http服务,在没有配置iptables的情况下,主机1和2都可以正常访问
在主机3上做iptables安全配置,禁止主机2访问http和ftp服务,主机1依然可以正常访问
字符串匹配:顾名思义用来匹配字符串的,利用了string模块,之后还要跟上子选项--algo定义匹配算法,有bm和kmp两种,而--string则是定义具体匹配内容的。
主机3上定义iptables,拒绝向主机2发送带有“xiaomao”字符串的资源,而对主机1无影响
时间匹配:用来匹配访问时间的,使用time扩展模块,之后跟上子选项--timestart HH:MM[:SS]表示起始时间,--timestop HH:MM[:SS]表示结束时间,--weekdats #表示每周几,--monthdays #表示每月几号。
在主机3上定义规则,拒绝主机2周末两天的12:00-23:00访问,主机1无影响
并发连接限制:用来限制单个用户最多并发请求数量,使用connlimit扩展模块,之后跟上子选项--connlimit-upto #表示小于等于允许,--connlimit-above #表示大于拒绝。
主机3上定义规则,主机2的连接数最多为2,超过将拒绝
主机2上使用了ftp和ssh进行连接,此时再发起http请求就失败
速率匹配:用来限速的,是以报文个数为单位做限制,运用了令牌桶算法,使用limit模块,子选项有--limit #/second或/minute或/hour或/day表示每秒每分每小时每天发多少个数据包
主机3上定义规则,只允许主机2在1分钟之内ping5个包,超过5个将被丢弃
报文状态匹配:利用了state模块,功能非常强大,依赖于连接追踪功能。默认情况下,用户访问主机后,主机是没有能力记录下访问者的信息的,不止是web服务,所有c/s架构的服务都是如此。而在内核中有一个连接追踪模块modprobe nf_conntrack,则会在内存中建立一张连接追踪表,其中记录了用户的信息,其中就包括了state模块中所利用到的状态信息。状态信息有如下几种:NEW:新连接;ESTABLISHED:已建立的连接;UNTRACKED:不可追踪的连接;RELATED:相关联的连接;INVALID:无法识别的状态等。基于这些状态信息,就可以对iptables做出更优化的规则了。
主机3组织状态为ESTABLISHED状态的主机使用ssh登录
使用以后本地PC也无法ssh登录主机3了,所以此命令还是要谨慎使用,此模块在被动模式的ftp就很好用,在定义web服务访问规则时也可以为管理员节省许多配置烦恼。
3、举例实现iptables之SNAT源地址修改及DNAT目标地址修改和PNAT端口修改等应用。
iptables除了可以用于fliter功能,还可以提供NAT地址转换功能,分为SNAT和DNAT,源地址转换和目标地址转换。前者是服务于客户端的,其访问公网时可能没有公网IP地址,就可以通过iptables将源地址转换为公网地址;后者是服务于服务器的,主要功能在于隐藏私网服务器地址,对外公布公网地址,公网客户访问是以公网地址作为目标地址的,通过iptables再转换为私网地址并发给真正提供服务的服务器。SNAT是工作在POSTROUTING链上的,而DNAT是工作在PREROUTING链上的。
SNAT:有一个子选项--to-destination表示转换为哪个地址
DNAT:使用--to-destination表示转换为哪个地址
PNAT:使用--to-ports用来做端口映射,这利用了扩展动作REDIRECT。
4、简述sudo安全切换工具,及详细讲解visudoer。
生产环境中很少会用到管理员去直接登录系统,因为非常危险,一个误操作后果将不堪设想。一般都会使用普通用户登录系统,在要用到管理员权限时,利用su命令可以临时切换到管理员去执行相关操作,但依然存在风险,而sudo命令是一个比较合适的解决办法。sudo:能够让获得授权的用户以另外一个身份运行指定命令,用法:sudo+想要执行管理员权限命令,如,sudo useradd user1。sudo的授权可以通过修改配置文件/etc/sudoers来设置,也可以通过visudo命令,既可以修改配置文件又可以检查语法错误。
visudoer:此文件定义了授权配置,格式为who where=(whom)+命令,表示哪个用户在哪台主机上以哪个身份可以运行哪些命令,如,user1 ALL=(ALL) /usr/sbin/useradd,表示user1可以在所有主机上以所有用户身份运行useradd命令,此格式中还有些配置选项:“!”表示非,如,命令段配置为“ALL,!/bin/su”表示其他所有命令都行,但不允许使用su命令,否则sudo su -root就又可以切换到root用户了,非常危险,同样的/usr/bin/passwd命令也应该禁掉;“NOPASSWD”表示无需密码也能sudo执行的命令,加在命令之前。visudoer配置文件中还定义了一个默认组wheel,只要把用户加入该组就可以获得ALL权限;User_Alias和Cmnd_Alias定义用户和命令的别名,可以依靠别名类配置授权。
使用visudo命令进入配置文件设置,添加用户权限
切换到普通用户登录系统
执行useradd命令
执行su命令