在上一篇文章中,我们学习了如何配置 IPTables 以发挥防火墙的作用。现在,我们将学习如何创建脚本以在系统启动时自动运行规则,以及如何删除或暂时停止这些规则。
在编写脚本并向您展示它的外观之前,让我们先讨论一下NAT以及我们想用此设备做什么的概念。
示例的NAT和上下文。
当我们谈论NAT时,我们可以将其与路由混淆,因为两者都负责将两个不同的网络相互连接。 真正的区别在于,路由是从一个本地网络到另一个本地网络,而另一个网络可以连接到路由器并连接到Internet。
而当我们谈论NAT时,我们谈论的是将数据包从本地或专用网络路由到公用网络或Internet。 它通过将与之相连的公共IP放入Internet来掩盖数据包来实现此目的。 换句话说,我们不需要路由器,因为公共IP由GNU / Linux计算机直接拥有。
我们将以这样的口号工作:我们将Linux用作路由器/防火墙,以从本地网络连接到Internet。 但是,这里可能出现两种情况。
- 我们的Linux位于服务提供商的路由器和本地网络之间。
在这种情况下,路由器和我们的Linux系统之间会存在一个网络,而Linux系统和本地网络之间则会存在另一个网络。这意味着我们的路由器不需要执行NAT功能;只需像上一篇文章中解释的那样进行简单的流量路由即可。
- 我们的Linux具有一个连接到本地网络的接口,并且通过另一个接口,它直接接收用于导航的公共IP。
这意味着我们的Linux必须进行NAT,以便数据包可以到达Internet。
出于这个小实验室的目的,我们将说我们的Linux直接接收公共IP,因此能够测试NAT的效果。
为了进行NAT,我们然后使用语法
iptables -t nat -A POSTROUTING -O eth1 -j伪装
eth1是我们接收公共IP的接口,即我们访问Internet的接口。
创建iptables脚本
假设:172.26.0.0是我们的本地网络,而81.2.3.4是我们用来访问Internet的公共IP。 (这是一个静态ip)。 我有接口eth0(本地网络)
eth1(公共网络)。
它基本上包括创建一个可以从/etc/init.d/firestop调用的脚本(例如)。 从这个脚本中,我们可以启动,停止或检查配置状态,就像处理任何系统守护程序一样。
假设我的IPTABLES规则是:
#! / bin / bash#我家的防火墙。 #文件名/ etc / firewall_on#通过Jlcmux Twitter:@Jlcmux##基本策略。 iptables -P INPOUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP #NAT从eth0到eth1共享Internet iptables -t nat -A POSTROUTING -O eth1 -j SNAT --to-source 81.2.3.4 ##允许由我的iptables启动的传入连接-A FORWARD -m state --state已建立,相关-j ACCEPT##授权的出站流量iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT iptables -A转发-i eth0 -o eth1 -p tcp --dport 443 -j接受iptables -A转发-i eth0 -o eth1 -p udp --dport 53 -j接受
说明:
该脚本基本上执行以下操作:
- 首先限制所有导航,连接和交通。 (基本防火墙策略)
- 然后使用目标eth1创建NAT。 表示我们有一个静态的公共IP «81.2.3.4
- 它打开接收我发起的连接包所需的端口。
- 接受出站HTTP,HTTPS和DNS通信。
如果要使用我们的设备导航,则应重复这些行,并适当地将FORWARD更改为INPUT或OUTPUT。
取消脚本。
现在,我们将创建一个覆盖以上所有内容的脚本,并使计算机清除所有这些内容。 (出于测试目的,或者我们只想关闭防火墙)。
#! / bin / bash#我家的防火墙。 #文件名/ etc / firewall_off#通过Jlcmux Twitter:@Jlcmux##删除iptables规则-F##应用默认策略(接受所有流量)iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
自动化。
现在我们需要在/etc/init.d/目录下创建脚本,以便服务能够自动启动,方便我们进行管理。
#! / bin / bash#我家的防火墙。 #文件名/etc/init.d/ Firewall#由Jlcmux Twitter:@Jlcmux case $ 1开始)/ etc / firewall_on ;; 停止)/ etc / firewall_off ;; 状态)iptables -L ;; *)echo“语法错误。有效= /etc/init.d/防火墙启动|停止|状态;; esac
说明:
我们将最后一个脚本放在/etc/init.d/目录下,并命名为“firewall”。然后,如果我们想要管理防火墙,可以使用命令/etc/init.d/firewall start。我们也可以用同样的方法停止防火墙或检查其状态。
现在我们要编辑/etc/rc.local文件,并添加类似/etc/init.d/firewall start 的内容,以便它随系统一起启动。
也一样这是第二部分。 我希望它能给大家带来一些帮助。 接下来,我们将看到代理和IDS。