iptables
1、IT安全的概念和层面剖析
1) 随着互联网IT技术飞速发展,安全概念非常重要的,各种操作、配置、服务、设备等的安全性是运维人员必须时刻关注的,一旦被黑客或者误操作,导致企业的损失。安全维护不仅仅是安全人员的工作,同时运维人员也要懂一些安全策略和方法。
2) 作为运维人员,要保证企业服务器、门户网站、业务系统、数据库等安全、高效的运行,安全体现在哪些层面呢?
n 硬件层面
n 软件层面
n 系统层面
n 网络层面
3) 硬件层面,安全主要体现在什么地方?有哪些具体硬件安全需要保障呢?
n 进出机房,设置门禁、指纹识别、来访登记、具体操作的事项;
n 防止静电、监控机房温度、电子监控、空调安全运行的情况;
n 电力安全保障、UPS+服务器双电源、灭火器、消防设备;
n 接地线、防水、防地震、机房异地灾备、机柜加固、防雷。
4) 软件层面,安全主要体现在什么地方?有哪些具体软件安全需要保障呢?
n 软件服务的BUG、是否存在漏洞;
n 软件服务的安全、权限设置、对外进程、端口;
n 软件服务是否携带病毒、木马,定时检查;
n WEB页面防止篡改、数据库对外权限、执行的SQL;
n 防止人为误操作、误删除、定期备份软件服务等。
5) 系统层面,安全主要体现在什么地方?有哪些具体系统安全需要保障呢?
n Linux内核版本是否稳定、BUG、漏洞;
n 远程连接端口、SSHD服务、端口和服务;
n 登录用户名、密码安全、授权访问的IP地址;
n 启动文件、误操作、误删除、备份核心文件。
6) 网络层面,安全主要体现在什么地方?有哪些具体网络安全需要保障呢?
n 硬件设备、防火墙、交换机、路由器设备的安全;
n ARP欺骗、攻击、冒充局域网网关;
n DDOS攻击、大的流量访问;
n 过滤请求包、数据包协议、开放的策略。
2、系统层面&防护的策略
- 定期升级Linux内核版本,尽量使用稳定版本,及时给系统打补丁;
- 尽量禁止使用root用户登录,启用普通用户+sudo配置提权;
- 定期修改服务器远程登录用户名、密码,密码复杂度足够复杂;
- 引入系统级别的防火墙,关闭不必要的服务、端口、进程、设置安全策略;
- 引入杀毒软件,木马拦截工具、定期扫描服务器系统的安全;
- 编写运维服务器管理流程、规范运维人员命令、配置,防止误操作、删除;
- 7x24小时x365监控服务器系统CPU、MEM、DISK、NET、I/O使用情况;
- 引入Selinux系统级别的安全防护,限制某个软件、进程、目录访问权限;
- 定期备份操作系统重要配置文件、WEB代码、数据库、启动文件、任务计划。
3、软件层面&防护的策略
- 尽量使用普通用户运行软件服务,不建议使用root;
- 定期更新软件服务的版本,尽量使用稳定版本,及时打补丁;
- 尽可能隐藏软件服务的版本号,替换软件服务的名称;
- 保障软件服务之间的依赖库稳定、保障其兼容性、稳定性;
- 授予用户访问软件服务的权限、r、w、x权限,尽量设置最小的权限。
4、Iptables防火墙的概念
1)NetFilter/Iptables(简称Iptables)是一款开源、免费的unix/linux操作系统防火墙软件系统,基于数据包过滤的防火墙工具,主要是工作在OSI七层模型中:二层(数据链路层)、三层(网络层)、四层(传输层)。
2)NetFilter主要是工作中内核空间(Kernel Space),属于Linux内核自带的系统模块,无需安装,默认集成的,主要是由各种过滤的信息表组成的,表主要用于存储后期各种策略规则,负责规则、策略的处理、数据包过滤等工作。
3)Iptables主要是工作中用户空间(User Space),属于Linux系统自带(自行安装)的系统工具,主要是用于管理底层Netfilter模块的,默认不能直接操作内核模块的,可以通过iptables工具管理Netfilter模块中过滤表,还可以通过iptables工具在表中添加策略规则等。
4)在日常企业运维中,NetFilter和Iptables统称为Iptables防火墙,iptables防火墙默认有四张表:Raw、Mangle、NAT、Filter表,默认iptables是管理和使用Filter表。
5)四张表总共包含5条链,每条链上可以没有规则,也可以有无数的规则,规则是用于限制、允许客户端访问服务器的策略定义的,规则和规则之间没有冲突,5条链:
- RREROUTING;
- POSTROUTING;
- INPUT;
- OUTPUT;
- FORWARD。
5、IPTABLES四张表&五条链
iptables具有Filter, NAT, Mangle, Raw四种内建表。
6、Linux下IPtables下Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
- INPUT链 – 处理来自外部的数据;
- OUTPUT链 – 处理向外发送的数据;
- FORWARD链 – 将数据转发到本机的其他网卡设备上。
7、Linux下IPtables下NAT表
NAT (网络地址转换) 技术在平时是很多见的,如家庭中在使用路由器共享上网时,一般用的就是 NAT 技术,它可以实现众多内网 IP 共享一个公网 IP 上网。
NAT 的原理,简单的说就是当内网主机访问外网时,当内网主机的数据包要通过路由器时,路由器将数据包中的源内网 IP 地址改为路由器上的公网 IP 地址,同时记录下该数据包的消息;
外网服务器响应这次由内而外发出的请求或数据交换时,当外网服务器发出的数据包经过路由器时,原本是路由器上的公网 IP 地址被路由器改为内网 IP 。
SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如上图所示,如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。NAT表有三种内建链:
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链 – 处理本机产生的数据包。
8、Linux下IPtables命令图解
9、Linux下IPtables命令剖析
1.命令: -A 顺序添加,添加一条新规则 -I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行 -R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行 -D 删除,删除一条新规则 -D 后面加一数字表示删除哪行 -N 新建一个链 -X 删除一个自定义链,删除之前要保证次链是空的,而且没有被引用 -L 查看 @1.iptables -L -n 以数字的方式显示 @2. iptables -L -v显示详细信息 @3. iptables -L -x 显示精确信息 -E 重命名链 -F 清空链中的所有规则 -Z 清除链中使用的规则 -P 设置默认规则 2.匹配条件: 隐含匹配: -p tcp udp icmp --sport指定源端口 --dport指定目标端 -s 源地址 -d 目的地址 -i 数据包进入的网卡 -o 数据包出口的网卡 扩展匹配: -m state --state 匹配状态的 -m mutiport --source-port 端口匹配 ,指定一组端口 -m limit --limit 3/minute 每三分种一次 -m limit --limit-burst 5 只匹配5个数据包 -m string --string --algo bm|kmp --string"xxxx" 匹配字符串 -mtime--timestart 8:00 --timestop 12:00 表示从哪个时间到哪个时间段 -mtime--days 表示那天 -m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址 -m layer7 --l7proto qq 表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配 3.动作: -j DROP 直接丢掉 ACCEPT 允许通过 REJECT 丢掉,但是回复信息 LOG --log-prefix"说明信息,自己随便定义" ,记录日志 SNAT 源地址转换 DNAT 目标地址转换 REDIRECT 重定向 MASQUERAED 地址伪装 保存iptables规则 service iptables save # 重启iptables服务 service iptables stop service iptables start |
10、Linux下IPtables企业案例解析
含义:
:INPUT ACCEPT [0:0]# 该规则表示INPUT表默认策略是ACCEP ([ 0:0 ]里记录的就是通过该规则的数据包和字节总数。) :FORWARD ACCEPT [0:0]# 该规则表示FORWARD表默认策略是ACCEPT :OUTPUT ACCEPT [0:0]# 该规则表示OUTPUT表默认策略是ACCEPT -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT# 意思是允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。 -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT# 意思就允许本地环回接口在INPUT表的所有数据通信,-i 参数是指定接口,接口是lo,lo就是Loopback(本地环回接口) -A INPUT -j REJECT –reject-with icmp-host-prohibited -A FORWARD -j REJECT –reject-with icmp-host-prohibited # 这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。 下面来介绍一下,我添加的每个参数是什么意思,跟我没讲得允许22端口的一样 -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT -A 最后添加一条规则 -j 后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG) –dport 限制目标的端口号码。 -p 协定:设定此规则适用于哪种封包格式 主要的封包格式有: tcp, udp, icmp 及 all 。 -m state –state 模糊匹配一个状态, NEW 用户发起一个全新的请求 ESTABLISHED 对一个全新的请求进行回应 RELATED 两个完整连接之间的相互关系,一个完整的连接,需要依赖于另一个完整的连接。 INVALID 无法识别的状态。 |
11、IPtables企业案例规则实战一
WEB服务器,开启80端口; [root@www-jfedu-net ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 邮件服务器,开启25,110端口; [root@www-jfedu-net ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT [root@www-jfedu-net ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT [root@www-jfedu-net ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT DNS服务器,开启53端口 [root@www-jfedu-net ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT 允许icmp包通过,也就是允许ping, [root@www-jfedu-net ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话) [root@www-jfedu-net ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话) 将本机的8080端口转发至其他主机,主机IP:192.168.0.141,目标主机IP和端口:192.168.0.142:80,规则如下; iptables -t nat -A PREROUTING -d 192.168.0.141/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.142:80 iptables -t nat -A POSTROUTING -d 192.168.0.142/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.141 echo 1 > /proc/sys/net/ipv4/ip_forward 同时开启iptables forward转发功能。 |
12、IPtables企业案例规则实战二
生产环境,线上门户网站iptables规则策略如下:
[root@localhost ~]# vim /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Wed Dec 14 21:05:31 2016 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [602:39593] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ######################### -A INPUT -i lo -j ACCEPT -A INPUT -s 116.22.202.146 -j DROP -A INPUT -s 139.224.227.121 -j ACCEPT ########################## -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -s 116.243.139.7 -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 8801 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT #### -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Wed Dec 14 21:05:31 2016 |