- 浏览: 363467 次
-
文章分类
最新评论
-
string2020:
select * from tab where user_id ...
(转)JPA JPQL -
hety163:
Java 位运算符 -
hiberatejss:
lz,~这个位运算的作用和反码是一样的吗?
Java 位运算符 -
skcmm:
博主,有个问题想请教下。我在/etc/hosts声明一个域名, ...
nginx泛域名解析 -
kid_ren:
写的好
Java 位运算符
1. 引言
CentOS 內置了一个非常強劲的防火牆,统称为 iptables,但更正确的名称是 iptables/netfilter。iptables 是一个用戶空间的模块。作为用戶,你在命令行就是通过它将防火牆规则放进缺省的表裡。netfilter 是一个核心模块,它內置於內核中,进行实际的过滤。iptables 有很多前缀图像界面可以让用戶新增或定义规则,但它们很多时不及使用命令行般有灵活性,而且限制用戶了解实际发生的事情。我们将会学习 iptables 的命令行界面。
在我们正式应付 iptables 前,我们必须对它的运作有一个基本的理解。iptables 利用到 IP 地址、协议(tcp、udp、icmp)及端口这些概念。我们不需要成为这些方面的专家(因为我们可以找到所需的信息),但对它们有一般的理解会有帮助。
iptables 将规则放进缺省的规则链(INPUT、OUTPUT 及 FORWARD),而所有流量(IP 压缩)都会被相关的规则链检查,根据当中的规则判断如何处理每个压缩,例如:接纳或丟棄它。这些动作称为目标,而最常见的两个缺省目标就是 DROP 来丟棄压缩;或 ACCEPT 来接纳压缩。
规则链
我们可以在过滤表的 3 条缺省规则链內加入规则,来处理通过这些规则链的压缩。它们分別是:
* INPUT - 所有以主机为目的地的压缩。
* OUTPUT - 所有源自主机的压缩。
* FORWARD - 这些压缩的目的地或来源地都不是主机,但路经主机(由它选路)。假若你的主机是一个路由器,这条规则链将会被应用。
我们将会花费最多时间处理 INPUT 规则链,借以过滤进入我们的机器的压缩 —— 亦即是将坏蛋拒诸门外。
规则是以列表的方式被加进每条规则链。每个压缩会被头一条规则开始检查,才至最后一条。假若压缩与其中一条规则吻合,相应的动作便会被执行,例如接纳(ACCEPT)或丟棄(DROP)压缩。一但有吻合的规则,这个压缩便会按照规则来处理,而不再被规则链內的其它规则所检查。假如压缩通过所有检查而不符合任何规则链內的任何一条规则,那应这条规则链的缺省动作将会被执行。这就是所谓的缺省政策,可以设置为接纳(ACCEPT)或丟棄(DROP)压缩。
规则链拥有缺省政策这个概念带来两个基本的可能性,而我们必须考虑它们才能決定如何组织我们的防火牆。
1. 我们可以缺省一个政策来丟棄(DROP)所有压缩,然后刻意加入规则来接纳(ACCEPT)源自被信任的 IP 地址的压缩,或者打开那些提供服务的端口,如:bittorrent、FTP 服务器、网页服务器、Samba 文件服务器等。
又或者,
2. 我们可以缺省一个政策来接纳(ACCEPT)所有压缩,然后刻意加入规则来拦截(DROP)来自有问题的 IP 地址或系列的压缩,也或者阻止压缩进出只作私人用途或未提供服务的端口。
普遍来說,第一个方法多数用在 INPUT 规则链,因为我们会希望控制哪些东西可以访问我们的机器;而第二个方法多数用在 OUTPUT 规则链,因为我们多数信赖那些离开(源自)我们机器的压缩。
2. 準备开始
在命令行上使用 iptables 需要 root 的权限,因此你必须化身为 root 用戶来做下面的事情。
[attachment:ArtWork/WikiDesign/icon-admonition-attention.png]
注意: 我们将会停用 iptables 及复位你的防火牆规则,因此假若你依赖你的 Linux 防火牆作为第一道防線,请特別留意这点。
iptables 应该缺省被安装在所有 CentOS 3.x、4.x 及 5.x 上。你可以这樣来检查 iptables 是否已安装在你的系统上:
$ rpm -q iptables
iptables-1.3.5-1.2.1
要知道 iptables 是否正在运作中,我们可以检查 iptables 这个模块是否已被装入,並利用 -L 这个选项来查看活动的规则:
# lsmod | grep ip_tables
ip_tables 29288 1 iptable_filter
x_tables 29192 6 ip6t_REJECT,ip6_tables,ipt_REJECT,xt_state,xt_tcpudp,ip_tables
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
从上面我们可看见缺省的规则,与及访问 SSH 服务用的规则。
如果 iptables 並未被执行,你可以这樣啟用它:
# system-config-securitylevel
3. 创建一组简单的规则
[attachment:ArtWork/WikiDesign/icon-admonition-attention.png]
注意: 此刻我们将会清除缺省的规则集。如果你是通过 SSH 远程连接到一台服务器来进行学习,你有可能会将自己拒诸这台机器之外。你必须将缺省的输入(input)政策改为接纳(accept),然后才清除现有规则,接著你要预先加入一条容许你自己访问机器的规则,避免你将自己封锁在外。
我们会採用一个以样例为本的方法来查看 iptables 的不同指令。在首个样例中,我们会创建一组简单的规则来设置一个「状态压缩检验」(SPI)防火牆,容许对外的连接但拦截一切无用的对內连接:
# iptables -P INPUT ACCEPT
# iptables -F
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -L -v
你应该得到这樣的输出:
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
现在让我们逐一看看以上的 8 个指令,並理解我们实际做了甚麼:
1.
iptables -P INPUT ACCEPT 假如利用远程连接,我们必须临时将 INPUT 链的缺省政策改为 ACCEPT,否则当我们清除现有的规则集时,便会将自己封锁在服务器之外。
2.
iptables -F 我们利用 -F 选项来清除一切现存的规则,好让我们能夠在崭新的状态下加入的规则。
3.
iptables -A INPUT -i lo -j ACCEPT 现在是时候加入一些规则了。我们利用 -A 选项来附加(新增)规则到某条链,而这裡所指的是 INPUT 链。接著我们利用 -i 选项(interface「界面」之意)来指定那些符合或来自 lo(localhost、127.0.0.1)界面的压缩。最后我们 -j(jump「跳至」)符合这条规则的目标动作:在这裡是 ACCEPT。所以这条规则会导致所有转至 localhost 界面的对內压缩获得接纳。一般来說这是必须的,因为很多软件预期能夠与 localhost 适配器沟通。
4.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 这是担负起大部份工作的规则,而我们再一次将它加进(-A)INPUT 链內。这裡我们利用 -m 选项来装入一个模块(state)。state 模块能夠查看一个压缩並判断它的状态是 NEW、ESTABLISHED 抑或 RELATED。NEW 指內进的压缩属於不是由主机啟主导的新增连接。ESTABLISHED 及 RELATED 指內进的压缩隸属於一条现存的连接,或者与现存的连接有关系。
5.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 现在我们加入一条规则来容许 SSH 通过 tcp 端口 22 来连接。这樣做是要防止我们连接到远程系统的 SSH 连接意外地被封销。我们稍后会更详细解释这条规则。
6.
iptables -P INPUT DROP 这个 -P 选项设置某条规则链上的缺省政策。我们现在可以将 INPUT 链的缺省政策改为 DROP。意思就是,不符合任何一条规则的对內压缩将会被丟棄。要是我们通过 SSH 远程连接而沒有加入上一条规则,此刻我们便会被封锁於系统之外。
7.
iptables -P FORWARD DROP 同樣地,在这裡我们将 FORWARD 链的缺省政策设为 DROP,因为我们並不是用计算机作为路由器,所以理应沒有任何压缩路经它。
8.
iptables -P OUTPUT ACCEPT 而最后,我们将 OUTPUT 链的缺省政策设为 ACCEPT,因为我们想容许所有对外的流量(由於我们信任我们的用戶)。
9.
iptables -L -v 最后,我们可以列出(-L)刚加入的规则,並检查它们是否被正确地装入。
我们需要做的最后一件事情,就是存储我们的规则,好让它们在下次开机时会自动被重新装入:
# /sbin/service iptables save
这 樣做会执行 iptables 的 init 腳本,它会执行 /sbin/iptables-ave 並将现有的 iptables 设置写进 /etc/sysconfig/iptables。开机时,iptables 的 init 腳本会通过 /sbin/iptables-restore 这个指令重新施用存储在 /etc/sysconfig/iptables 內的规则。
很明显的,在指令殼內输入这堆指令会颇乏味,因此运用 iptables 的最简易方法就是创建一个代你做以上一切的腳本。你可以将上面的指令输入到你喜欢的文字编辑器內並存储为 myfirewall,例如:
#!/bin/bash
#
# iptables 样例设置腳本
#
# 清除 iptables 內一切现存的规则
#
iptables -F
#
# 容让 SSH 连接到 tcp 端口 22
# 当通过 SSH 远程连接到服务器,你必须这樣做才能群免被封锁於系统外
#
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#
# 设置 INPUT、FORWARD、及 OUTPUT 链的缺省政策
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#
# 设置 localhost 的访问权
#
iptables -A INPUT -i lo -j ACCEPT
#
# 接纳属於现存及相关连接的压缩
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# 存储设置
#
/sbin/service iptables save
#
# 列出规则
#
iptables -L -v
註: 我们可以在腳本內加入註释来提醒自己正在做甚麼。
现在令腳本可以被执行:
# chmod +x myfirewall
我们现在可以编辑这个腳本,並在指令殼內用以下指令来执行它:
# ./myfirewall
4. 界面
在上一个范本中,我们看见如何能接纳所有来自某个界面的压缩,也就是 localhost 界面:
iptables -A INPUT -i lo -j ACCEPT
假设我们现在有两个独立的界面,分別是将我们连接到內联网的 eth0 及连接到外部互联网的 ppp0 拨号调制解调器(或者 eth1 适配器)。我们或许会想接纳所有来自內联网的对內压缩,但依然过滤那些来自互联网的压缩。我们可以这樣做:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
让特別留意 —— 假如你接纳来自互联网界面(例如 ppp0 拨号调制解调器)的所有压缩:
iptables -A INPUT -i ppp0 -j ACCEPT
你便等同於停用了我们的防火牆!
5. IP 地址
将整个界面开放给对內的压缩也许不夠严谨,而你想拥有更多控制权来決定接纳甚麼及拒絕甚麼。现在假设我们拥有一群採用 192.168.0.x 私人网络的计算机。我们可以打开防火牆给来自某个被信任 IP 地址(例如 192.168.0.4)的对內压缩:
# 接纳来自被信任 IP 地址的压缩
iptables -A INPUT -s 192.168.0.4 -j ACCEPT # change the IP address as appropriate
将这个指令分解,我们首先附加(-A)一条规则到 INPUT 链,指明来源(-s)IP 地址是 192.168.0.4 的压缩都应该被接纳(ACCEPT)(请亦留意我们如何利用 # 符号来解释我们的腳本,因为 # 之后的所有文字都会被视为註释)。
当 然,如果我们想接纳来自一系列 IP 地址的压缩,我们可以为每个被位任的 IP 地址加入一条规则,而这樣做的确是可行的。但是假如它们的数量很多,一次过加入一系列 IP 地址会比较简单。要这樣做,我们可以利用一个子网掩码或标準的斜線记法来指定 IP 地址的范围。举个例說,如果我们想将防火牆开放给来自整个 192.168.0.x(当中 x=1 到 254)范围的压缩,我们可以用下面其中一个方法来达致目的:
# 接纳来自被信任 IP 地址的压缩
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT # using standard slash notation
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT # using a subnet mask
最 后,除了过滤单一的 IP 地址外,我们亦可以配对该设备的 MAC 地址。要这应做,我们需要装入一个容许过滤 MAC 地址的模块(mac 模块)。较早前当我们用 state 模块来配对 ESTABLISHED 及 RELATED 压缩时,我们看见模块扩展 iptables 功能的例子。在这裡我们除了检查压缩的 IP 地址外,更利用 mac 模块来检查来源地的 MAC 地址:
# 接纳来自被信任 IP 地址的压缩
iptables -A INPUT -s 192.168.0.4 -m mac --mac-source 00:50:8D:FD:E6:32 -j ACCEPT
首先我们用 -m mac 来装入 mac 模块,然后我们用 --mac-source 来指定来源 IP 地址(192.168.0.4)的 MAC 地址。你要为每个需要过滤的乙太网设备找出 mac 地址。以 root 的身份执行 ifconfig(无線设备用 iwconfig)可以将 mac 地址告䜣你。
这 樣可防止来源地的 IP 地址被偽装,因为只有真正源於 192.168.0.4(MAC 地址是 00:50:8D:5D:E6:32)的压缩才会被接纳,而所有假扮源於该地址的压缩都会被拦截。请注意,过滤 MAC 地址在互联网上不能使用,卻絕对能正确地在內联网裡运作。
6. 端口及协议
由上面我们看见如何将新增规则在防火牆內,用来过滤符合某个界面或来源 IP 地址的压缩。 这樣做让我们能经过防火牆访问某些被信任的来源(主机)。现在我们看看如何过滤协议及端口,好叫我们能进一步区別要接纳及拦截那些对內的压缩。
在 我们开始之先,我们须要知道个別服务所使用的协议及端口编号。让我们以 bittorrent 作为一个简单的样例。bittorrent 在 6881 端口上採用 tcp 协议,因此我们需要容许所有以 6881 为目标端口(它们抵步时所用的端口)的 tcp 压缩。
# 接纳目标端口是 6881 号(bittorrent)的 tcp 压缩
iptables -A INPUT -p tcp --dport 6881 -j ACCEPT
在这裡我们附加(-A)一条规则到 INPUT 链,配对 tcp 协议(-p tcp)及从 6881 目标端口进入我们的机器(--dport 6881)。
註: 要配对目标或来源端口(--dport 或 --sport),你必须先指定协议(tcp、udp、icmp、all)。
我们亦可以扩展以上的样例来包含一系列的端口,例如,接纳 6881 至 6890 端口上的所有 tcp 压缩:
# 接纳目标端口是 6881-6890 号的 tcp 压缩
iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT
7. 融会贯通
既然我们已经有基本认识,现在便可以合併这些规则。
UNIX/Linux 上一个受欢迎的服务就是容许远程登录的 SSH 服务。SSH 缺省使用 22 号端口及採用 tcp 协议。因此假若我们想允许远程登录,我们需要容许 tcp 连接到 22 号端口:
# 接纳目标端口是 22 号(SSH)的 tcp 压缩
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这 樣做会开放 22 号端口(SSH)给所有对內的 tcp 连接,卻会构成潛在的安全性威胁,因为骇客可以強行破入使用易猜测口令的戶口。然而,假若我们知道那些通过 SSH 作远程登录的可信任机器的 IP 地址,我们便可以将访问权限制到那些来源 IP 地址。举个例說,如果我们只想将 SSH 的访问权开放给我们的私人內联网(192.168.0.x),我们可以将来源 IP 地址限制在这个范围:
# 接纳来自私人內联网,目标端口是 22 号(SSH)的 tcp 压缩
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
利 用来源 IP 进行过滤容让我们能安全地开放 22 号端口上的 SSH 给可信任的 IP 地址来访问。举个例說,我们可以用这个方法允许工作与家用机器之间的登录。对於其它 IP 地址来說,这个端口(与及服务)就好像了关闭了一樣,而服务亦依被停用,因此扫描端口的骇客多数会略过我们。
8. 总结
这裡只是很初步地介绍 iptables 可以做的事情,但我希望这份教学文档提供了一个良好的基础,帮助各位创建更复杂的规则集。
9. 连结
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-fw.html
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-iptables.html
CentOS 內置了一个非常強劲的防火牆,统称为 iptables,但更正确的名称是 iptables/netfilter。iptables 是一个用戶空间的模块。作为用戶,你在命令行就是通过它将防火牆规则放进缺省的表裡。netfilter 是一个核心模块,它內置於內核中,进行实际的过滤。iptables 有很多前缀图像界面可以让用戶新增或定义规则,但它们很多时不及使用命令行般有灵活性,而且限制用戶了解实际发生的事情。我们将会学习 iptables 的命令行界面。
在我们正式应付 iptables 前,我们必须对它的运作有一个基本的理解。iptables 利用到 IP 地址、协议(tcp、udp、icmp)及端口这些概念。我们不需要成为这些方面的专家(因为我们可以找到所需的信息),但对它们有一般的理解会有帮助。
iptables 将规则放进缺省的规则链(INPUT、OUTPUT 及 FORWARD),而所有流量(IP 压缩)都会被相关的规则链检查,根据当中的规则判断如何处理每个压缩,例如:接纳或丟棄它。这些动作称为目标,而最常见的两个缺省目标就是 DROP 来丟棄压缩;或 ACCEPT 来接纳压缩。
规则链
我们可以在过滤表的 3 条缺省规则链內加入规则,来处理通过这些规则链的压缩。它们分別是:
* INPUT - 所有以主机为目的地的压缩。
* OUTPUT - 所有源自主机的压缩。
* FORWARD - 这些压缩的目的地或来源地都不是主机,但路经主机(由它选路)。假若你的主机是一个路由器,这条规则链将会被应用。
我们将会花费最多时间处理 INPUT 规则链,借以过滤进入我们的机器的压缩 —— 亦即是将坏蛋拒诸门外。
规则是以列表的方式被加进每条规则链。每个压缩会被头一条规则开始检查,才至最后一条。假若压缩与其中一条规则吻合,相应的动作便会被执行,例如接纳(ACCEPT)或丟棄(DROP)压缩。一但有吻合的规则,这个压缩便会按照规则来处理,而不再被规则链內的其它规则所检查。假如压缩通过所有检查而不符合任何规则链內的任何一条规则,那应这条规则链的缺省动作将会被执行。这就是所谓的缺省政策,可以设置为接纳(ACCEPT)或丟棄(DROP)压缩。
规则链拥有缺省政策这个概念带来两个基本的可能性,而我们必须考虑它们才能決定如何组织我们的防火牆。
1. 我们可以缺省一个政策来丟棄(DROP)所有压缩,然后刻意加入规则来接纳(ACCEPT)源自被信任的 IP 地址的压缩,或者打开那些提供服务的端口,如:bittorrent、FTP 服务器、网页服务器、Samba 文件服务器等。
又或者,
2. 我们可以缺省一个政策来接纳(ACCEPT)所有压缩,然后刻意加入规则来拦截(DROP)来自有问题的 IP 地址或系列的压缩,也或者阻止压缩进出只作私人用途或未提供服务的端口。
普遍来說,第一个方法多数用在 INPUT 规则链,因为我们会希望控制哪些东西可以访问我们的机器;而第二个方法多数用在 OUTPUT 规则链,因为我们多数信赖那些离开(源自)我们机器的压缩。
2. 準备开始
在命令行上使用 iptables 需要 root 的权限,因此你必须化身为 root 用戶来做下面的事情。
[attachment:ArtWork/WikiDesign/icon-admonition-attention.png]
注意: 我们将会停用 iptables 及复位你的防火牆规则,因此假若你依赖你的 Linux 防火牆作为第一道防線,请特別留意这点。
iptables 应该缺省被安装在所有 CentOS 3.x、4.x 及 5.x 上。你可以这樣来检查 iptables 是否已安装在你的系统上:
$ rpm -q iptables
iptables-1.3.5-1.2.1
要知道 iptables 是否正在运作中,我们可以检查 iptables 这个模块是否已被装入,並利用 -L 这个选项来查看活动的规则:
# lsmod | grep ip_tables
ip_tables 29288 1 iptable_filter
x_tables 29192 6 ip6t_REJECT,ip6_tables,ipt_REJECT,xt_state,xt_tcpudp,ip_tables
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
从上面我们可看见缺省的规则,与及访问 SSH 服务用的规则。
如果 iptables 並未被执行,你可以这樣啟用它:
# system-config-securitylevel
3. 创建一组简单的规则
[attachment:ArtWork/WikiDesign/icon-admonition-attention.png]
注意: 此刻我们将会清除缺省的规则集。如果你是通过 SSH 远程连接到一台服务器来进行学习,你有可能会将自己拒诸这台机器之外。你必须将缺省的输入(input)政策改为接纳(accept),然后才清除现有规则,接著你要预先加入一条容许你自己访问机器的规则,避免你将自己封锁在外。
我们会採用一个以样例为本的方法来查看 iptables 的不同指令。在首个样例中,我们会创建一组简单的规则来设置一个「状态压缩检验」(SPI)防火牆,容许对外的连接但拦截一切无用的对內连接:
# iptables -P INPUT ACCEPT
# iptables -F
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -L -v
你应该得到这樣的输出:
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
现在让我们逐一看看以上的 8 个指令,並理解我们实际做了甚麼:
1.
iptables -P INPUT ACCEPT 假如利用远程连接,我们必须临时将 INPUT 链的缺省政策改为 ACCEPT,否则当我们清除现有的规则集时,便会将自己封锁在服务器之外。
2.
iptables -F 我们利用 -F 选项来清除一切现存的规则,好让我们能夠在崭新的状态下加入的规则。
3.
iptables -A INPUT -i lo -j ACCEPT 现在是时候加入一些规则了。我们利用 -A 选项来附加(新增)规则到某条链,而这裡所指的是 INPUT 链。接著我们利用 -i 选项(interface「界面」之意)来指定那些符合或来自 lo(localhost、127.0.0.1)界面的压缩。最后我们 -j(jump「跳至」)符合这条规则的目标动作:在这裡是 ACCEPT。所以这条规则会导致所有转至 localhost 界面的对內压缩获得接纳。一般来說这是必须的,因为很多软件预期能夠与 localhost 适配器沟通。
4.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 这是担负起大部份工作的规则,而我们再一次将它加进(-A)INPUT 链內。这裡我们利用 -m 选项来装入一个模块(state)。state 模块能夠查看一个压缩並判断它的状态是 NEW、ESTABLISHED 抑或 RELATED。NEW 指內进的压缩属於不是由主机啟主导的新增连接。ESTABLISHED 及 RELATED 指內进的压缩隸属於一条现存的连接,或者与现存的连接有关系。
5.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 现在我们加入一条规则来容许 SSH 通过 tcp 端口 22 来连接。这樣做是要防止我们连接到远程系统的 SSH 连接意外地被封销。我们稍后会更详细解释这条规则。
6.
iptables -P INPUT DROP 这个 -P 选项设置某条规则链上的缺省政策。我们现在可以将 INPUT 链的缺省政策改为 DROP。意思就是,不符合任何一条规则的对內压缩将会被丟棄。要是我们通过 SSH 远程连接而沒有加入上一条规则,此刻我们便会被封锁於系统之外。
7.
iptables -P FORWARD DROP 同樣地,在这裡我们将 FORWARD 链的缺省政策设为 DROP,因为我们並不是用计算机作为路由器,所以理应沒有任何压缩路经它。
8.
iptables -P OUTPUT ACCEPT 而最后,我们将 OUTPUT 链的缺省政策设为 ACCEPT,因为我们想容许所有对外的流量(由於我们信任我们的用戶)。
9.
iptables -L -v 最后,我们可以列出(-L)刚加入的规则,並检查它们是否被正确地装入。
我们需要做的最后一件事情,就是存储我们的规则,好让它们在下次开机时会自动被重新装入:
# /sbin/service iptables save
这 樣做会执行 iptables 的 init 腳本,它会执行 /sbin/iptables-ave 並将现有的 iptables 设置写进 /etc/sysconfig/iptables。开机时,iptables 的 init 腳本会通过 /sbin/iptables-restore 这个指令重新施用存储在 /etc/sysconfig/iptables 內的规则。
很明显的,在指令殼內输入这堆指令会颇乏味,因此运用 iptables 的最简易方法就是创建一个代你做以上一切的腳本。你可以将上面的指令输入到你喜欢的文字编辑器內並存储为 myfirewall,例如:
#!/bin/bash
#
# iptables 样例设置腳本
#
# 清除 iptables 內一切现存的规则
#
iptables -F
#
# 容让 SSH 连接到 tcp 端口 22
# 当通过 SSH 远程连接到服务器,你必须这樣做才能群免被封锁於系统外
#
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#
# 设置 INPUT、FORWARD、及 OUTPUT 链的缺省政策
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#
# 设置 localhost 的访问权
#
iptables -A INPUT -i lo -j ACCEPT
#
# 接纳属於现存及相关连接的压缩
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# 存储设置
#
/sbin/service iptables save
#
# 列出规则
#
iptables -L -v
註: 我们可以在腳本內加入註释来提醒自己正在做甚麼。
现在令腳本可以被执行:
# chmod +x myfirewall
我们现在可以编辑这个腳本,並在指令殼內用以下指令来执行它:
# ./myfirewall
4. 界面
在上一个范本中,我们看见如何能接纳所有来自某个界面的压缩,也就是 localhost 界面:
iptables -A INPUT -i lo -j ACCEPT
假设我们现在有两个独立的界面,分別是将我们连接到內联网的 eth0 及连接到外部互联网的 ppp0 拨号调制解调器(或者 eth1 适配器)。我们或许会想接纳所有来自內联网的对內压缩,但依然过滤那些来自互联网的压缩。我们可以这樣做:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
让特別留意 —— 假如你接纳来自互联网界面(例如 ppp0 拨号调制解调器)的所有压缩:
iptables -A INPUT -i ppp0 -j ACCEPT
你便等同於停用了我们的防火牆!
5. IP 地址
将整个界面开放给对內的压缩也许不夠严谨,而你想拥有更多控制权来決定接纳甚麼及拒絕甚麼。现在假设我们拥有一群採用 192.168.0.x 私人网络的计算机。我们可以打开防火牆给来自某个被信任 IP 地址(例如 192.168.0.4)的对內压缩:
# 接纳来自被信任 IP 地址的压缩
iptables -A INPUT -s 192.168.0.4 -j ACCEPT # change the IP address as appropriate
将这个指令分解,我们首先附加(-A)一条规则到 INPUT 链,指明来源(-s)IP 地址是 192.168.0.4 的压缩都应该被接纳(ACCEPT)(请亦留意我们如何利用 # 符号来解释我们的腳本,因为 # 之后的所有文字都会被视为註释)。
当 然,如果我们想接纳来自一系列 IP 地址的压缩,我们可以为每个被位任的 IP 地址加入一条规则,而这樣做的确是可行的。但是假如它们的数量很多,一次过加入一系列 IP 地址会比较简单。要这樣做,我们可以利用一个子网掩码或标準的斜線记法来指定 IP 地址的范围。举个例說,如果我们想将防火牆开放给来自整个 192.168.0.x(当中 x=1 到 254)范围的压缩,我们可以用下面其中一个方法来达致目的:
# 接纳来自被信任 IP 地址的压缩
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT # using standard slash notation
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT # using a subnet mask
最 后,除了过滤单一的 IP 地址外,我们亦可以配对该设备的 MAC 地址。要这应做,我们需要装入一个容许过滤 MAC 地址的模块(mac 模块)。较早前当我们用 state 模块来配对 ESTABLISHED 及 RELATED 压缩时,我们看见模块扩展 iptables 功能的例子。在这裡我们除了检查压缩的 IP 地址外,更利用 mac 模块来检查来源地的 MAC 地址:
# 接纳来自被信任 IP 地址的压缩
iptables -A INPUT -s 192.168.0.4 -m mac --mac-source 00:50:8D:FD:E6:32 -j ACCEPT
首先我们用 -m mac 来装入 mac 模块,然后我们用 --mac-source 来指定来源 IP 地址(192.168.0.4)的 MAC 地址。你要为每个需要过滤的乙太网设备找出 mac 地址。以 root 的身份执行 ifconfig(无線设备用 iwconfig)可以将 mac 地址告䜣你。
这 樣可防止来源地的 IP 地址被偽装,因为只有真正源於 192.168.0.4(MAC 地址是 00:50:8D:5D:E6:32)的压缩才会被接纳,而所有假扮源於该地址的压缩都会被拦截。请注意,过滤 MAC 地址在互联网上不能使用,卻絕对能正确地在內联网裡运作。
6. 端口及协议
由上面我们看见如何将新增规则在防火牆內,用来过滤符合某个界面或来源 IP 地址的压缩。 这樣做让我们能经过防火牆访问某些被信任的来源(主机)。现在我们看看如何过滤协议及端口,好叫我们能进一步区別要接纳及拦截那些对內的压缩。
在 我们开始之先,我们须要知道个別服务所使用的协议及端口编号。让我们以 bittorrent 作为一个简单的样例。bittorrent 在 6881 端口上採用 tcp 协议,因此我们需要容许所有以 6881 为目标端口(它们抵步时所用的端口)的 tcp 压缩。
# 接纳目标端口是 6881 号(bittorrent)的 tcp 压缩
iptables -A INPUT -p tcp --dport 6881 -j ACCEPT
在这裡我们附加(-A)一条规则到 INPUT 链,配对 tcp 协议(-p tcp)及从 6881 目标端口进入我们的机器(--dport 6881)。
註: 要配对目标或来源端口(--dport 或 --sport),你必须先指定协议(tcp、udp、icmp、all)。
我们亦可以扩展以上的样例来包含一系列的端口,例如,接纳 6881 至 6890 端口上的所有 tcp 压缩:
# 接纳目标端口是 6881-6890 号的 tcp 压缩
iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT
7. 融会贯通
既然我们已经有基本认识,现在便可以合併这些规则。
UNIX/Linux 上一个受欢迎的服务就是容许远程登录的 SSH 服务。SSH 缺省使用 22 号端口及採用 tcp 协议。因此假若我们想允许远程登录,我们需要容许 tcp 连接到 22 号端口:
# 接纳目标端口是 22 号(SSH)的 tcp 压缩
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这 樣做会开放 22 号端口(SSH)给所有对內的 tcp 连接,卻会构成潛在的安全性威胁,因为骇客可以強行破入使用易猜测口令的戶口。然而,假若我们知道那些通过 SSH 作远程登录的可信任机器的 IP 地址,我们便可以将访问权限制到那些来源 IP 地址。举个例說,如果我们只想将 SSH 的访问权开放给我们的私人內联网(192.168.0.x),我们可以将来源 IP 地址限制在这个范围:
# 接纳来自私人內联网,目标端口是 22 号(SSH)的 tcp 压缩
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
利 用来源 IP 进行过滤容让我们能安全地开放 22 号端口上的 SSH 给可信任的 IP 地址来访问。举个例說,我们可以用这个方法允许工作与家用机器之间的登录。对於其它 IP 地址来說,这个端口(与及服务)就好像了关闭了一樣,而服务亦依被停用,因此扫描端口的骇客多数会略过我们。
8. 总结
这裡只是很初步地介绍 iptables 可以做的事情,但我希望这份教学文档提供了一个良好的基础,帮助各位创建更复杂的规则集。
9. 连结
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-fw.html
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-iptables.html
发表评论
-
从nginx访问日志中的400错误说起
2012-06-06 15:41 0最近在整nginx+php+mysql的网站架设,发现n ... -
HTTP Post Denial Of Service
2011-01-06 17:39 0HTTP Post Denial Of Service ... -
apache的优化
2011-01-06 16:12 0配置网站,要充分的把系统资源利用出去,榨干系统的一切潜 ... -
转:linux环境下使用技巧
2010-10-01 07:51 2331About Shell-----------Q1.用户登录到L ... -
grep比较两个文件的异同
2010-03-18 15:31 24071、统计两个文本文件的相同行 grep -Ff file1 ... -
REDHAT5下 Tomcat6使用jsvc 自启动
2010-03-11 14:28 19561、安装jdk和tomcat6 2、编译安装 jsvc cd ... -
(转)fstab详解
2010-03-04 15:04 1796fstab(/etc/fstab)是Linux下比较重要的配置 ... -
Redhat5.2下应用xfs文件系统
2010-03-04 14:54 21371、安装环境: Vmware,Redhat5.2 2、安装相应 ... -
(转)Mysql分区表局限性总结
2010-03-01 17:15 4658Mysql5.1已经发行很久了,本文根据官方文档的翻译和自己的 ... -
[MySQL 5.1 体验]MySQL 分区
2010-03-01 17:12 1744一、概述 相信有很多人经常会问同样的一个问题:当 MySQL ... -
Linux iptables 开放Mysql端口
2010-03-01 14:37 2706修改防火墙配置文件: vi /etc/sysconfig/ip ... -
(转)基于MySQL5.0中limit的高性能分析
2010-02-25 12:20 1354基于MySQL5.0中limit的高性 ... -
(转)根据mysql的status信息优化mysql
2010-02-25 11:36 22471, 查看MySQL服务器配置信息 mysql> sho ... -
sudo免密码
2010-02-01 15:08 7791很多都是修改/etc/sudoers权限为740再加上一句 ... -
快速掌握重启Oracle数据库的操作步骤
2009-10-26 15:28 0一个特别实用的操作步骤 1. 停应用层的各种程序 ... -
配置apache虚拟目录
2009-09-23 21:50 0在节点:<IfModule alias_module&g ... -
如何知道启动时java 进程的pid
2009-07-08 19:40 0$JAVA_HOME/bin/java" -clas ... -
向已经安装好的apache添加模块,配置gzip压缩和expires缓存设置
2009-07-08 11:48 2005/usr/local/apache111/bin/apxs - ... -
在linux下安装ImageMagick和jmagic以及jpeg、png包
2009-07-08 11:17 0建议用jdk1.5.0_12,jmagick的配置有些情况下 ... -
服务器网页缓存的深入分析
2009-07-08 10:11 0Expires、Cache-Control、Last-Modi ...
相关推荐
漫画作品与时间旅行题材
Spring Boot特点: 1、创建一个单独的Spring应用程序; 2、嵌入式Tomcat,无需部署WAR文件; 3、简化Maven配置; 4、自动配置Spring; 5、提供生产就绪功能,如指标,健康检查和外部配置; 6、绝对没有代码生成和XML的配置要求;第一章 绪 论 1 1.1背景及意义 1 1.2国内外研究概况 2 1.3 研究的内容 2 第二章 关键技术的研究 3 2.1 相关技术 3 2.2 Java技术 3 2.3 ECLIPSE 开发环境 4 2.4 Tomcat介绍 4 2.5 Spring Boot框架 5 第三章 系统分析 5 3.1 系统设计目标 6 3.2 系统可行性分析 6 3.3 系统功能分析和描述 7 3.4系统UML用例分析 8 3.4.1管理员用例 9 3.4.2用户用例 9 3.5系统流程分析 10 3.5.1添加信息流程 11 3.5.2操作流程 12 3.5.3删除信息流程 13 第四章 系统设计 14 4.1 系统体系结构 15 4.2 数据库设计原则 16 4.3 数据表 17 第五章 系统实现 18 5.1用户功能模块 18 5.2
内容概要:本文作为PyTorch的入门指南,首先介绍了PyTorch相较于TensorFlow的优势——动态计算图、自动微分和丰富API。接着讲解了环境搭建、PyTorch核心组件如张量(Tensor)、autograd模块以及神经网络的定义方式(如nn.Module),并且给出了详细的神经网络训练流程,包括前向传播、计算损失值、进行反向传播以计算梯度,最终调整权重参数。此外还简要提及了一些拓展资源以便进一步探索这个深度学习工具。 适用人群:初次接触深度学习技术的新学者和技术爱好者,有一定程序基础并希望通过PyTorch深入理解机器学习算法实现的人。 使用场景及目标:该文档有助于建立使用者对于深度学习及其具体实践有更加直观的理解,在完成本教程之后,读者应当能够在个人设备上正确部署Python环境,并依据指示独立创建自己的简易深度学习项目。 其他说明:文中所提及的所有示例均可被完整重现,同时官方提供的资料链接也可以方便有兴趣的人士对感兴趣之处继续挖掘,这不仅加深了对PyTorch本身的熟悉程度,也为未来的研究或者工程项目打下了良好的理论基础和实践经验。
古镇美食自驾游:舌尖上的历史韵味
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
漫画作品与神话传说融合
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
ADC推理软件AI程序
漫画作品与科幻元素融合
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
java-springboot+vue景区民宿预约系统实现源码(完整前后端+mysql+说明文档+LunW+PPT).zip
在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。
边境自驾游异国风情深度体验
在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。
,,CAD、DXF导图,自动进行位置路径规划,源码可进行简单功能添加实现设备所需功能,已经在冲孔机,点胶机上应用,性价比超高。 打孔机实测一分钟1400个孔 ,CAD、DXF导图;自动位置路径规划;源码功能添加;设备功能实现;冲孔机点胶机应用;高性价比。,CAD导图DXF,自动规划位置路径,实测打孔速度惊人!性价比超高冲孔机实现多功能定制
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
本地部署,LM Studio,可以让大家本地部署在自己家里的电脑deepseek,再也不用忍受网站上deepseek的服务器繁忙的烦恼