在实际运维工作中,哪里还有单纯的服务器执行工作的,一般都是服务器提供一定的网络服务来让一些客户机进行访问。那么,这时候网络问题是不是就显得尤为重要了呢???
既然服务器暴露在互联网上,我们是不是要防止服务器被攻击?是不是要限制访问服务器的客户端用户?是不是要设置一定的规则来管理我们的访客呢?没错,这就用到了我接下来要讲解的一项Linux运维人员不得不知的技术--iptables防火墙。
如上图所示:防火墙分为软件防火墙和硬件防火墙两种,其中,硬件防火墙是由厂商设计好的主机硬件,这台硬件防火墙内的操作系统主要用于过滤数据包并将其他不必要的功能拿掉。因为是单纯的物理防火墙,因此数据包过滤效率最高。而我们平时工作中最长敲的那个命令iptables其实是软件防火墙,很多资料上面说的都特么太难理解了,其实防火墙说白了就是一种保护机制,用于过滤进入主机的数据包。
下面我介绍一下应用最多的一种软件防火墙--Netfilter。
其原理就是Linux内核通过Netfilter模块来实现网络访问控制。
iptables就是通过调用这种Netfilter模块来实现网络访问控制功能,大家需要知道的是iptables的组成:
四张表 + 五条链 + 匹配属性 + 规则
这里我们主要讲解最长用的两张表:filter和NAT
五条链(过滤点)分别是:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING
规则分别是:ACCEPT、REJECT、DROP
注意:REJECT和DROP都是拒绝访问的意思,但是REJECT会返回一个提示信息,而DROP则是对数据包直接丢弃。
注释:
① INPUT :入向的数据包
② OUTPUT :发出的数据包
③ FORWARD :数据包转发
④ PREROUTING :路由前修改目标IP地址
⑤ POSTROUTING :路由后修改源IP地址
实际流程图如下:
下面介绍下iptables的常用功能:
⑴ 做为服务器使用:
过滤发送到本机的数据包:INPUT链、filter表
过滤从本机发出的数据包:OUTPUT链、filter表
⑵ 做为路由器使用
过滤转发的数据包:FORWARD链、filter表
对数据包的源、目标IP地址进行修改(NAT功能):PREROUTING链和POSTROUTING链、NAT表
其规则如下:
还有三点注意事项:
1.没有指定规则表则默认指filter表。
2.不指定规则链则指表内所有的规则链。
3.在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。
iptables命令用于管理防火墙的规则策略,格式为:“iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]”。
表格为读者总结了几乎所有常用的iptables参数,不用记朋友,忘记了就来查就行了。记住,我们做运维的只要能解决问题就行。
参数 |
作用 |
-P |
设置默认策略:iptables -P INPUT (DROP|ACCEPT) |
-F |
清空规则链 |
-L |
查看规则链 |
-A |
在规则链的末尾加入新规则 |
-I num |
在规则链的头部加入新规则 |
-D num |
删除某一条规则 |
-s |
匹配源地址IP/MASK,加叹号"!"表示除这个IP外。 |
-d |
匹配目标地址 |
-i 网卡名称 |
匹配从这块网卡流入的数据 |
-o 网卡名称 |
匹配从这块网卡流出的数据 |
-p |
匹配协议,如tcp,udp,icmp,icmp就是控制ping这个命令的。 |
--dport num |
匹配目标端口号 |
--sport num |
匹配源端口号 |
下面我给你们来几个实例操作一下:
模拟训练A:仅允许来自于192.168.10.0/24域的用户连接本机的ssh服务。
模拟训练B:不允许任何用户访问本机的12345端口。
模拟实验C(答案模式):拒绝其他用户从”eno16777736“网卡访问本机http服务的数据包。
模拟训练D:禁止用户访问www.abc.com
模拟训练E:禁止IP地址是192.168.10.10的用户上网
下面我来给大家讲解一下如何进行NAT的设置:
NAT即网络地址转换,其作用就是用来修改数据包的IP地址的。
NAT分为两种:
① SNAT:源地址转换,伪装内部真实的地址(我们一般经常提到的NAT方式就是这一种)。SNAT技术可以让多个内网用户通过一个公网IP进行上网,也就是把原来的内网地址伪装成公网IP。
SNAT搭配的链是POSTROUTING
② DNAT:目标地址转换,一般用于跳转。简单的说,假如说我们有一个www服务器对外提供服务,但是这个服务器的IP是假的,我们只是为了通过这个服务器进行跳转到另外一台真正的www服务器上,以达到保护真正服务器的目的,这时候就会用到DNAT技术。
DNAT搭配的链是PREROUTING
我们先来看一下SNAT的用法:
操作一:动态伪装源IP地址:
其中,MASQUERADE是动态伪装的意思。
操作二:隐藏源IP地址为1.2.3.4
接下来是DNAT的用法:
前面已经说过DNAT是目标地址转换,也就是修改数据包的目标IP地址的意思。OK,我们接下来做个实例:
操作一:跳转到网页服务器192.168.1.10上
最后再来介绍最后一种技术:外流量均衡技术。
比如将一台主机作为网站的前端服务器,将访问流量分流至内网中3台不同的主机上。
① iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.10.10:80
② iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.10.11:80
③ iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.10.12:80