基本Iptables  -  Debian / RedHat

概要

你可以在这里找到一个更容易阅读的版本: 5dollarwhitebox.org

很多人被IPTables吓坏了,很难理解。 但是,一旦你掌握了它,基础很简单。 本文档将作为使用iptables的基本操作方式。 我绝对不是一个iptables大师,但是像这样一直在使用它。 如果我有任何错误,请随时给我发电子邮件。


系统

Debian Sarge 3.1 Vanilla 2.6.12.4 kernel from mirrors.kernel.org iptables管理实用程序版本1.2.11-10


制备

这个操作方法在Debian Sarge 3.1框中执行,尽管命令和语法应该适用于任何linux发行版。 在配置iptables之前,您首先必须确保已将其编译到内核中,并且您已安装正确的用户级实用程序。


你应该有一个从内核编译时的配置文件。 对于“CONFIG_IP_NF”,对于大多数线/选项应该产生'= y'或'= m'。 在这里,您看到“CONFIG_IP_NF_IPTABLES”被编译为内核模块。

#cat /boot/config-2.4.30 | grep -i“CONFIG_IP_NF”

CONFIG_IP_NF_CONNTRACK = m
CONFIG_IP_NF_FTP = m
CONFIG_IP_NF_AMANDA = m
CONFIG_IP_NF_TFTP = m
CONFIG_IP_NF_IRC = m
CONFIG_IP_NF_QUEUE = m
CONFIG_IP_NF_IPTABLES = m
CONFIG_IP_NF_MATCH_LIMIT = m
CONFIG_IP_NF_MATCH_MAC = m
CONFIG_IP_NF_MATCH_PKTTYPE = m
CONFIG_IP_NF_MATCH_MARK = m
CONFIG_IP_NF_MATCH_MULTIPORT = m
CONFIG_IP_NF_MATCH_TOS = m
CONFIG_IP_NF_MATCH_RECENT = m
CONFIG_IP_NF_MATCH_ECN = m
CONFIG_IP_NF_MATCH_DSCP = m
CONFIG_IP_NF_MATCH_AH_ESP = m
CONFIG_IP_NF_MATCH_LENGTH = m
CONFIG_IP_NF_MATCH_TTL = m
CONFIG_IP_NF_MATCH_TCPMSS = m
CONFIG_IP_NF_MATCH_HELPER = m
CONFIG_IP_NF_MATCH_STATE = m
CONFIG_IP_NF_MATCH_CONNTRACK = m
CONFIG_IP_NF_MATCH_UNCLEAN = m
CONFIG_IP_NF_MATCH_OWNER = m
CONFIG_IP_NF_FILTER = m
CONFIG_IP_NF_TARGET_REJECT = m
CONFIG_IP_NF_TARGET_MIRROR = m
CONFIG_IP_NF_NAT = m
CONFIG_IP_NF_NAT_NEEDED = y
CONFIG_IP_NF_TARGET_MASQUERADE = m
CONFIG_IP_NF_TARGET_REDIRECT = m
CONFIG_IP_NF_NAT_AMANDA = m
CONFIG_IP_NF_NAT_SNMP_BASIC = m
CONFIG_IP_NF_NAT_IRC = m
CONFIG_IP_NF_NAT_FTP = m
CONFIG_IP_NF_NAT_TFTP = m
CONFIG_IP_NF_MANGLE = m
CONFIG_IP_NF_TARGET_TOS = m
CONFIG_IP_NF_TARGET_ECN = m
CONFIG_IP_NF_TARGET_DSCP = m
CONFIG_IP_NF_TARGET_MARK = m
CONFIG_IP_NF_TARGET_LOG = m
CONFIG_IP_NF_TARGET_ULOG = m
CONFIG_IP_NF_TARGET_TCPMSS = m
CONFIG_IP_NF_ARPTABLES = m
CONFIG_IP_NF_ARPFILTER = m
CONFIG_IP_NF_ARP_MANGLE = m
CONFIG_IP_NF_COMPAT_IPCHAINS = m
CONFIG_IP_NF_NAT_NEEDED = y
CONFIG_IP_NF_COMPAT_IPFWADM = m
CONFIG_IP_NF_NAT_NEEDED = y

这不是必需的,因为一旦我们尝试添加一些规则,您会发现iptables是否正常工作。


您可以通过执行以下步骤来检查是否安装了iptables管理实用程序:

#dpkg -l iptables
iptables 1.2.11-10 Linux内核2.4+ iptables管理


...或基于rpm的发行版:

#rpm -qa | grep iptables iptables-xxxxx


...或者你可以看看二进制是否存在!

#哪个iptables
/ sbin / iptables



如果该实用程序丢失,您可以像这样安装它:

易于

#apt-get update && apt-get install iptables


RPM

#rpm -Uvh iptables-xxxx.rpm
准备############################## [100%]



主文件


Debian

  • /etc/init.d/iptables - INIT脚本启动|停止|重新启动服务(并保存规则集)。 这个文件不再是Sarge的默认值,但你仍然可以得到它(我会告诉你)。
  • / var / lib / iptables - Debian的“active”和“inactive”iptables - 保存计数器文件(即保存的规则集)。 在RedHat上,您可以在“/ etc / sysconfig / iptables”中找到保存的规则。
  • / var / lib / iptables / active - 活动计数器(稍后再说)
  • / var / lib / iptables / inactive - 非活动计数器
  • / sbin / iptables - 管理实用程序/二进制文件。


红帽

  • /etc/init.d/iptables - INIT脚本启动|停止|重新启动服务(并保存规则集)。
  • / etc / sysconfig / iptables - 用于iptables-save计数器文件的RedHat文件(即保存的规则集)。
  • / sbin / iptables - 管理实用程序/二进制文件。


一点关于IPTables


要查看我们目前所使用的规则集,执行:

#iptables --list
链INPUT(政策接受)
目标保护源目的地

链条向前(政策接受)
目标保护源目的地

链输出(政策接受)
目标保护源目的地



当没有规则集到位时,这将是你会看到的。 看这个,我们看到3'链'。


  • INPUT - 保留针对此服务器的流量的规则。
  • FORWARD - 保留将转发到此服务器后面的IP的流量规则(即,如果此框用作其他服务器的防火墙)。
  • OUTPUT - 将来自此服务器的流量的规则保留到互联网。



主要是处理针对此服务器的流量,并将为INPUT链发布规则。 当流量通过内核时,它决定了一个“TARGET” 基于分组是否匹配规则。 一般目标是:


  • 接受 - 交通接受交货。
  • 拒绝 - 流量被拒绝,将数据包发送回发送主机。
  • DROP - 流量被丢弃。 没有任何东西发送回发送主机。



配置规则集


所以,让我们来吧。 重要的是要注意附加规则的顺序是非常重要的。 例如,如果你的第一条规则是拒绝所有的事情,那么无论你明确允许什么,都会被拒绝。


还要注意的是,只有执行“iptables-save”(或使用init脚本保存),您所做的任何操作都将保存在磁盘上。 所有计数器/规则集都在内存中。 一旦服务器重新启动,或者执行'iptables --flush',您所做的一切都已经消失了。 我个人使用一个名为'iptables-rules.sh'的bash脚本文件,这样我就可以保存所有内容并进行评论。 如果我犯了一个错误,我不用担心,如果我只是想把所有的规则冲出来,我只是回到我的bash脚本,再次开始编辑,保存并执行脚本(但是这不会在启动时运行...将在下一节中介绍)。


非常重要的是,如果您通过ssh远程处理此服务器,那么您尽全力不要锁定自己。 因此,我们的第一条规则是确保无论什么,我仍然可以从我的IP地址访问ssh。

#iptables -A INPUT -s 192.168.1.10 -d 10.1.15.1 -p tcp --dport 22 -j ACCEPT


让我们断断续续:

  • -A =>告诉iptables将这条规则附加到INPUT链
  • -s =>源地址。 此规则仅适用于来自此IP的流量。 用您正在SSHing的IP地址替换。
  • -d =>目的地址。 此规则仅适用于要访问此IP的流量。 用该服务器的IP替代。
  • -p =>协议。 指定TCP的流量。
  • --dport =>目的端口。 指定用于TCP端口22(SSH)的流量
  • -j =>跳。 如果此规则中的所有内容都匹配,则跳转到ACCEPT


接下来,我们将为一般网络流量使用一些标准规则。 这超出了基本的东西,但是iptables可以确定数据包所在的“状态”。这与标准的TCP通信有关。 例如,传输数据时两台主机之间的3路握手。


  • NEW => Server1连接到发出SYN(Synchronize)数据包的Server2。
  • 服务器2接收到SYN数据包,然后用SYN-ACK(同步确认)数据包进行响应。
  • ESTABLISHED =>服务器1接收SYN-ACK包,然后用最后的ACK(确认)包进行响应。



此3次握手完成后,流量现已建立。 为了这种类型的TCP通信,需要与这三个规则类似的东西:

#iptables -A INPUT -m state --state相关,ESTABLISHED -j接受
#iptables -A FORWARD -i eth0 -m state --state相关,ESTABLISHED -j接受
#iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

最后一条规则显然允许任何流量离开服务器。



现在我们已经将基础设置到位,让我们看看我们的规则集中的iptables列表:

#iptables --list
链INPUT(政策接受)
目标保护源目的地

ACCEPT tcp - 192.168.1.10 10.1.15.1 tcp dpt:ssh
接受任何地方的任何地方相关,ESTABLISHED

链条向前(政策接受)
目标保护源目的地
接受任何地方的任何地方相关,ESTABLISHED

链输出(政策接受)
目标保护源目的地
接受任何地方的任何地方,新的,相关的,已建立



从这里你可以添加你喜欢的任何规则。 如果你运行一个基本的Web服务器,你可能需要类似的东西:


首例:

-------------------------------------------------- ---------------------

BAD GUYS(阻止源IP地址):
#iptables -A INPUT -s 172.34.5.8 -j DROP

没有垃圾邮件(注意使用FQDN):
#iptables -A INPUT -s mail.spammer.org -d 10.1.15.1 -p tcp --dport 25 -j REJECT

-------------------------------------------------- ---------------------


然后打开它: --------------------------------------------- --------------------------

MYSQL(允许远程访问特定IP):
#iptables -A INPUT -s 172.50.3.45 -d 10.1.15.1 -p tcp --dport 3306 -j ACCEPT

SSH:
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 22 -j ACCEPT

Sendmail / Postfix:
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 25 -j ACCEPT

FTP:(注意如何指定端口范围20-21)
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 20:21 -j ACCEPT

被动FTP端口也许(再一次,在一个规则中指定端口50000到50050)
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 50000:50050 -j ACCEPT

HTTP / Apache
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 80 -j ACCEPT

SSL / Apache
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 443 -j ACCEPT

IMAP
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 143 -j ACCEPT

IMAPS
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 993 -j ACCEPT

POP3
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 110 -j ACCEPT

POP3S
#iptables -A INPUT -d 10.1.15.1 -p tcp --dport 995 -j ACCEPT

从本地主机的任何流量:
#iptables -A INPUT -d 10.1.15.1 -s 127.0.0.1 -j ACCEPT

ICMP / Ping:
#iptables -A INPUT -d 10.1.15.1 -p icmp -j ACCEPT ---------------------------------- -------------------------------------



全球拒绝最后:

-------------------------------------------------- ---------------------

拒绝所有其他的IP:

#iptables -A INPUT -d 10.1.15.1 -j REJECT

或者,拒绝任何IP地址通过任何IP:
#iptables -A INPUT -j REJECT
#iptables -A FORWARD -j REJECT ------------------------------------------ -----------------------------

注意我们做最后的全球REJECT行! 这些必须是最后的。


保存规则集


使用init脚本,保存规则集非常简单。 一旦您对配置感到满意,只需执行以下操作之一:


Debian方式

默认情况下,旧样式的初始化脚本不再位于Sarge中,但它仍然在遗留使用。 我相信新的方式是为iptables脚本使用'/etc/network/if-up.d'和'/etc/network/if-down.d'(但我不喜欢这样)。


您可以通过以下方式获取遗留的INIT脚本:

#gunzip /usr/share/doc/iptables/examples/oldinitdscript.gz -c> /etc/init.d/iptables
#chmod + x /etc/init.d/iptables
#mkdir / var / lib / iptables
#chmod 700 / var / lib / iptables

现在你有脚本到位,你可以做需要的。


主动规则

活动规则是启动iptables时加载的规则:

#/etc/init.d/iptables保存活动
保存iptables规则集:用计数器保存“活动”。

这将您的规则保存在/ var / lib / iptables / active中


非活动规则

您还可以配置第二组规则,以便在停止称为“非活动”的iptables时。 Iptables实际上并没有“停止”,它只是刷出已经存在的规则集,然后加载“非活动”规则。

#/etc/init.d/iptables停止
加载iptables规则集:加载“不活动”


因此,您可以设置“不活动”规则,然后使用以下命令保存:

#/etc/init.d/iptables保存不活动
保存iptables规则集:用计数器保存“inactive”。


RedHat路

RedHat INIT脚本非常相似。 您可以使用它来启动和停止iptables,以及保存规则集。


要保存活动规则,请执行以下操作:

#/etc/init.d/iptables保存

这将保存您的规则到'/ etc / sysconfig / iptables'。


当您启动iptables时,规则将从“/ etc / sysconfig / iptables”读取:

#/etc/init.d/iptables启动
启动iptables [OK]


当你停止iptables时,所有的规则都会刷新:

#/etc/init.d/iptables停止
停止iptables [OK]



手动保存并恢复

您还可以手动使用iptables-save和iptables-restore实用程序,如下所示:


将规则保存到文件

#iptables-save> /root/iptables-save.out


恢复规则

#iptables-restore -c /root/iptables-save.out

-c告诉iptables-restore这个文件是使用iptables-save创建的,它将规则输出为“counters”。



结论

在那里你去,iptables在它非常基本。 iptables的用途太多,甚至不能真正做到这一点。 但是,为了基本的安全性和IPTables的理解,希望这可能有助于您。 如果有什么我可以添加,请随时给我发电子邮件。



--- ---
BJ Dierkes,RHCE4-LPIC1
wdierkes [at] 5dollarwhitebox [dot] org
德州,美国


资源

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏