使用iptables

 

使用iptables


原文出处:http://www.unixreview.com/articles/2001/0104/0104l/0104l.htm
作者:Joe "Zonker" Brockmeier
编译:ideal <ideal@linuxaid.com.cn>

在上一篇文章中我们讨论了在Linux2.4内核中如何实现对Netfilter框架和iptables的支持,在这一篇文章中我们将继续讨论iptalbes的基本语法和如何创建一个基本的防火墙。

如果你仍然在使用linux2.2.x内核,你将不能使用iptalbes工具,然而也许你希望了解更多的关于iptables方面的知识以为迁移到2.4内核作准备。当前,稳定的最新版本内核为2.4.5,iptables的最新稳定版本为1.2.2。

另外可以在以下地址访问netfilter框架的主页: netfilter.samba.org/netfilter.gnumonks.orgnetfilter.filewatcher.org。同时在四月一六日发布了一个对 ip_conntrack_ftp安全弱点的补丁希望的到关于这个安全弱点的完全描述可以在 http://netfilter.samba.org/security-fix/index.html处得到,并下载补丁程序。

开始工作

毫无疑问用户需要以root身份登录系统来使用iptables工具,以root身份登录进入系统以后,你也许首先希望查看当前防火墙系统中有哪些设置,通过命令"iptables -L"来察看当前设定的防火墙规则,若希望了解防火墙设置的查看详细信息,可以使用"iptables --list"命令来查看。

若没有任何规则链被加载,则输出将如下图所示:

默认情况下,系统有三条规则链:INPUT、OUTPUT和FORWARD,所有规则链的策略都为ACCEPT。也就是说在配置任何规则以前,系统是完全开放的。

若你希望将你的系统作为防火墙使用,那么你需要打开IP转发开关:

echo "1" > /proc/sys/net/ipv4/ip_forward.

添加规则

如果没有任何规则,iptables则不会产生任何效应,下面我们就向现存的规则链中添加一些规则。若你不希望别人通过ping工具来探测你的主机,你可以使用下面的规则来限定:

iptables -A INPUT -p icmp -j DROP

参数"-A INPUT"设定iptables在INPUT链后添加该规则,参数"-p icmp"指示该规则是施用于icmp协议,参数"-j DROP" 指示匹配该规则的数据报应该被丢弃。现在向该服务器发送的ping数据,该服务器将会丢弃这些数据,因此的不到响应。其中协议名"icmp"是和大小无关的,可以是"icmp"也可以是"ICMP"。

若需要删除该规则,使服务器响应ping命令,则使用下面命令:

iptables -D INPUT 1

"-D"参数指示iptables工具删除INPUT规则链中的第一条规则。若你的规则链中有多条规则,则该命令不会影响到规则。这时候你也许希望清除前面所有命令定义的规则而从头开始,可以使用命令:

iptables -F INPUT

该命令指示iptables清空INPUT规则链中的所有规则。

阻塞telnet连接

现在我们来尝试一个稍微复杂一些的例子。我们希望阻塞来自外部网络到服务器的SSH连接但是允许内部网络的SSH连接。为了防止用户的用户名和密码外泄,因此组织所有的连接外部网络的telnet连接。

首先在INPUT规则链中设置一条允许内部网络ssh连接服务器的规则:

iptables -A INPUT -s 198.168.0.0 -p tcp --destination-port ssh -j ACCEPT

参数"-s"指定该规则适用于哪些源地址的连接。"--destination-port"指定TCP连接端口。

下面的规则阻塞所有来自外部网络对内部服务器的SSH连接:

iptables -A INPUT -s ! 198.168.0.0 -p tcp --destination-port ssh -j DROP

该命令和上面的命令是几乎是同一条命令,除了它定义的是阻塞外部网络的SSH连接。若你希望在外部网络中能连接内部服务器则不要定义该规则。要使定义的规则发挥作用,定义规则的主机必需是路由器,所有的数据都经过该服务器才能实现控制,否则这些规则无法发挥作用。同时注意上面规则定义中“!”和后面网络地址之间必须有个空格。

最后,为了阻塞连向外部的telnet连接,向OUTPUT规则链添加如下规则:

iptables -A OUTPUT -p tcp --destination-port telnet -j DROP

这一次定义的规则是添加到INPUT链中。当该规则被定义,用户试图通过telnet链接出去时,将会被阻塞,用户将得不到响应。这可能会引起用户以为是目标服务器出现了问题,因此我们修改该规则,不丢弃telnet数据,而是拒绝该数据:

iptables -F OUTPUT
iptables -A OUTPUT -p tcp --destination-port telnet -j REJECT

清空OUTPUT链接以后,我们将使用一个类似的命令,只是规则目标动作变为"REJECT"。这时候用户telnet外部服务器时会得到链接被拒绝的错误。

若希望允许telnet链接内部服务器,则清空OUTPUT规则链然后重新设定规则:

iptables -A OUTPUT -p tcp --destination-port telnet -d 198.168.0.0 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port telnet -d ! 198.168.0.0 -j REJECT

你也许现在会施用"iptables -L"命令来查看当前定义的规则,确保规则输入正确,输出就如下图所示:

总结

在本文中我们讨论了iptables的基本使用方法,正如你所看到的那样iptables并不是想像中的那么复杂和难以使用,但是它非常强大和灵活。目前iptables仍然处于不断的发展和成熟之中,如果有任何相关问题可以参加邮件列表 http://lists.samba.org/pipermail/netfilter/0进行咨询。

资源链接

The Netfilter Project Homepage ( http://netfilter.samba.org/)
Netfilter Mailing List ( http://lists.samba.org/pipermail/netfilter/)

桥接模式在Linux系统下通过iptables工具主要用于网络路由管理和数据包过滤。iptables是一个强大的防火墙管理系统,用于控制入站、出站以及内部主机之间的通信流量。 ### iptables的基本原理 iptables工作于网络栈的不同层级: - **filter表**:处理数据包是否允许进入或离开系统。 - **nat表**:修改数据包的源IP地址、目标IP地址或其他网络参数,通常用于负载均衡和端口转发等场景。 - **mangle表**:改变数据包的内容或标记信息,如更改端口号或设置标记供其他规则使用。 - **raw表**:对数据包进行筛选,在数据包到达filter表之前运行规则。 - **security表**:包含更细粒度的安全策略。 ### 使用iptable配置桥接模式的例子 假设我们想要将两个网络接口连接起来,并允许它们之间直接通信,而无需经过路由器的额外处理。这可以使用iptables的`bridge-masquerade`规则来实现: ```bash sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100 sudo iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.100 -j MASQUERADE ``` 这里,第一行命令将所有目的端口为80的数据包从eth0接口送往指定的目标地址(例如,192.168.1.100)。第二行命令则使得数据包从eth1接口发送出去时,其源IP地址显示为目标地址,以此达到模拟“桥接”的效果。 ### 关键点解释 - `PREROUTING`: 这个链在数据包进入内核前处理,适用于改变目标地址的情况。 - `POSTROUTING`: 这个链在数据包离开内核前处理,适用于改变源地址的情况。 - `DNAT`: Destination Network Address Translation,将外部目标地址转换为内部目标地址。 - `MASQUERADE`: 改变数据包的源IP地址为出口接口的IP地址。 ### 注意事项 - 使用iptables时务必小心谨慎,错误的命令可能导致系统不可用。 - 定期备份iptables规则以防误操作。 - 确保有充分的理解和测试,尤其是在生产环境中应用复杂的iptables规则。 ### 相关问题: 1. iptables如何区分不同类型的网络流量并进行特定的处理? 2. 实现iptables规则的具体步骤是什么? 3. iptables与其他网络安全工具(如firewalld)相比有何优缺点?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值