如何配置Ubuntu 14.04中的IPTables防火墙

如何配置Ubuntu 14.04中的IPTables防火墙,第1张

在Ubuntu 1404中配置IPTables的规则
IPTables基本命令
在向大家介绍复杂防火墙规则之前,还是先上一些简单的料,让大家对IPTables最为基本的命令有一些简单了解。
首先要说明的是IPTables命令必需以root权限运行,这意味着需要使用root身份登录或者能够有权限使用su或sudo -i取得root Shell。下面的内容中都使用sudo,这也是Ubuntu系统上的首选方法。
最好的起点就是先通过“-L”参数来查看下当前系统的所有IPTables规则:
sudo iptables -L
可以看到Linux中都有的3个常用默认链(INPUT、OUTPUT和FORWARD),同时也可以看到每个链的缺省策略(每个链对默认策略都是接受),在此可以看到Ubuntu中并没有添加任何默认规则集。
如果希望通过命令来查看每个链的默认规则,可以使用“-S”参数:
sudo iptables -S
如果看到IPTables里面已经有规则了,并希望取消这些规则后重新更配置话,可以使用“-F”参数来清空已有的规则集:
sudo iptables -F
虽然“-F”参数可以清空并刷新链中所有的现有规则集,但并不会对链的默认策略进行更改。因此,如果是在更改远程VPS防火墙策略的话需要在“-F”清空所有规则时先将INPUT和OUTPUT链的默认策略恢复到ACCEPT,以免规则清空后SSH连接被阻断。要做到这一点可执行如下命令:
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
在配置好允许SSH连接后(下面介绍),再将INPUT和OUTPUT链的默认规则更改为DROP即可。
创建自已的IPTables规则
现在就要开始为的VPS创建自定义的防火墙规则啦,正如上篇文章中所说,由于INPUT链会处理所有连接到服务器的入站数据包,因此的所有 *** 作都与INPUT链有关。现在先来配置服务器允许SSH连接。
完整命令应该是这样的:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
说明:
-A INPUT :表明要将此规则追加到某个链的最后,由于要 *** 作INPUT链接,所以这么写。
-m conntrack :iptables除了自己的核心功能外还只有一些实用的扩展和模块,这个参数表明添加conntrack模块提供的能力。(conntrack模块可以根据先前的连接来确定数据包之间的关系)
–ctstate :该参数是conntrack模块提供的,它可以确定如何用现在的数据包去匹配先前获得的数据包。ESTABLISHED值将自动允许现有连接的数据包,RELATED值将允许已建立连接的相关数据包。(这样就与SSH会话特性相匹配上了)
-j ACCEPT :这个参数用于指定匹配的数据包的目标。用在这里表示接受和允许符合上述标准的数据包通过。
配置好后来看一下:
sudo iptables -L
现在,应该已经知道IPTables的基本语法了,下面继续添加规则打怪,以期尽快升级为高手。
接受其它必要连接
大家的VPS上一般SSH服务的22端口,Web服务器的80端口及Mysql的3306端口都是需要打开的,不然怎么对外提供服务呢。因此也需要通过如下命令在IPTables中打开这些端口:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
为了保证的VPS能够正常运行,还需要添加一条允许规则。通常,计算机上的服务都会发送网络数据包以保持彼此之间的通信。而这种通信会利用到一个名叫loopback的伪网卡将流量引导回自己。因此,还需要为loopback网卡添加一条允许规则。
sudo iptables -I INPUT 1 -i lo -j ACCEPT
-I INPUT 1 :与“-A”不同,它可以指定要将规则添加到该链的位置。
实施Drop规则
前面讲的内容其实都是基于一个前提假设的,但事先需要先把防火墙的2种常用模式说明一下。一种是明确定义允许通过防火墙的规则,不匹配的都丢弃。另外一种是明确定义拒绝通过防火墙的规则,其余的都允许。的前提假设采用的就是第一种方式,这样配置起来相对简单,规则也较少,也更加安全。
前面已经为INPUT链接定义了一些允许规则,但默认INPUT链是允许所有包,所以现在需要将INPUT链的默认规则更改为“Drop”即丢弃。通过如下命令完成更改:
sudo iptables -P INPUT DROP
查看和保存配置
IPTables的配置是立即生效的,前面已经介绍过,在配置好之后可以直接用“-L”参数进行查看,这里再另外增加一个“–line-numbers”参数,它主要用于显示行数,对于规则较多时的查看非常方便。
sudo iptables -L --line-numbers
虽然IPTables的命令执行后会立即生效,但这个生效过程其实是临时的,系统在重启之后便会丢失。因此,还需要将这些配置添加到配置文件当中,以保证系统在下次重启后会自动载入的IPTables防火墙规则。
sudo apt-get update
sudo apt-get install iptables-persistent
该命令脚本下载执行后会询问是否对IPTables配置进行保存,如果确定的话选择“是”即可。保存后下次重启系统也不会造成配置丢失了。

Bishop labs用了两期博客,前后各总结了9个红队工具,共计18个红队使用的优秀渗透工具,其博客文章也提及,这份清单不是决定性的,也仅用于参考。

创建者: @IAmMandatory

用途:允许 谷歌 Chrome 浏览器将受害者的浏览器变成测试代理。

优点: CursedChrome 可以很容易地在红队参与期间模拟恶意浏览器扩展。用来劫持 Chrome 浏览器,绕过大多数 2FA 或其他可能存在的安全保护,并利用 cookie 来访问任何基于网络的目标。


创建者: @symbolcrash1

用途: Universal Loader 是一个 Golang 库,可以跨多个平台(Linux、Windows 和 OSX)从内存中加载共享库,而无需CGO。

优点: Universal Loader 可以用在新的 Apple M1 芯片上,值得一提的是,这个 Golang 库没有使用 memfd,这使它成为第一个这样做的 Golang Linux 加载器。由于这两个原因,Universal Loader 是一个相当令人印象深刻的红队工具。

创建者: QSecure Labs

用途: Overlord 是一个基于 Python 的控制台命令行界面,用于自动化红队基础设施。

优点: 在红队参与期间能够根据需要快速启动安全基础设施非常重要,该工具可以节省大量时间,然后可以将这些时间用于进行一些实际的黑客攻击。

创作者: @LittleJoeTables和@rkervell

用途: Sliver是一个用 Golang 编写的跨平台通用植入框架。

优点: 这个工具是两位 Bishop Fox 研究人员的创意,所以我们的偏见可能会表现出来。类似于商业工具Cobalt Strike。使 Sliver 值得注意的是诸如使用每个二进制混淆的动态代码生成、多个和可扩展的出口协议以及支持多个 *** 作员同时控制植入物等功能。此外,它易于使用且运行速度快。

创作者: @tillson_

用途: 使用 Githound 来定位暴露的 API 密钥和其他围绕 GitHub 浮动的敏感信息。该工具通过模式匹配、提交 历史 搜索和“独特的结果评分系统”工作。

优点: 像 Githound 这样的秘密窃取工具并不少见,但这并没有使这个工具(或其他类似工具)的价值降低。Githound 的一些可能用例包括检测暴露的客户 API 密钥以及员工 API 令牌。如果您进行漏洞赏金,此工具可用于添加书签 - 有些人报告说,由于它,因此获得了数千美元的赏金。

创作者: @browninfosecguy

用途: 这个工具的名字说明了一切,在 PowerShell 中轻松地为 Microsoft Active Directory 设置实验室。

优点: 速度很快,效果很好。可以使用此工具来确保您针对 Active Directory 使用的任何漏洞利用都已完善,然后再将其引入客户端环境。对于只想更轻松地测试 Active Directory 的渗透测试员来说非常有用。


创建者: Microsoft Azure 红队

用途: 可以使用 Stormspotter 更好地可视化 Azure 攻击面;此工具可帮助您绘制 Azure 和 Azure Active Directory 对象。

优点: 类似渗透测试工具BloodHound概念类似,只是该工具是为 Azure 环境设计的。对于任何蓝色或紫色团队成员来说,从防御的角度来看,Stormspotter 也非常有用。

创建者: @Void_Sec

用途: ECG 实际上是一种商业工具。该工具是静态源代码扫描器,能够分析和检测 TCL/ADP 源代码中真实和复杂的安全漏洞。

优点: ECG是一种强大的工具,可以填补令人惊讶的空白。正如 VoidSec 在他们的官方文章中所指出的,TCL代码相当普遍;所以能够彻底分析漏洞可能会非常有帮助。没有很多其他工具可以满足这种独特的需求,无论是商业的还是其他的。

创建者: @TryCatchHCF

用途: 可以使用 DumpsterFire 构建“时间触发的分布式”安全事件来测试红队进攻和蓝队防守。

优点: DumpsterFire 将传统桌面练习提升到一个新的水平,它还使用自动化来在参与期间有效地进行多任务处理(并避开一些更乏味的事情)。DumpsterFire 允许的定制程度令人印象深刻;可以真正定制模拟安全事件来满足独一无二的情况。

10GhostPack

创建者: SpecterOps ( @SpecterOps )

用途: 借助强大的后开发工具集 GhostPack,可以做各种事情;可以攻击 KeePass 2X 数据库、复制锁定的文件、篡改 Active Directory 证书等。

优点: GhostPack 是一种满足黑客需求的“一站式商店”。包含的 13 个工具包括非常有用的 Rubeus、Seatbelt 和 SharpUp。Rubeus 是一个 C# 工具集,直接与 Active Directory 环境中的 Kerberos 协议交互,允许直接与 Kerberos 属性(例如票证和常规身份验证)进行通信,然后可以利用这些属性在网络中移动。Seatbelt 是一个 C# 项目,可用于面向安全的主机“安全检查”,而 SharpUp 是一个 C# 工具,可识别本地权限提升路径。这些工具被无数红队和网络渗透测试员使用。

创作者: Benjamin Delpy ( @gentilkiwi )

用途: Mimikatz 可以从 Windows 环境中提取密码和其他凭据。是一种非常流行的渗透测试工具,已经存在了十多年。但 Mimikatz 会定期维护和更新,以确保仍然是最前沿的工具

优点: 将 Mimikatz 视为网络渗透测试的瑞士军刀。带有几个内置工具,对 Kerberoasting、密码转储很有用,你能想到的,Mimikatz 都可以做到。而且 Mimikatz 不仅适用于那里的进攻性安全专业人员——防御性安全团队也可以从中受益(如果你发现自己处于紫色团队场景中,这也是个好兆头)。

创建者: Metasploit 项目 ( @metasploit ),由 Rapid7 与开源社区合作运营

用途: Metasploit 可以说是世界领先的渗透测试框架,由 HD Moore 于 2003 年创建。Metasploit 包括用于渗透测试几乎每个阶段的模块,这有助于其普及。包括约 250 个后利用模块,可用于捕获击键、收集网络信息、显示 *** 作系统环境变量等。

优点: Metasploit 后开发模块非常庞大,有一个模块最突出——Meterpreter 有效载荷。Meterpreter 允许 探索 目标系统并执行代码,并且由于它通过内存 DLL 注入工作,因此不必冒险留下任何 *** 作证据。Metasploit 后开发功能也非常通用,具有适用于 Windows、Linux 和 OS X 的模块。

创作者: 阿德里安·沃尔默( @mr_mitm )

用途: 此后利用工具旨在绕过端点检测和应用程序阻止列表。

优点: 可以使用 PowerHub 传输文件,而不会在测试环境中发出任何安全保护警报,这将使下一次渗透测试更加顺畅和轻松。使用此工具领先于 Windows Defender。

创建者: LOLBAS 项目和亚利桑那州安全工程与研究小组

用途: LOLBAS 是一个字典,用于在 Windows 机器上使用二进制文件查找可能的权限提升路径。LLOLBAS 是与 LOLBAS 协同工作的摄取器。摄取器会在 Windows 机器上的 LOLBAS 列表中查找所有二进制文件,因此无需猜测或对列表进行排序以查找它们(这可能很乏味)。

优点: LOLBAS 项目可搜索机器上可能的权限提升路径,而 LLOLBAS 允许针对特定机器定制这些路径。结合这两个工具,(几乎)在参与中势不可挡。作为一个额外的好处,如果出现需要它们的情况,可以方便地使用离线工具。

创作者: @nil0x42

用途: PHPSploit 充当功能齐全的 C2 框架,通过单行 PHP 后门在 Web 服务器上静默地持久化。

优点: PHPSploit 是非安全参与时手头上的一项了不起的工具——高效、用户友好且运行安静。正如其 GitHub 描述所述,PHPSploit 是“由偏执狂,为偏执狂设计的”。

创作者: 塞瓦加斯

用途: 可以使用 swap_digger 在后期开发或取证期间自动进行 Linux 交换分析。

优点: 在 Linux 交换空间中可以找到各种各样的好东西,从密码和电子邮件地址到 GPG 私钥。Swap_digger 可以梳理这些交换空间并找到高影响力的奖杯,这将使评估更加成功。

创建者: RedCode 实验室

用途: Bashark 是一个后开发工具包,顾名思义,是用编程语言 Bash 编写的。这是一个可以产生巨大结果的简单脚本。

优点: Bashark 工作快速而隐蔽,允许通过创建 Bash 函数来添加新命令,并清除在目标环境中使用脚本后可能留下的任何痕迹。

创作者: AlessandroZ

用途: 使用 BeRoot 项目查找可用于在 Windows、Linux 和 OS X 环境中提升权限的常见错误配置。

优点: 识别常见的错误配置是在网络中立足的最可靠方法之一,因此找到这些错误配置的速度越快越好。BeRoot 项目在这方面提供了极大的帮助。

本文,旨在介绍一些红队工具,供大家了解和参考研究之用,不建议任何人利用网络技术从事非法工作,破坏他人计算机等行为。渗透有风险,入坑需谨慎。法网恢恢,疏而不漏。请正确理解渗透含义,正确利用渗透技术,做网络安全服务的践行者。

首要之首:不要急于选择一种语言新手们有一个常见的错误就是犹豫于判断哪种编程语言是做好的、最该先学的

我们有很多的选择,但你不能说那种语言最好

我们应该理解:说到底,什么语言并不重要

重要的是理解数据结构、控制逻辑和设计模式

任何一种语言甚至一种简单的脚本语言都会具有所有编程语言都共有的各种特征,也就是说各种语言是贯通的

我正在攻读我的计算机学学位,我编程使用Pascal,汇编,和C语言,事实上我从来没有把它当成职业以求获得回报

我一直在自学编程,工作上用不到它,我使用现有的知识,参考各种文档和书本,学习它们的用法

因此,不要急于选择何种编程语言

找出你想要开发的东西,使用一种能够完成这项任务的语言,这就可以了

根据各种开发平台的不同,有很多不同的软件开发形式可供你选择:从网站应用到桌面软件到智能手机软件到命令行脚本工具

这篇文章里,我将重点介绍一些很受欢迎的入门教程和资源,它们能帮助你学会如何在各种主流的平台上编程开发

我先假设你是一个悟性很强的读者,但对于新手,当我谈论程序代码时还是要按照入门级的水平

因为即使是你自己看一篇编程入门手册,如果发现都能理解时,心情自然会很高兴,这样利于你进一步学习

桌面脚本想要动手在Windows里或苹果系统里编程,最简单的方法是从一种脚本语言或宏语言开始,例如AutoHotkey(Windows)或Automator(苹果系统)

如今一些硬件程序员冲着他们的屏幕大喊大叫,说AHK和AppleScript并不是真正的编程语言

也许他们说的是对的技术上,这些种类的语言只能做一些上层的编程

但是对于那些只是想来脱盲、想在他们的电脑里实现一些能自动运行的程序的新手来说,这些语言会是一个绝妙的入门入口而且你会吃惊于它们丰富的功能

例如,大家都喜爱的Texter就是Adam使用AutoHotkey开发的能独立运行的Windows应用程序,所以说这种脚本语言远不是只能开发小规模脚本软件

如果你想从AutoHotkey入手,可以参考Adam的指导:howtoturnanyactionintoakeyboardshortcutusingAutoHotkey(然后,你可以下载Texter源代码看看这个功能齐全的使用AHK开发的Windows应用程序的内部结构)

HTML和CSS:开发网站,你第一件要知道的事情就是HTML(网页就是由它组成的)和CSS(一种让外观更好看的样式标记)

HTML和CSS并不是编程语言它们只是页面的结构和样式信息

然而,在开始开发web应用程序之前你必须要学会如何手工的编写简单的HTML和CSS,web页面是任何webapp的前端显示部分

这个HTML指导是你入手的好地方

JavaScript:当你可以通过HTML和CSS构建一个静态页面后,事情就开始变得有趣了因为到了该学JavaScript的时候了

JavaScript是一种web浏览器上的编程语言,它的魔力就是能在页面里制造一些动态效果

JavaScript可以做,脚本,和Ajax,所以它是web上各种好东西的关于因素

学习JavaScript从这里开

服务器端脚本:一旦你学会了网页里的知识,你就要开始对它添加一些动态服务器 *** 作为了实现这些,你需要把目光转移到服务器端脚本语言,例如PHP,Python,Perl,或Ruby

举个例子,如果想要制作一个网页形式的表单,根据用户的输入发送邮件,你就需要使用服务器端脚本来实现

像PHP这样的脚本语言可以让你跟web服务器上的数据库进行沟通,所以如果你想搭建一个用户可以登录注册的网站,这样的语言正是你需要的

Webmonkey是一个优秀的web开发资源网站,里面有大量的各种web编程语言的指导手册

阅读一下他们的PHP初学者指南

当你感觉差不多了的时候,看看WebMonkeysPHPandMySQLtutorial学习如何使用PHP跟数据库交互

网上最好的要数PHP语言官方的在线文档和函数参考了

每个知识点上(例如strlenfunction这个)都在后面列出来用户的评论注释,这些对于文档的本身是非常有价值的

(我很喜欢PHP,但还有很多其他种服务器端的脚本语言你们都可以选择

)Web框架:过去数年里,web开发人员在开发动态网站的过程中不得不一遍又一遍的针对重复遇到的问题写出重复的代码

为了避免这种每次开发一些新网站都会重复劳动一次的问题,一些程序员动手搭建了一些框架,让框架替我们完成重复性的工作

非常流行的RubyonRails框架,作为一个例子,它利用Ruby编程语言,为我们提供了一个专门面向web的架构,普通的web应用程序都能使用它来完成

事实上,Adam使用Rails开发了他的第一个正式的(而且是叹为观止的!)web应用程序,MixTape

me

这就是他的如何在没有任何经验的情况下搭建一个网站

还有一些其他的web开发框架包括CakePHP(针对PHP编程者),Django(针对Python编程中),以及jQuery(针对JavaScript)

WebAPIs:API(应用层序编程接口)是指不同的软件之间相互交换的程序途径

例如,如果你想在你的网站上放一个动态的地图,你可以使用GoogleMap,而不需要开发自己的地图

TheGoogleMapsAPI可以轻松的让你通过JavaScript在程序中引入一个地图到你的页面上

几乎所有的现代的你所知道的和喜爱的web服务都提供了API,通过这些API你可以获取到他们的数据和小工具,在你的应用程序里就可以使用这些交互过来的东西了,例如Twitter,Facebook,GoogleDocs,GoogleMaps,这个列表远不止这些

通过API把其他web应用集成到你的web应用里是现在富web开发的前沿地带

每个优秀的主流的web服务API都附带有完整的文档和一些快速入手的指导(例如,这个就是Twitter的)

疯狂吧

命令行脚本如果你想开发一个程序,让它读取文字或文件、输入输出一些有用的东西,那么,命令行脚本语言将是个不错的选择

然而它并不像web应用程序和桌面应用程序那样有吸引力和好看的外观,但是作为快速开发的脚本语言,你却不能忽视它们

很多的在linux平台上运行的web脚本同样能以命令行模式运行,例如Perl,Python和PHP,所以如果你学会了使用它们,你将能在两种环境中使用它们

我的学习道路一直没离开Peal太远,我自学Python使用的是这本优秀的在线免费书DiveintoPython

如果成为一个Unix高手也是你学习的目标,那么你绝对要精通bash这个脚本语言

Bash是Unix和Linux环境下的一种命令行脚本语言,它能够为你做所以的事情:从自动备份数据库脚本到功能齐全的用户交互程序

起初我没有任何使用bash脚本的经验,但最终我用bash开发了一个全功能的个人代办任务管理器:Todo

txtCLI

插件(Add-ons)如今的web应用程序和浏览器都可以通过一些扩展软件来丰富自己的功能

由于一些现有的软件,例如Firefox、WordPress越来越受到开发人员的关注,插件的开发也日益流行,人们都在说ButifonlyitcoulddoTHIS只要你掌握了HTML,JavaScript和CSS,你就可以在任何的浏览器里开发你想要的很多东西

,userscripts,和Stylishuserstyles这些软件都是用的更普通页面一样的语言写成的,这几个东西都值得你去研究一些

更高级的浏览器扩展程序,例如Firefox的扩展,它们可以帮助你很多

开发Firefox的扩展,举个例子,需要你精通JavaScript和XML(一种标记语言,类似HTML,但具有更严格的格式)

早在2007年我就写下来howtobuildaFirefoxextension,这是我在笨手笨脚的研究网上的一些学习资料后获得的成果

很多免费的、受欢迎的web应用程序都提供了扩展框架,例如WordPress和MediaWiki

这些应用程序都是用PHP写成的,所以只有对PHP熟悉你才能做这些事情

这个就是如何编写WordPress插件

而想驾驭GoogleWave前沿技术的开发人员可以从使用HTML,JavaScript,Java,和Python写小组件和小工具开始

我写的第一个Wavebot是跟着这个一个下午时间的快速入门指导开始的

开发桌面上的Web应用程序学习编程最好的结果是你在一个环境下学的东西可以应用到另外的环境中

先学习开发web应用程序的好处就是我们有一些方法可以让web应用程序直接在桌面上运行

例如,AdobeAIR是一个跨平台的即时运行平台,它能让你编写的程序运行在任何装有AIR的 *** 作系统的桌面上

AIR应用程序都是由HTML,Flash,或Flex写成的,所以它能让你的web程序在桌面环境中运行

AIR是开发部署桌面应用程序的一个优秀的选择,就像我们提到过的10个让你值得去安装AIR的应用程序

移动应用开发能在iPhone或者Android智能手机上运行的手机应用程序的开发如今正呈现井喷之势,所以你也可以梦想一下如何在iTunes应用商店里通过你的天才程序大赚一笔

但是,作为一个编码新手,直接奔向移动开发所经历的学习曲线可能会很陡,因为它需要你熟悉高级的编程语言,例如Java和ObjectiveC

然而,你当然应该看看iPhone和Android编程究竟是什么样子的

阅读这个简单的iPhone应用开发例子可以初步认识一下iPhone程序的开发过程

Android程序都是由Java写成的,这有一个简单的视频教程教你如何开发第一个HelloAndroid程序(注:可能需要代理才能看这个视频)

耐心,刻苦,尝试,失败好的程序员都有一个不达目的誓不罢休的品质,他们会惊喜于通过长期推敲和失败换来的一点成绩

学会编程会有很好的回报的,但是学习的过程可能会是饱受挫折和孤独的

如果有可能,最好找个伴一起陪你做这件事

想精通编程,这和其他事情一样,需要坚持,反复尝试,获得更多的经验

Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一个命令语言,又是一个程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
Shell是一个应用程序,是用户管理应用程序的一个接口。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13446851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-08
下一篇 2023-08-08

发表评论

登录后才能评论

评论列表(0条)

保存