腾讯云:iptables基础
iptables 基础
iptables 基本命令
任务时间:5min ~ 10min
iptables 可以简单理解为 Linux 系统内核级防火墙 netfilter 的用户态客户端。
Linux 管理员通过调用 iptables 命令,配置 Linux 内核 netfilter 模块规则,对网络数据包的流动进行管理。
iptables 语法
我们来看看 iptables 命令的语法帮助信息,并将其保存到文本文件
想要通过步骤检查,可以在终端输入:
sudo iptables -h > ~/iptables_help
在新标签页打开帮助文本,以便后续切换标签进行查询
查看 iptables 表的规则
iptables 有[表 (tables)] 的概念,每张表又包含不同[链 (chains)],大部分情况下我们仅需要使用 filter 和 nat 两张表的链就可以完成功能。
使用以下命令可以查看 filter 表中的规则。
sudo iptables -L -n
参数解析 -L 列出规则, -n 不显示域名,命令默认显示的是 filter 表,可以通过 -t 参数来指定其他表
可以看到目前 filter 表中有 3 条链: INPUT, FORWARD, OUTPUT。 3 条链都没有任何规则存在,因此通过网卡的网络数据包不会受到任何影响。
iptables 包含 5 张表(tables):
- raw 用于配置数据包,raw 中的数据包不会被系统跟踪。
- filter 是用于存放所有与防火墙相关操作的默认表。
- nat 用于网络地址转换(例如:端口转发)。
- mangle 用于对特定数据包的修改。
- security 用于强制访问控制网络规则。
链可以看作是一系列规则集合,默认的链被用于不同的场景,用户也可以创建自定义的链。例如:
- filter 表的 INPUT 链用于进入网卡的数据包过滤
- filter 表的 OUTPUT 链用于过滤网卡对外发送的数据包过滤 一条链中的规则从上自下顺序执行。
实验
请使用 iptables 命令查看 nat 表的规则,并输出到 /home/ubuntu/iptables_nat
sudo iptables -L -n -t nat > /home/ubuntu/iptables_nat
场景:禁止访问目的地址
任务时间:5min ~ 10min
添加一条规则到 Filter 表
在没有任何防火墙规则时,尝试 ping 百度的服务器,ping 是可以正常返回的。
ping -c 4 www.baidu.com
PING qcloud.com (119.29.47.192) 56(84) bytes of data.
64 bytes from 119.29.47.192: icmp_seq=1 ttl=58 time=3.11 ms
64 bytes from 119.29.47.192: icmp_seq=2 ttl=58 time=3.10 ms
64 bytes from 119.29.47.192: icmp_seq=3 ttl=58 time=3.17 ms
假设我们作为 Linux 管理员,不希望有人从本机 ping 百度的服务器,那么就可以用到如下的 iptables 命令:
sudo iptables -I OUTPUT -p icmp -d www.baidu.com -j DROP
参数解析 -I 添加规则到链的最前面, -p 匹配协议, -d 匹配目的地址, -j DROP 将匹配的数据包实施丢掉动作
重要:
因为在 iptables 一个链中的规则是从上到下依次执行的,因此一条规则在链中的位置十分重要。
例如一条拒绝全部连接的规则 -j REJECT 一定要放在链的最后,而允许通行的规则要放在这条规则之前。
否则所有网络数据包进入链后直接匹配到这条规则,将导致所有连接被拒绝。
现在我们可以用 sudo iptables -L -n
命令看到 filter 表的 OUTPUT 链中新增了两条记录,其中 destination 地址是 DNS 返回的百度服务器 IP 地址。
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- 0.0.0.0/0 220.181.112.244
DROP icmp -- 0.0.0.0/0 220.181.111.188
这时再 ping 百度服务器会发现无法 ping 通了,因为访问百度服务器 IP 地址的数据包已经被防火墙过滤丢掉了
ping -c 4 www.baidu.com
PING www.a.shifen.com (220.181.111.188) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
实验:请添加一条防火墙规则禁止本机 ping 8.8.8.8
场景:导出、编辑、导入规则
任务时间:10min ~ 15min
在进行一系列复杂的防火墙配置时,大多数时候不建议直接调用 iptables 做规则修改。 因为任何一条错误的配置或者一个 typo (输入错误)都有可能导致严重的网络问题。
一个最佳实践是导出现有规则到文本文件,对该文本文件进行编辑,进行检查无误后再将其导入。
导出规则
通过如下命令导出所有规则到文本文件
sudo iptables-save > /home/ubuntu/iptables_rules
编辑规则
在新标签页打开 iptables_rules,在 filter 表的 :OUTPUT ACCEPT
链下面添加一条规则
-A OUTPUT -p icmp -d 114.114.114.114 -j DROP
按 Ctrl-S
保存该文件
导入规则
使用命令将编辑过的规则重新导入 iptables
sudo iptables-restore /home/ubuntu/iptables_rules
使用 sudo iptables -L -n
查看是否有禁止 ping 114.114.114.114
的新增规则
使用 sudo ping 114.114.114.114
查看新规则是否生效
清除全部规则
现在我们清除上一小节中增加的规则,还原到没有任何规则的初始状态。
Note:当你因为错误的配置 iptables 导致自己无法远程访问的时候,从 console 执行这条命令可以快速修复状态。
sudo iptables -F
查看 iptables 规则,发现前面定义的规则已经被清除。
尝试 ping 百度服务器和 114.114.114.114,都恢复到可以 ping 的状态。
iptables 还提供 -X 参数清除[自定义链], -Z 参数重置计数器
除默认链之外由用户自建的链
iptables进阶场景:黑/白名单
任务时间:10min ~ 15min
某公司禁止特定的 PC 设备访问和工作无关的网站,而其他设备则不受限制。
分析:
1.首先明确是对外访问限制,所以应该编辑 iptables OUTPUT
链进行限制
2.其次,由于目的地址可能是数百个网站,针对每一台PC配置数百条规则是不可接受的,因此我们选择使用自建一条链来实现。
3.公司只限制部分 PC 访问,因此对 PC 的匹配最好使用 IP 地址匹配,不匹配的设备则不受限制。
Note: 对于进入 INPUT
链的入站规则还可以采用 mac 匹配。
实验:
假设本机作为一台网关使用,被限制的目标网站有 114.114.114.114 和 220.181.111.188,被限制访问的 PC 就是本机。
查看本机 IP 地址。
sudo ip a show eth0
在 inet
之后的就是本机网口的 IP 地址,例如 10.135.166.86
编辑 iptables 规则:
//清除已有规则
sudo iptables -F
//清除自建链
sudo iptables -X
//新建一个叫做 BLACKLIST 的链
sudo iptables -N BLACKLIST
//当访问的源 IP 地址是本机的时候进入 BLACKLIST 链
sudo iptables -A OUTPUT -s 10.135.166.86 -j BLACKLIST
//向 BLACKLIST 链添加 2 条规则
sudo iptables -A BLACKLIST -d 114.114.114.114 -j DROP
sudo iptables -A BLACKLIST -d 220.181.111.188 -j DROP
如上配置后,会发现本机已经无法 ping BLACKLIST 中的目的地址了。
- 如果后续要增加新的禁止访问的目的地址,则只需向 BLACKLIST 链添加新规则。
- 如果需要限制另一台 PC 通过本网关转发访问外网,则只需添加一条 OUTPUT 链的源 IP 匹配规则并指向 -j BLACKLIST。
实验:
请添加一条规则,限制源 IP 为 123.123.123.123 的 PC 访问 BLACKLIST 中的所有目的地址。
进阶场景:端口映射
任务时间:10min ~ 15min
分析: 通常来讲应该首先考虑程序本身能否配置监听多个端口,或者使用负载均衡器作为代理程序。 但在本次实验中我们将使用 iptables 监听 8080 端口并将网络数据包转发给本地80端口
实验:
首先测试 telnet 0 80
和 telnet 0 8080
可以看到 80 和 8080 端口都是不通的。
接下来我们用 netcat 监听 80 端口:
sudo nc -k -l 80 &
这时候 telnet 0 80
发现 80 端口可以工作了。
退出telnet需要按 Ctrl + ] (右方括号) ,再按 q 回车。
下面我们用 iptables 做一个端口映射
sudo iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 8080 -j DNAT --to 127.0.0.1:80
这里我们用到了 -t nat 参数,表示我们使用了 netfilter 的 nat 表。在 nat 表的 OUTPUT 链上做了一个 -j DNAT 转发,将访问内网 8080 端口的数据包转向了 80 端口。
这时候 telnet 0 8080
发现 8080 端口也可以工作了。
如果是监听外网的 8080 端口转发到 80 端口,则需要执行以下命令:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
通过使用 PREROUTING 链直接将访问 8080 端口的数据包转发到 80 端口
恭喜你完成了 iptables 基础教程
任务时间:时间未知
更多 iptables 高级功能
由于条件所限,iptables nat 和路由转发能完成的更多高级功能没有覆盖到。 敬请期待后续高级课程。
腾讯云:iptables基础的更多相关文章
- 腾讯云-Linux 基础入门
Linux 基础入门 目录操作 任务时间:5min ~ 10min 创建目录 使用 mkdir 命令创建目录 mkdir $HOME/testFolder # $HOME 当前用户的家目录 root ...
- 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略
1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...
- 破局人工智能:构建AI,与腾讯云一起探索语音应用场景
本文来自腾讯云技术沙龙,本次沙龙主题为AI平台及智能语音应用解析 近年来,人工智能技术快速发展,与其他行业的结合也成为业界不断探索的方向.在人工智能基础和工具方面,AI平台已成为降低人工智能门槛的关键 ...
- To B服务想做移动化?腾讯云案例了解一下
本文由 腾讯云助手团队 发布于 腾讯云云+社区 | 导语:腾讯云那么多资源和服务,就不能手机管理吗? 能. 当用户在使用To B服务时,往往会遇到各种各样的限制: 1.操作难度:涉及各种权限.多重验证 ...
- 【CUDA 基础】0.0 腾讯云CUDA环境搭建
title: [CUDA 基础]0.0 腾讯云CUDA环境搭建 categories: CUDA Freshman tags: CUDA 环境搭建 toc: true date: 2018-02-13 ...
- 腾讯云数据库TDSQL-大咖论道 | 基础软件的过去、现在、未来
近十年来,中国基础软件发展势头迅猛,市场前景看高,越来越多的企业也正在进行基础软件升级.那中国基础软件行业目前在国际市场上有什么优势,面临哪些困境,以及未来基础软件行业会如何发展呢?腾讯云数据库邀请沙 ...
- keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群
keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...
- 腾讯云报告——MySQL成勒索新目标,数据服务基线安全问题迫在眉睫
推荐理由 大数据时代,人类产生的数据越来越多,但数据越多的情况下,也会带来数据的安全性问题,如MySQL数据库上的数据,越来越多的黑客盯上了它,今天推荐的这篇文章来自于腾讯云技术社区,主要是针对MyS ...
- 腾讯云容器服务 TKE 推出新一代零损耗容器网络
随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...
随机推荐
- 12. Ext.Ajax 对ajax的支持
转自:http://www.cnblogs.com/lipan/archive/2011/12/09/2272793.html 本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封 ...
- eclipse maven创建web项目
记录地址 jdk设置及文件包miss 实例下载地址 创建SSM整合项目 一.使用Eclipse中的maven插件创建web项目 1: 2: 3: 4: 5:maven web项目创建成功.(去掉ind ...
- *RelativeLayout的布局参数含义表,如android:layout_alignParentTop等
RelativeLayout 参数规则 一个控件的位置由横,纵两个方向上的距离决定 控件默认的位置在左上角. 单独使用以下属性都只是改变一个方向的相对位置. 如:只使用了android:layout_ ...
- DHTML_____window对象属性
<html> <head> <meta charset="utf-8"> <title>window对象属性</title&g ...
- C# 事件与委托(转载)
委托的定义 delegate 是 C# 中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate 类能够拥有一个方法的签名(signature),并且它"只 ...
- 图灵机(转自wiki)
图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻 ...
- 21 调试我们的C#程序
我们写的C#程序,很多的时候不是能一次就写对的.尤其是在实际的项目中,你经常要做的工作就是不断修改你写的程序,让它正常运行.程序有错误,主要是两种情况.一种是程序报错了,不能正常运行下去.另一种是程序 ...
- Echarts修改legend样式
legend: { icon: 'rect', itemWidth: 20, itemHeight: 10, itemGap: 10}
- 如何删除sublime目录
左侧栏的sublime目录一直删不掉,删除列直接变成了灰色. 今天才发现应该选择文件夹右击选择工程——从工程中删除文件夹. 这个设计真的很醉,删除这么常用的键还放进了第二层……
- 前端--2、CSS基础
CSS的部分: CSS四种类引入方式(了解) style的定义原则: 基本选择器 示例: 层级选择器 组合选择器 后代选择器 ★ 子代选择器 毗邻选择器 普通兄弟选择器 “与”选择器 ★ “或”选择器 ...