Linux系统防火墙之iptables
防火墙在一个系统中就好像是一个国家的军队,所谓国无军不安,在系统中也是这样,防火墙可以保护系统被别人攻击,过滤垃圾流量等,那么今天我们就来了解一下Linux系统中的一种防火墙iptables。
目录
iptables概述
规则
链
表
iptables操作使用
iptables常用选项
具体操作
内部网络中的pc1采用SNAT访问外部互联网,但是无法ping到内部网关。
内部网络服务器s1通过DNAT发布服务到互联网。
互联网主机pc2能够访问s1服务器,但是不能够进行ping和ssh连接。
iptables概述
iptables由表、链以及若干规则组成
规则
就是告诉iptables防火墙该做什么,等于是一个工作标准。
链
某些规则的集合就是链,每个链都有一定的相同点,分别为INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING,从字面上的意思也能大概理解。
- INPUT:入站的数据包应用此链中的规则
- OUTPUT:出站的数据包应用此链中的规则
- FORWARD:转发的数据包应用此链中的规则
- PREROUTING:想要修改目的地址数据包应用此链中的规则
- POSTROUTING:想要修改源地址数据包应用此链中的规则
表
是若干规则和链的集合,分别为raw、mangle、nat、filter,这里我们重点了解常用的filter和nat
- filter:负责过滤数据包
- nat:负责地址转换
- raw:确定是否进行转台跟踪
- mangle:做流量整形,修改数据包内容
iptables操作使用
iptables常用选项
- -t 指定表名
- -j 指定控制类型
- -A 在指定链的末尾追加一条新的规则
- -I 在指定链的开头插入一条新的规则
- -R 修改、替换指定链中的某一条规则
- -P 设置指定链的默认策略
- -D 删除指定链中的某一条规则
- -F 清空指定链中的所有规则
- -L 列出指定链中所有的规则
- -n 使用数字形式显示输出结果
- -v 显示详细信息
- --line-numbers 显示规则的序号
- -p 指定要匹配的数据包的协议类型
- -s 指定要匹配的数据包的源IP地址
- -d 指定要匹配的数据包的目的IP地址
- -i 指定数据包进入本机的网络接口
- -o 指定数据包离开本机做使用的网络接口
- --sport 指定源端口号
- --dport 指定目的端口号
命令的选项有点多,为了方便记忆,这里结合例子进行讲解,会更加的简单易懂。
具体操作
创建一个实验环境,三个局域网互联,一个为内部网络,一个为外部网络,一个为服务器网络
内部网络IP192.168.50.1 服务器网络IP192.168.60.1 外部网络IP192.168.70.1
与防火墙相连,防火墙开启IP地址转换
内部网络中的pc1采用SNAT访问外部互联网,但是无法ping到内部网关。
分析一下,PC1采用SNAT访问外部互联网,就是在PC1访问外部互联网时,将IP地址转换为公网IP,具体命令如下
首先是PC1访问外部互联网,意思就是改变源地址,所以选择nat表,POSTROUTING链,
从192.168.50.0/24这个网段出发,通过ens256(连接防火墙的网卡),通过SNAT将地址转换成192.168.70.254即可实现前半个要求
无法ping到内部网关,命令如下
即来自192.168.50.1的icmp类型的请求数据会被丢弃,就无法ping通了
内部网络服务器s1通过DNAT发布服务到互联网。
逻辑与SNAT相反,将想要进来的IP地址转换成内部网段,命令如下
即从外部网络的从192.168.70.254地址,ens256,这里我的网络服务是nginx服务因此端口为80号端口,目的网络IP为192.168.60.1即服务器的IP地址。
互联网主机pc2能够访问s1服务器,但是不能够进行ping和ssh连接。
具体命令如下,
第一条即,从ens256到ens224的目的为192.168.60.1的tcp,接口为80的数据会被接收
第二条即,从ens256 目的是192.168.60.1的icmp的ping请求包会被丢掉
第三条即,从ens256目的是192.168.60.1的tcp,接口为22的(ssh)的包会被丢弃
这只是一个思路,通过不同的规则也可以达到同样的效果,所以大家可以发散思路,多练多看就可以掌握iptables的设置方法了。