免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 120799 | 回复: 95
打印 上一主题 下一主题

[网络管理] Linux iptables firewall 設定常見 FAQ 整理 (最近更新時間:11/20/2006) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-16 15:49 |只看该作者 |倒序浏览
=========================================
=========================================

常见 iptables 的 firewall 设定配置问题:

        作者: 小州 (kenduest)

        最近更新时间: 11/20/2006 15:50

=========================================
=========================================

标题列表项目:  (一般本机的 firewall 配置问题)

1. 如何查询我目前 iptables 的配置组态设定 ?
2. 如何关闭 Linux Distro 本身的 firewall 配置并让规则清空不启用?
3. 关于 RedHat 9, Fedora 与 RHEL 的 firewall 配置问题
4. 如何使用手动方式清空与重置 iptables firewall rule?
5. iptables firewall 本身封包比对判断流程图为何?
6. iptables firewall 本身封包比对规则方式为何?
7. 使用 -P INPUT DROP 引起的主機本身對外連線不通问题?
8. 使用 -P INPUT DROP 导致本机存取自己服务也受到限制?
9. 使用 -P INPUT DROP 引起的网路存取正常,但是 ftp 连入却失败?
10. 使用 -P OUTPUT DROP 引起的网路不通问题?
11. 有无建议本机 firewall 服务只有开放对外项目,其余禁止的配置方式?

标题列表项目:  (提供 NAT 服务配置问题)

1. 一般建议单纯化的 NAT 服务配置语法为何?
2. 透过 NAT 上网的内部 ip 主机,ftp 连结存取错误?
3. 如何配置连线到 NAT 主机某个对外 Port 时,可以转送到内部某主机?
4. 使用 -j MASQUERADE 与 -j SNAT 于 NAT 使用差异 ?

=========================================


一般本机的 firewall 配置问题

=====

1. 如何查询我目前 iptables 的配置组态设定 ?


   iptables 本身提供了 iptables-save 这个程式档案,执行后可以检视目前的配置。

  1. iptables-save
复制代码


   若是使用 iptables 该主要的程式的话,可以搭配 -L 选项列出规则清单。不过由于 iptables 过滤本身是可以针对不同 table 来处理,传入 -t 可以查阅指定的 table,不指定时预设表示使用 filter table 项目。一般使用方式:


  1. iptables -L
  2. iptables -t nat -L
复制代码


   不过 iptables 对于规则内有 ip 位址项目时会进行反查解析出主机名称,这个也常导致反查时需要时间导致列出规则时卡住无法运作下去,所以实际上一般会搭配传入 -n 选项,表示不显示反查后主机名称结果。


  1. iptables -L -n
  2. iptables -t nat -L -n
复制代码


当然,若是要查阅更详细的资讯,可以再搭配 -v 选项。
   

  1. iptables -L -n -v
  2. iptables -t nat -L -n -v
复制代码


=====


2. 如何关闭 Linux Distro 本身的 firewall 配置并让规则清空不启用?


各家发行版本都会提供各自的 firewall script 于开机时自动带入设定规则,所以并没有一个统一的做法。

--

在 RHEL 与 Fedora Linux 内的开机 script 本身为 /etc/init.d/iptables,所以关闭方式手动可以执行:


  1. /etc/init.d/iptables stop
复制代码


  设定每次开启不启动该服务项目,可以使用 chkconfig 来关闭。

  1. chkconfig iptables off
复制代码


  --
  若是 SLES 的话,修改 /etc/sysconfig/network/config 配置,里面可以找到:


  1.         # With this variable you can determine if the SuSEfirewall when enabled
  2.         # should get started when network interfaces are starte
  3.         FIREWALL="yes|no"
复制代码

  这可以设定每次启动网路时是否启用 firewall 配置。


=====


3. 关于 RedHat 9, Fedora 与 RHEL 的 firewall 配置问题

系统本身提供配置 firewall 方式,文字模式是可以执行 setup 程式,   于 Firewall 项目进入后就可以选择新增相关规则。最后所开放允许的组态都是储存于 /etc/sysconfig/iptables 档案内。

使用 /etc/init.d/iptables start 或者是 service iptables start 时,就会依据 /etc/sysconfig/iptables 设定的配置启用 firewall 设定。

于 /etc/sysconfig/iptables 的格式结果,可以使用 iptables-restore 程式由标准输入读入后进行启用。简单说所谓开启该服务,其实也就是:

  1. iptables-restore < /etc/sysconfig/iptables
复制代码


执行 /etc/init.d/iptables save 可以把目前系统正在运作执行配置的规则储存至 /etc/sysconfig/iptables 档案内,这底层其实也是呼叫   iptables-save 程式来达成该结果。简单说也就是:

  1. iptables-save > /etc/sysconfig/iptables
复制代码


关于 /etc/sysconfig/iptables 本身只有包含给 firewall rule 的规则叙述,本身并没有包含任何 iptables 相关 kernel module 载入配置,  若是需要载入额外的 module 的话可以修改 /etc/sysconfig/iptables-config。

/etc/sysconfig/iptables-config 本身或于 /etc/ini.d/iptables 该脚本档案时读入使用。依据该内容来看,提供相关变数定义可以指定载入必要的module 项目:


  1.         # Load additional iptables modules (nat helpers)
  2.         #   Default: -none-
  3.         # Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'),
  4.         # which are loaded after the firewall rules are applied. Options for
  5.         # the helpers are stored in /etc/modprobe.conf.
  6.         IPTABLES_MODULES=""
复制代码

=====

4. 如何使用手动方式清空与重置 iptables firewall rule?


若是纯手动的方始清空所有规则设定,一般可以采用下列方式:


  1.         iptables -F        # 若是没有加上 -t 指定 table,预设是使用 -t filter
  2.         iptables -X

  3.         iptables -F -t nat
  4.         iptables -X -t nat

  5.         iptables -F -t mangle
  6.         iptables -X -t mangle
复制代码


  其中 -F 表示清除指定 table 内所有 chain 项目内的规则清单设定。 -X 则是表示删除使用者自订的 chain 项目。

  除了清除外,建议需要把过滤预设的政策设定为 ACCEPT,也就是允许任何封包的传输不会被阻挡。


  1.         iptables -P INPUT ACCEPT # 没加上 -t 指定 table,预设使用 -t filter
  2.         iptables -P OUTPUT ACCEPT
  3.         iptables -P FORWARD ACCEPT

  4.         iptables -t nat -P OUTPUT ACCEPT
  5.         iptables -t nat -P PREROUTING ACCEPT
  6.         iptables -t nat -P POSTROUTING ACCEPT

  7.         iptables -t mangle -P PREROUTING ACCEPT
  8.         iptables -t mangle -P POSTROUTING ACCEPT
  9.         iptables -t mangle -P INPUT ACCEPT
  10.         iptables -t mangle -P OUTPUT ACCEPT
  11.         iptables -t mangle -P FORWARD ACCEPT
复制代码


同时,后续若是手动打造 iptables firewall rule 的时候,该技巧也应该用上,也就是先清除之前规则外,包含把预设的政策都改成 ACCEPT,这样配置 firewall 规则才不会混乱不堪。


=====


5. iptables firewall 本身封包比对判断流程图为何?

详细部份可以参阅这张表格:

  1. http://ebtables.sourceforge.net/br_fw_ia/bridge3b.png
复制代码



=====


6. iptables firewall 本身封包比对规则方式为何?


这个要区分成为几点来说明:

1) 一般说法就是,first match,也就是符合规则叙述后就不再往下走

      比方配置:


  1. iptables -P INPUT ACCEPT
  2. iptables -A INPUT -s 192.168.1.1 -j ACCEPT
  3. iptables -A INPUT -s 192.168.1.0/24 -j DROP
复制代码


      这就是 192.168.1.0/24 中,只有允许 192.168.1.1 可以存取,其余192.168.1.0/24 该网段 ip 都禁止存取。

      常见设定观念错误如下:


  1. iptables -P INPUT ACCEPT
  2. iptables -A INPUT -j ACCEPT
  3. iptables -A INPUT -s 192.168.1.0/24 -j DROP
复制代码


为何 1921.68.1.0/24 还是可以存取不被禁止?这就是比对的符合就不会继续往下走。

不过这边到是要先注明的是,-j LOG 与 -j MARK 这类规则倒是会继续往下比对,这个与 -j ACCEPT 与 -j DROP 就不相同情况。

2) 当比对规则都跑完了都没有任何符合的叙述时,最后结果要看预设政策设定


  1. iptables -P INPUT ACCEPT
  2. iptables -A INPUT -s 192.168.1.0/24 -j DROP
  3. ......
复制代码


上面规则来说,表示预设封包都允许连入存取的,只有禁止 192.168.1.0/24,也就是说比对流程规则跑完后都没有任何符合叙述,最后就是允许存取。


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
  3. ......
复制代码


上面规则来说,表示预设封包都禁止连入存取的,只有允许 192.168.1.0/24,也就是说比对流程规则跑完后都没有任何符合叙述,最后就是允许禁止。

把预设的政策调整为 DROP 基本上需要注意非常多流程,下面部份会谈到这部份要注意事项。一般来说建议除非很清楚把预设存取设定为 DROP 带来的结果,要不然请勿贸然配置使用。因為這樣設定的話,雖然是說只有開放 192.168.1.0/24 可以連入存取,但是卻會導致這台服務主機只可以連線到 192.168.1.0/24 網段的主機,其他的目的都被禁止了。


=====


7. 使用 -P INPUT DROP 引起的主機本身對外連線不通问题?

为了更严厉的防火墙存取限制,一般初学者会这样配配置:


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
复制代码


也就是主机只有打算开放 ssh 服务对外提供存取。

这样乍看之下好像非常正确,但是设定好后外面是可以連到該 port 22 服務,但是卻導致了一個後續的問題,也就是 "該主機若是要主動對外要建立連線卻被禁止"。比方這台服務主機無法使用 ssh 登入到遠端主機,也無法用瀏覽器看其他主機 port 80 的 http 服務的。

引起該問題的原因呢? TCP/IP 本身是双向的,也就是有出必有进,有进必有出。这个规则没考虑到这点问题。

当主机对外要建立连线时,对方势必也要回应封包到原主机,所以回应的封包是要被允许的。不过该配置来看却没考虑到这点问题,所以导致回应的封包被丢弃,所以连线根本建立失败。

所以設定 -P INPUT DROP 時,一般正确方式应该考虑加上允许主機本身對外連線時對方回应封包项目,也就是:


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
  3. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
复制代码


-m state --state ESTABLISHED 扮演很重要角色,那就是允许连线出去后对方主机回应进来的封包。


=====


8. 使用 -P INPUT DROP 导致本机存取自己服务也受到限制?


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
  3. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
复制代码


不过上面规则通常应该考虑的是,主机本身对外只有提供可以连结存取port 22 该 ssh 服务,但是若是自己主机有开 port 80 与 port 25 等  服务项目的话,这样配置却也导致自己存取自己的主机服务也被限制住了。

基于该问题,一般会建议加上由 loopback interface 该介面不受到该 firewall 组态限制而被阻挡,一般会建议改成:


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -i lo -j ACCEPT
  3. iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
  4. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
复制代码



=====


9. 使用 -P INPUT DROP 引起的网路存取正常,但是 ftp 连入却失败?

依据前面介绍方式,只有开放 ftp port 21 服务,其他都禁止的话,一般会配置使用:


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
  3. iptables -A INPUT -p tcp --dport 21 -j ACCEPT
复制代码


这样的配置,确认 ftp 用户端是可以连到 ftp 主机并且看到欢迎登入画面,不过后续要浏览档案目录清单与档案抓取时却会发生错误...

ftp 协定本身于 data channnel 还可以区分使用 active mode 与 passive mode 这两种传输模式,而就以 passive mode 来说,最后是协议让 ftp client 连结到 ftp server 本身指定于大于 1024 port 的连接埠传输资料。
  
这样配置在 ftp 传输使用 active 可能正常,但是使用 passive mode 却发生错误,其中原因就是因为该主机firewall 规则配置不允许让 ftp client 连结到 ftp server 指定的连结埠才引发这个问题。

要解决该问题方式,于 iptables 内个名称为 ip_conntrack_ftp 的 helper,可以针对连入与连外目的 port 为 21 的 ftp 协定命令沟通进行拦截,提供给 iptables 设定 firwewall 规则的配置使用。开放做法为:

  1.        
  2. modprobe ip_conntrack_ftp

  3. iptables -P INPUT DROP
  4. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  5. iptables -A INPUT -i lo -j ACCEPT
  6. iptables -A INPUT -p tcp --dport 21 -j ACCEPT
复制代码


其中 -m state 部分另外多了 RELATED 的项目,该项目也就是状态为主动建立的封包,不过是因为与现有 ftp 这类连线架构会引发另外才产生的主动建立的项目。

不过若是主机 ftp 服务不在 port 21 的话,请使用下列方式进行调整:


  1. modprobe ip_conntrack_ftp ports=21,30000

  2. iptables -P INPUT DROP
  3. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  4. iptables -A INPUT -i lo -j ACCEPT
  5. iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  6. iptables -A INPUT -p tcp --dport 30000 -j ACCEPT
复制代码


也就是主机本身提供 ftp 服务分别在 port 21 与 30000 上,让 ip_conntrack_ftp  这个 ftp helper 能够正常提供 ftp 用户端使用 passive mode 存取而不会产生问题。


=====


10. 使用 -P OUTPUT DROP 引起的网路不通问题?

来看看这样配置片段叙述:


  1. iptables -P INPUT ACCEPT
  2. iptables -P OUTPUT DROP
复制代码


这样配置来看,感觉上就是主机对外完全开放没有任何限制连入,但是该主机对外本身限制预设不可以连外,但是结果却是不管外面也根本连不进来。

该问题 如同上面提到使用 -P INPUT DROP 的配置问题一样,这样也是根本没有考虑到 TCP/IP 本身是双向沟通的问题。

考虑连入封包后续主机要回应的项目,也是需要搭配传入 -m state 来提供允许回应封包的项目,所以整个来看片段叙述为:


  1. iptables -P OUTPUT DROP
  2. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  3. iptables -A OUTPUT -o lo -j ACCEPT
复制代码


这样设定好结果,就是该主机本身可以对自己主机服务连结存取,但是对外连结存取都会被禁止。

不过拉回来看,有必要配置 -P OUTPUT DROP 吗?老实说个人倒是感觉通常都是多此一举,因为实际应用部份通常不会限制自己主机对外连线的功能。

不过若是坚持要设定 -P OUTPUT DROP 的话,要考虑后续主动连外部份的开放描述可能可多了.... 比方这样配置项目:


  1. iptables -P OUTPUT DROP
  2. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  3. iptables -A OUTPUT -o lo -j ACCEPT
  4. iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
  5. iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
  6. iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
复制代码


这样是不是有点找自己麻烦?

所以结论就是除非定真的是不想让自己主机有主动连外的需求,那才考虑把 OUTPUT chain 的预设政策设定为 DROP,否则不要使用这种配置。


=====


11. 有无建议本机 firewall 服务只有开放对外项目,其余禁止的配置方式?


   依据前面谈到流程,若是预设 INPUT 的存取是禁止的话,提供如下配置参考:


  1. modprobe ip_conntrack_ftp

  2. iptables -P INPUT DROP
  3. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  4. iptables -A INPUT -i lo -j ACCEPT
  5. iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  6. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
复制代码


若是预设 INPUT 的存取是允许的话,提供如下配置参考:


  1. modprobe ip_conntrack_ftp

  2. iptables -P INPUT ACCEPT
  3. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  4. iptables -A INPUT -i lo -j ACCEPT
  5. iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  6. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  7. iptables -A INPUT -m state --state NEW,INVALID -j DROP
复制代码


若是需要允许主机可以接受 ping 程式测试这台机器是否可以存取的话,可以搭配使用:

  1. iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
复制代码


当然请注意,搭配先使用 -F 与 -X 先把预先存在的 rule 清空后,避免
rule 混杂在一起而互相影响。

=====


提供 NAT 服务配置问题


=====


1. 一般建议单纯化的 NAT 服务配置语法为何?


这边是假设对外的介面为 eth0,对内介面为 eth1,该对内网段的 ip 范围是 192.168.1.0/24。

若是预设的 FORWARD chain 本身为 ACCEPT 的话,配置语法使用为:

  1. iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth0 -j MASQUERADE

  2. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码


若是预设的 FORWARD chain 本身为 DROP 的话,配置语法使用为:

  1. iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth0 -j MASQUERADE
  2. iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  3. iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

  4. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码


当然,请不要忘记前面谈到的议题,也就是搭配先使用好 -F 与 -X 这类项目。还有预设 FORWARD chain 为 DROP 的话,考虑是否也开放允许 echo-request 这类 icmp 协定封包能够允许由内部网段传送出去。

=====


2. 透过 NAT 上网的内部 ip 主机,ftp 连结存取错误?

该问题点与前面谈到 ftp 问题与搭配使用 -m state --state RELATED 配置有关系。由于目前要的是 NAT 下 ftp 连线的追踪功能,所以需要搭配挂入ip_nat_ftp 该 module 才可以正确提供追踪机制。

所以经过该修改配置,于预设的 FORWARD chain 本身为 ACCEPT 的话,配置语法使用为:


  1. modprobe ip_nat_ftp

  2. iptables -A POSTROUTING -t nat -o eth0 -s 192.168.1.0/24 -j MASQUERADE
  3. iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

  4. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码


搭配 ip_nat_ftp module 后,如此于 FORWARD chain 内使用的 RELATED 参数才会有效用。

=====


3. 如何配置连线到 NAT 主机某个对外 Port 时,可以转送到内部某主机?


一般语法配置为:


  1. iptables -A PREROUTING -t nat -d 210.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80
复制代码


这边是假设该 NAT 主机本身对外的 ip 为 210.1.1.1,设定外面连结存取到该 ip 的 port 80 时,将封包转送到 192.168.1.1 的 port 80 上。

不过该配置常谈到的问题就是,也许有人在 192.168.1.0/24 该内部网段连结 210.1.1.1 的 port 80 时,却无法浏览实际 192.168.1.1:80 该服务项目。

该问题牵涉到 icmp 重导的问题,而且目前 netfilter iptables 发展已经不会有该问题。若是还有问题的话,可以考虑如下配置:

  1. iptables -t nat -A POSTROUTING -d 192.168.1.1 -p tcp --dport 80 -s 192.168.1.0/24 -j SNAT --to 192.168.1.254
复制代码


其中 192.168.1.254 也就是 NAT 主机对内的 ip,这样可以让该内部的192.168.1.1 看到的存取来源为 192.168.1.254,如此可以解决该问题。

=====


4. 使用 -j MASQUERADE 与 -j SNAT 于 NAT 使用差异 ?

   这边是假设该 NAT 主机本身对外的介面为 eth0,奇 ip 为 210.1.1.1;对内介面为 eth1,该对内网段的 ip 范围是 192.168.1.0/24。

一般选择提供 NAT 服务,让内部 privae ip 可以存取连上 internet 的配置方式有:

  1. iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -j MASQUERADE

  2. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码


另外一种使用方式:

  1. iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -j SNAT --to 210.1.1.1

  2. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码


基本上最后的结果都是可以达成需求的,不过一般差别为:

   1) 使用 -j SNAT 一般会比 -j MASQUERADE 效率来的好,因为这牵涉到封包传送通过相关介面时的相关比对问题

   2) 若是对外本身 ip 不是固定的,也就是拨接取得这类会非固定的环境之下,采用 -j MASQUERADE 会比较方便使用

=====

[ 本帖最后由 platinum 于 2007-2-1 06:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-16 16:12 |只看该作者
好文~

有一些是很基本的问题,但也是问得最多的问题

谢谢热心的kenduest兄.
618816 该用户已被删除
3 [报告]
发表于 2006-08-16 20:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2006-08-17 17:17 |只看该作者
7. 使用 -P INPUT DROP 引起的网路不通问题?

对这一部分有点疑义,好像不需要
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
这句,就可以打开SSH,用red hat 9 试验了一下,应该是可以。不知道lz怎么做的实验。呵呵
就用了你说不可以的两句
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
就连通了,前面用iptables -X清掉所有的规则。

论坛徽章:
0
5 [报告]
发表于 2006-08-17 17:26 |只看该作者
按照iptables的结构而言,外出的包是不会经过INPUT规则表的,应该是OUTPUT和POSTROUTING生效。所以在INPUT里面设置这个应该意义不大。
如果是OUTPUT设置了DROP,到是应该在里面加上这句话。

呵呵

论坛徽章:
0
6 [报告]
发表于 2006-08-17 18:16 |只看该作者
原帖由 hjzhang 于 2006-8-17 17:17 发表
对这一部分有点疑义,好像不需要
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
这句,就可以打开SSH,用red hat 9 试验了一下,应该是可以。不知道lz怎么做的实验。呵呵
就用了你说不可以的两句
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
就连通了,前面用iptables -X清掉所有的规则。


這是有問題的描述方式。

1. 這個討論板多少篇文章就是只關於 -P INPUT DROP 配置,但是不了解雙向溝通的特性所產生問題


  1. iptables -P INPUT DROP
  2. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
复制代码


這個是開放允許連 port 22 ? 對,外面是可以連進來,這是沒問題的。但是請注意這表示:

這台主機根本就無法主動對外連線

包含自己連線到自己的主機也是

2. iptables -X 是刪除使用者自訂的 chain,不是清除所有的規則,和 -F 這兩者意思差異很大。。

原帖由 hjzhang 于 2006-8-17 17:26 发表
按照iptables的结构而言,外出的包是不会经过INPUT规则表的,应该是OUTPUT和POSTROUTING生效。所以在INPUT里面设置这个应该意义不大。
如果是OUTPUT设置了DROP,到是应该在里面加上这句话。
呵呵


同上,請注意後續服務主機本身對外的問題。

==

[ 本帖最后由 kenduest 于 2006-8-17 18:19 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-08-18 08:25 |只看该作者
原帖由 kenduest 于 2006-8-17 18:16 发表


這是有問題的描述方式。

1. 這個討論板多少篇文章就是只關於 -P INPUT DROP 配置,但是不了解雙向溝通的特性所產生問題

[code]
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCE ...

不好意思,我可能描述的有问题,我肯定是用iptables -F和iptables -x消除掉所有的规则才作这个试验的。
第二个问题,按照你的描述,本机向外连线,即外出的包也要经过INPUT规则的过滤了?我看IPTABLES的结构介绍,外出的包只会经过output和postrouting两个规则。那么这个INPUT是什么时候起效果的?
至于你说的本机到本机的出问题,到是有可能,因为可能进入本机的时候还要由INPUT链进行过滤。
我描述的问题在red hat 9上面是做了试验验证的,用他说不可以的两条命令,确实可以连接到主机并执行命令了。

论坛徽章:
0
8 [报告]
发表于 2006-08-18 08:49 |只看该作者
刚才用debian试验了一下,还是只需要
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
就可以正常的由外面连接到服务器的ssh服务了。
所以我对
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
这句话的意思,我认为文章当中描述的不清楚。而且你看文章当中5这个部分画的拓扑结构,服务器当中的进程发出去的包(除非发往本机)怎么会由INPUT控制呢?
这句话我觉得更多的意思是当已经建立连接以后,由于状态检测判断已经是ESTABLISHED,而不需要进行后面规则的比对。

论坛徽章:
0
9 [报告]
发表于 2006-08-18 08:53 |只看该作者
我用的iptables 是1.2.11(debian)和1.2.7a(red hat 9)
没有用2.6内核的。

论坛徽章:
0
10 [报告]
发表于 2006-08-18 09:08 |只看该作者
對, 外面可以連進來, 請考慮的是你要主動連外面的連線, 甚至包含 FTP 的被動連線模式的問題.

這樣吧.


  1. iptables -F
  2. iptables -X
  3. iptables -P INPUT DROP
  4. iptables -P OUTPUT ACCCEPT
复制代码


這樣只是說外面都無法連到你機器是吧 ? 然後你應該可以連外面是不是 ? 但是實際上你的主機也根本也連不到外面不是呼 ? 這才需要 -m ESTABLISHED 幫忙不是嗎 ?

==
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP