9个常用iptables配置实例

iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习iptables的详细用法。

1. 删除已有规则

在新设定iptables规则时,我们一般先确保旧规则被清除,用以下命令清除旧规则:

iptables -F
(or iptables --flush)

2. 设置chain策略

对于filter table,默认的chain策略为ACCEPT,我们可以通过以下命令修改chain的策略:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

以上命令配置将接收、转发和发出包均丢弃,施行比较严格的包管理。由于接收和发包均被设置为丢弃,当进一步配置其他规则的时候,需要注意针对INPUT和OUTPUT分别配置。当然,如果信任本机器往外发包,以上第三条规则可不必配置。

3. 屏蔽指定ip

有时候我们发现某个ip不停的往服务器发包,这时我们可以使用以下命令,将指定ip发来的包丢弃:

BLOCK_THIS_IP="x.x.x.x"iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

以上命令设置将由x.x.x.x ip发往eth0网口的tcp包丢弃。

4. 配置服务项

利用iptables,我们可以对日常用到的服务项进行安全管理,比如设定只能通过指定网段、由指定网口通过SSH连接本机:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

若要支持由本机通过SSH连接其他机器,由于在本机端口建立连接,因而还需要设置以下规则:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

类似的,对于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp连接的服务,也可以参照上述命令配置。

对于基于udp的dns服务,使用以下命令开启端口服务:

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

5. 网口转发配置

对于用作防火墙或网关的服务器,一个网口连接到公网,其他网口的包转发到该网口实现内网向公网通信,假设eth0连接内网,eth1连接公网,配置规则如下:

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

6. 端口转发配置

对于端口,我们也可以运用iptables完成转发配置:

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

以上命令将422端口的包转发到22端口,因而通过422端口也可进行SSH连接,当然对于422端口,我们也需要像以上“4.配置服务项”一节一样,配置其支持连接建立的规则。

7. DoS攻击防范

利用扩展模块limit,我们还可以配置iptables规则,实现DoS攻击防范:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

–litmit 25/minute 指示每分钟限制最大连接数为25

–litmit-burst 100 指示当总连接数超过100时,启动 litmit/minute 限制

8. 配置web流量均衡

我们可以将一台服务器作为前端服务器,利用iptables进行流量分发,配置方法如下:

iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80 

iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80 

iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80

以上配置规则用到nth扩展模块,将80端口的流量均衡到三台服务器。

9. 将丢弃包情况记入日志

使用LOG目标和syslog服务,我们可以记录某协议某端口下的收发包情况。拿记录丢包情况举例,可以通过以下方式实现。

首先自定义一个chain:

iptables -N LOGGING

其次将所有接收包导入LOGGING chain中:

iptables -A INPUT -j LOGGING

然后设置日志前缀、日志级别:

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

最后将包倒向DROP,将包丢弃:

iptables -A LOGGING -j DROP

另可以配置syslog.conf文件,指定iptables的日志输出。

iptables配置只允许PHP 9000端口访问

以一键安装包搭建的环境为基础,php 默认是监听在 127.0.0.1:9000 。本文以此为例进行配置说明:

通常,设置 iptables 会对于服务器的对外访问都设置为允许比如:

filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0]

允许 9000 端口入站规则就可以 ,配置示例如下:

服务器安全

如果出站规则设置的比较严格,设置默认 OUTPUT 为 DROP,则需补充设置对应的规则:

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

服务器安全

备注:默认情况下,CentOS 下 iptables 的配置文件在 /etc/sysconfig/iptables,修改配置文件之后需要重启 iptables 生效。

Linux桌面系统iptables安全配置

服务器安全

Linux 的安全声誉一直比 Windows 系统要好,但它也并不完美。有许多 Linux 发行版都没有采用最佳的安全默认值,所以用户在安装好系统之后,大多需要自行实施安全配置。

例如:Linux 桌面安装完成后,默认的防火墙配置都不像 Windows 那样已经内置了很多常用的安全策略,而需要用户手动进行安全配置。

而不论是 Linux 桌面版还是服务器版本,都内置了 iptables 这一包过滤器(严格来说只是包过滤器的控制器),在本指南中,系统极客将向大家介绍如何使用 iptables 来保护您的 Linux 桌面系统安全。

什么是iptables

iptables 是内置于 Linux 内核中的包过滤器,几乎所有 Linux 发行版都自带了此功能。它是控制计算机进、出网络流量的最直接方式,在很多场景下都被当作防火墙来使用。

iptables 在开源领域、Linux 行业或普通用户中都有不小的名声,你不需要了解 iptables 的繁杂内容就可以在 Linux 桌面上有效地使用它,但还是需要掌握一些基本知识才能用好。

iptables命令结构

所有 iptables 规则都遵循相同的基本结构。简单来说,每条规则其实都是可以单独执行的 iptables 命令,它会告诉 Linux 内核如何处理特定端口的流量。 示例如下:

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT

上述命令看似复杂,但我们将其拆开来看的话,其实真的很简单。首先,这条规则的 -A 表示将此条规则附加到你的 iptables 规则上。

随后的 -i 标志指定了此规则所用的网络接口 eth0。(你在编写自己的规则时,请确保知道通过哪个网口连接到网络。)

-p 标志用于指定协议,以上这条规则适用于 tcp 协议。

-m 标志有点不同,它用于判断必须满足的条件才能使流量不被拒绝。 此规则的条件是状态。

–sport 代表「源端口」,它告诉 iptables 流量来自哪个端口。 还有一个 –dport 标志代表「目标端口」,它用于处理哪些端口流量可到达 OUTPUT。

最后还有 -j 标志,它用于对符合此条 iptables 规则的数据包执行 ACCEPT、DROP 或 REJECT 操作。

对于普通用户来说,最常见的 iptables 命令参数就是如此,普通桌面 Linux 用户应该够用了。但如果你想要详细并全面了解 iptables,还需要把表(tables)、链(chain)、规则(rules)以及 iptables 的数据包处理流程都研究清楚才行,在这里我们不做详细说明。

使用iptables规则文件

所有 Linux 用户在配置 iptables 策略时都可以逐条输入命令,但每次都单独配置的话会非常繁琐,而且不利于复用。所以,创建单独的 iptables 规则文件就要明智得多。

iptables 规则文件只要是文本文件类型即可,而且必需以如下格式开头和结尾。本文我们使用 /tmp/iptables-ip4 文件作为示例,在文件中添加以下两行,所有规则都被包在它们之间。

*filter
#规则
#规则
#规则
COMMIT

适用于Linux桌面安全的iptables规则

回到本文的主题,现在开始介绍用于保护 Linux 桌面安全的常见 iptables 规则。当然,如下规则只是对普通 Linux 桌面环境的安全建议,如果你还在运行其他服务或需要打开其他端口,也可以调整某些内容或添加自己的规则。

Loopback

环回接口是 Linux 使用的内部接口:

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

Ping

有许多用户都喜欢对自己的桌面计算机禁 Ping,但系统极客建议大家尽量不要对桌面系统禁 Ping,这对于日常的网络连接测试还是很有用的。如果要允许 ping,请添加下面的规则:

-A INPUT -i ens33 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT
-A INPUT -i ens33 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o ens33 -p icmp -j ACCEPT

Web访问

大家日常办公的机器显然是需要访问网页的,所以可用如下规则打开 Web 服务访问:

-A INPUT -i ens33 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
-A INPUT -i ens33 -p tcp -m state --state ESTABLISHED,RELATED --sport 443 -j ACCEPT

-A OUTPUT -o ens33 -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o ens33 -p tcp -m tcp --dport 443 -j ACCEPT

当然,要将网站的域名解析为 IP 地址还需要允许 DNS 查询:

-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport 53 -m udp -j ACCEPT

时间服务

大多数 Linux 桌面会使用 NTP 服务来设置和维护来自 Internet 的系统时间。 所以,需要允许你的计算机连接到 NTP 服务器以获取时间:

-A INPUT -i ens33 -p udp -m state --state ESTABLISHED,RELATED --dport 123 -j ACCEPT
-A OUTPUT -o ens33 -p udp -m udp --sport 123 -j ACCEPT

打印服务

除非你使用的是 USB 打印机或其它方式连接的外部打印机,不然还需要启用与 CUPS 的网络连接:

-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 631 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT

电子邮件

对于电子邮件的发送和接收可能会比较棘手,在这里我们允许的是使用 SSL 协议的电子邮件端口:

# IMAP
-A INPUT -i ens33 -p tcp -m state --state ESTABLISHED,RELATED --sport 993 -j ACCEPT
-A OUTPUT -o ens33 -p tcp -m tcp --dport 993 -j ACCEPT

# POP3
-A INPUT -i ens33 -p tcp -m state --state ESTABLISHED,RELATED --sport 995 -j ACCEPT
-A OUTPUT -o ens33 -p tcp -m tcp --dport 995 -j ACCEPT

# SMTP
-A INPUT -i ens33 -p tcp -m state --state ESTABLISHED,RELATED --sport 465 -j ACCEPT
-A OUTPUT -o ens33 -p tcp -m tcp --dport 465 -j ACCEPT

如果你还需要使用不安全的电子邮件,请替换这些端口。

SSH服务

为了使用 SSH 连接还需要允许 SSH 数据包的流入和流出:

# Input
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
# Output
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT

DHCP服务

大多数 Linux 桌面都通过 DHCP 服务自动从路由器(或 DHCP Server)获取 IP 地址。 DHCP 服务使用自己专有的端口,所以也需要允许其数据包通行。

-A INPUT -i ens33 -p udp -m state --state ESTABLISHED,RELATED --sport 67:68 -j ACCEPT
-A OUTPUT -o ens33 -p udp -m udp --dport 67:68 -j ACCEPT

如果你使用静态 IP,则不需要这些规则。

拒绝其它数据包

日常需要用到的端口和协议都开放了,最后就需要告诉 iptables 绝对拒绝上面规则中没有明确允许的数据包内容:

-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT

一切准备妥当之后,你的 iptables 规则文件看起来应该像这样:

服务器安全

导入iptables规则

现在,你已经有了适用于自己环境 Linux 桌面安全的 iptables 规则,只需将它交给 iptables 来使用即可。不过,如果你此前已经添加了一些规则,可以通过如下命令将其清除:

sudo iptables -F && sudo iptables -X

服务器安全

清理完成后,使用如下命令导入 iptables 规则文件:

sudo iptables-restore < /tmp/itpables-ip4

如果要查看当前计算机正使用的新 iptables 规则,可以通过如下命令查看:

sudo iptables -S

服务器安全

最后还需要提醒大家注意,通过手动或规则文件添加的 iptables 规则都不是永久的。如果你重启计算机,这些规则都将被清空,需要重新添加或从文件导入。

配置iptables永久规则

要让 iptables 规则永久化的方法很多,而且不同 Linux 发行版的配置方式也不尽相同。出于 Debian 和 Ubuntu 系统最受广大 Linux 桌面用户的欢迎,所以以其作为示例。

在 Debian 和 Ubuntu 中有一款被称为 iptables-persistant 的应用可以在重启系统的过程中保存和恢复 iptables 规则,所以需要先安装:

sudo apt install iptables-persistent

服务器安全

在安装过程中,软件包会询问您是否要永久保存 iptables 配置,选择「是」就行。

将来在变更了 iptables 规则时,可以运行以下命令再次永久保存:

sudo service netfilter-persistent save

ezhttp配置防火墙iptables

对于在外网的服务器iptables非常的重要,它可以设置网络权限到最小以增强服务器安全性。不过手工配置iptables有点繁琐,且需要记住不少用法。这里我们使用ezhttp来轻松快速地配置iptables。在开始之前,请先查看ezhttp介绍

进入Iptables_settings菜单选项

进入Some Useful Tools -》 Iptables_settings

选择要操作的项目

有5个选项:

  • 1) clear all record,setting from nothing.
  • 2) add a iptables rule.
  • 3) delete any rule.
  • 4) backup rules and stop iptables.
  • 5) rescore iptables
  • 6) list iptables rules
  • clear all record,setting from nothing

    “clear all record,setting from nothing”,是初始化iptables表,将清空iptables表,设置INPUT和OUTPUT的默认策略为ACCEPT,然后提示输入要开放的端口,多个端口以空格分隔。如图将开放22 80 443端口:
    未分类
    输入端口回车之后将设置INPUT链默认策略为DROP,然后开放输入的端口。
    初始化完成后将提示是否继续设置iptables,y则继续设置,n则退出并保存iptables表到文件。

    add a iptables rule

    在INPUT链添加一条规则。
    1) 选择匹配的协议。
    1为tcp,2为udp,3为所有。直接回车为tcp。
    2) 设置匹配的来源IP
    可以默认单个IP或一个网段,留空直接回车则匹配所有来源IP
    3) 输入匹配的目的端口
    只支持输入一个,如3306。留空直接回车则匹配所有端口。
    4)选择匹配后的行为
    1为ACCEPT,2为DROP。直接回车默认为ACCEPT。如图:
    未分类

    delete any rule

    删除一条指定规则。输入左侧对应的规则序号回车删除此规则。如图:
    未分类

    backup rules and stop iptables

    备份规则到一个文件并清空所有规则。

    rescore iptables

    从文件恢复iptables规则

    远程密令临时开启ssh端口

    linux服务器,我们一般是通过ssh通道远程管理,这就需要我们开启ssh端口,如22。但开启端口有被暴力破解的风险,你会说可以设置复杂的密码或使用证书避免。就算破解不了密码,但openssh也可能会有漏洞,你会说可以更改ssh端口,但还是有可能被扫描出来。还有一种选择,我们可以只允许指定IP访问ssh,通过vpn登录管理服务器,但局限很明显,万一紧急情况vpn登录不上去了怎么办。下面给出一种个人觉得比较满意的解决方案,即使用iptables的recent模块,通过密令临时开启ssh端口。当然,密令需要保管好,防止外泄。
    1、iptables规则设定

    1. #指定78字节的icmp数据包(包含IP头部20字节,ICMP头部8字节)通过被加入sshopen列表。
    2. iptables -A INPUT -p icmp –icmp-type 8 -m length –length 78 -m recent –set –name sshopen –rsource -j ACCEPT
    3. #检查sshopen列表是否存在你的来源IP,如果存在,即从第一次使用密令开始15秒钟内开启ssh端口22,超过15秒端口自动关闭,不再允许新连接,已连接的不会断开。
    4. iptables -A INPUT -p tcp –dport 22 –syn -m recent –rcheck –seconds 15 –name sshopen –rsource -j ACCEPT

    2、临时开启ssh端口密令

    1. linux下:ping -s 50 host
    2. windows下:ping -l 50 host

    3、我目前使用的iptables规则

    1. -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    2. -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
    3. -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
    4. -A INPUT -p tcp -m tcp –dport 123 -j ACCEPT
    5. -A INPUT -p icmp -m icmp –icmp-type 8 -m length –length 50 -m recent –set –name sshopen –rsource -j ACCEPT
    6. -A INPUT -p tcp -m tcp –dport 22 –syn -m recent –rcheck –seconds 15 –name sshopen –rsource -j ACCEPT
    7. -A INPUT -i lo -j ACCEPT
    8. -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
    9. -A INPUT -p icmp -m icmp –icmp-type 11 -j ACCEPT
    10. -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    11. -A OUTPUT -o lo -j ACCEPT
    12. -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
    13. -A OUTPUT -p tcp -m tcp –dport 443  -j ACCEPT
    14. -A OUTPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
    15. -A OUTPUT -p icmp -m icmp –icmp-type 11 -j ACCEPT

    参考:http://blog.onovps.com/archives/iptables-recent.html

    iptables练习题

    反色空白处见答案:
    1.1)设定INPUT为ACCEPT
    1.2)设定OUTPUT为ACCEPT
    1.3)设定FORWARD为ACCEPT
    答案:

    1. iptables -P INPUT ACCEPT
    2. iptables -P OUTPUT ACCEPT
    3. iptables -P FORWARD ACCEPT


    2)定制源地址访问策略
    2.1)接收来自192.168.0.3的IP访问
    2.2)拒绝来自192.168.0.0/24网段的访问

    1. iptables -A INPUT -i eth0 -s 192.168.0.3 -j ACCEPT
    2. iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP


    3)目标地址192.168.0.3的访问给予记录,并查看/var/log/message

    1. iptables -A INPUT -s 192.168.0.3 -j LOG


    4)定制端口访问策略
    4.1)拒绝任何地址访问本机的111端口
    4.2)拒绝192.168.0.0/24网段的1024-65534的源端口访问SSH

    1. iptables -A INPUT -i eth0 -p tcp –dport 111 -j DROP
    2. iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 –sport 1024:65534 –dport ssh -j DROP


    5)定制CLIENT端的防火墙访问状态
    5.1)清除所有已经存在的规则;
    5.2)设定预设策略,除了INPUT设为DROP,其他为ACCEPT;
    5.3)开放本机的lo可以自由访问;
    5.4)设定有相关的封包状态可以进入本机;

    1. iptables -F
    2. iptables -X
    3. iptables -Z
    4. iptables -P INPUT DROP
    5. iptables -P OUTPUT ACCEPT
    6. iptables -P FORWARD ACCEPT
    7. iptables -A INPUT -i lo -j ACCEPT
    8. iptables -A INPUT -m state RELATED,ESTABLISHED -j ACCEPT
    9. iptables -A INPUT -m state INVALID -j DROP


    6)定制防火墙的MAC地址访问策略
    6.1)清除所有已存的规则
    6.2)将INPUT设为DROP
    6.3)将目标计算机的MAC设为ACCEPT

    1. iptables -F
    2. iptables -X
    3. iptables -Z
    4. iptables -P INPUT DROP
    5. iptables -A INPUT -i eth0 -m MAC –mac-source 00-C0-9F-79-E1-8A -j ACCEPT


    7)设定ICMP包,状态为8的被DROP掉

    1. iptables -A INPUT -i eth0 -p icmp –icmp-type 8 -j DROP


    8)定制防火墙的NAT访问策略
    8.1)清除所有策略
    8.2)重置ip_forward为1
    8.3)通过MASQUERADE设定来源于192.168.6.0网段的IP通过192.168.6.217转发出去
    8.4)通过iptables观察转发的数据包

    1. iptables -F
    2. iptables -X
    3. iptables -Z
    4. echo 1 > /proc/sys/net/ipv4/ip_forward
    5. iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o eth1 -j MASQUERADE


    9)定制防火墙的NAT访问策略
    9.1)清除所有NAT策略
    9.2)重置ip_forward为1
    9.3)通过SNAT设定来源于192.168.6.0网段通过eth1转发出去
    9.4)用iptables观察转发的数据包

    1. iptables -F -t nat
    2. iptables -X -t nat
    3. iptables -Z -t nat
    4. echo 1 > /proc/sys/net/ipv4/ip_forward
    5. iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to-source 192.168.6.217
    6. iptables -L -nv


    10)端口转发访问策略
    10.1)清除所有NAT策略
    10.2)重置ip_forward为1
    10.3)通过DNAT设定为所有访问192.168.6.217的22端口,都访问到192.168.6.191的22端口
    10.4)设定所有到192.168.6.191的22端口的数据包都通过FORWARD转发
    10.5)设定回应数据包,即通过NAT的POSTROUTING设定,使通讯正常

    1. iptables -F -t nat
    2. iptables -X -t nat
    3. iptables -Z -t nat
    4. echo 1 >/proc/sys/net/ipv4/ip_forward
    5. iptables -t nat -A PREROUTING -d 192.168.6.217 -p tcp –dport 22 -j DNAT –to-destination 192.168.6.191:22
    6. iptables -A FORWARD -p tcp -d 192.168.6.191 –dport 22 -j ACCEPT
    7. iptables -t nat -I POSTROUTING -p tcp –dport 22 -j MASQUERADE

    iptables学习笔记

    数据包流向顺序

    我们来讨论数据包是以什么顺序、如何穿越不同的链和表的。稍后,在你自己写规则时,就会知 道这个顺序是多么的重要。一些组件是iptables与内核共用的,比如,数据包路由的判断。了解到这一点是 很重要的,尤其在你用iptables改变数据包的路由时。这会帮助你弄明白数据包是如何以及为什么被那样路 由,一个好的例子是DNAT和SNAT,不要忘了TOS的作用。 继续阅读iptables学习笔记

    设置iptables之后不能正常访问ftp解决方法

    设置了iptables的禁止所有的端口,只容许可能访问了策略后大部分情况下会出现ftp不能正常访问的问题,因为ftp有主动和被动连接两种模式,少添加一些策略就会出问题。
    在这里我就相信的说明下解决方法:
    首先加载:
    #modprobe ip_conntrack_ftp

    #modprobe ip_nat_ftp
    然后加载策略
    #iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    #iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    #iptables -I INPUT -p tcp –dport 21 -j ACCEPT
    #iptables -I OUTPUT -p tcp –dport 21 -j ACCEPT

    如果不想每次都加载模块的话请在 /etc/sysconfig/iptables-config
    添加

    FAQ
    保存之后皆可。
    来源:http://mcshell.blog.51cto.com/803455/396125

    适合Web服务器的iptables规则

    1. IPT="/sbin/iptables"
    2. $IPT –delete-chain
    3. $IPT –flush
    4. $IPT -P INPUT DROP    #1
    5. $IPT -P FORWARD DROP  #1
    6. $IPT -P OUTPUT DROP   #1
    7. $IPT -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT #2
    8. $IPT -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT #3
    9. $IPT -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT #3
    10. $IPT -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT  #3
    11. $IPT -A INPUT -p tcp -m tcp –dport 873 -j ACCEPT #3
    12. $IPT -A INPUT -i lo -j ACCEPT #4
    13. $IPT -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT  #5
    14. $IPT -A INPUT -p icmp -m icmp –icmp-type 11 -j ACCEPT #5
    15. $IPT -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT #6
    16. $IPT -A OUTPUT -p udp -m udp –dport 53 -j ACCEPT #7
    17. $IPT -A OUTPUT -o lo -j ACCEPT #4
    18. $IPT -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT #8
    19. $IPT -A OUTPUT -p tcp -m tcp –dport 25 -j ACCEPT #9
    20. $IPT -A OUTPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT  #10
    21. $IPT -A OUTPUT -p icmp -m icmp –icmp-type 11 -j ACCEPT #10
    22. service iptables save
    23. service iptables restart

    存为脚本iptables.sh,执行sh iptables.sh自动配置防火墙。
    解释:
    #1、设置INPUT,FORWARD,OUTPUT链默认target为DROP,也就是外部与服务器不能通信。
    #2、设置当连接状态为RELATED和ESTABLISHED时,允许数据进入服务器。
    #3、设置外部客户端连接服务器端口80,22,21,873。
    #4、允许内部数据循回。
    #5、允许外部ping服务器 。
    #6、设置状态为RELATED和ESTABLISHED的数据可以从服务器发送到外部。
    #7、允许服务器使用外部dns解析域名。
    #8、设置服务器连接外部服务器端口80。
    #9、允许服务器发送邮件。
    #10、允许从服务器ping外部。