当前位置:操作系统 > Unix/Linux >>

菜鸟redhat9调试笔记之四(linux下的防火墙)

6月18日,最近忙于研究LFS和Gentoo,所以好久没写调试笔记,大家一定等者我的下一篇吧!

  今天给大家将iptables,即linux下的防火墙

  1. 安装我不讲了,RH9的rpm安装方式非常简单,大家只要在rh的安装源盘找到相应的rpm包就行。

  然后 rpm -Uvh iptables-?.i386.rpm

  2. 我们今天调试的环境是一台双网卡的服务器,通过DDN固定ip地址上网,两块网卡分别是

  eth0: 211.101.251.4 外部ip地址,直接上网

  eth1: 192.168.0.1 内部网卡地址,连接192.168.0.0/255.255.255.0网断局域网

  3.客户端A是台WWW,地址是192.168.0.2。我们将利用后面的DNAT功能,让外面的机器能访问这台机器的www服务。其他客户端都在192.168.0.0/24网段,且网关都指向192.168.0.1

  4. 如果大家要使用iptables的NAT功能,之前我们要确保系统内核配置的是正确的,我的iptables好几次就因为内核编译错误,造成客户端不能正常使用SNAT功能,甚至不能加载ip_tables模块。这是一般的内核配置,基本上iptables的NAT功能能正常使用,内核版本不同可能显示不一样,大家灵活掌握就行,应该不会出现麻烦。

  Networking options --->

  [*] Network packet filtering (replaces ipchains)

  [*] TCP/IP networking

  IP: Netfilter Configuration --->

  <M> Connection tracking (required for masq/NAT) (NEW)

  <M> FTP protocol support (NEW)

  <M> IP tables support (required for filtering/masq/NAT) (NEW)

  <M> limit match support (NEW)

  <M> MAC address match support (NEW)

  <M> netfilter MARK match support (NEW)

  <M> Multiple port match support (NEW)

  <M> TOS match support (NEW)

  <M> tcpmss match support (NEW)

  <M> Connection state match support (NEW)

  <M> Packet filtering (NEW)

  <M> REJECT target support (NEW)

  <M> Full NAT (NEW)

  <M> MASQUERADE target support (NEW)

  <M> REDIRECT target support (NEW)

  <M> Packet mangling (NEW)

  <M> TOS target support (NEW)

  <M> MARK target support (NEW)

  <M> LOG target support (NEW)

  <M> TCPMSS target support (NEW)

  <M> ipchains (2.2-style) support (NEW)

  < > ipfwadm (2.0-style) support (NEW)

  5. 我们要打开ip_forward,

  直接修改/etc/sysctl.conf 这个文档,把net.ipv4.ip_forward= 1 并把前面的#去掉,或者

  echo "1" > /proc/sys/net/ipv4/ip_forward ,但是下次重起还是变0,所以还是直接修改文档的好。

  6. 我们在使用iptables之前,先要了解iptables的参数:

  ACCEPT

  接受这个封包,也就是可以通过规则检验而放行、顺利通过这个链。

  DROP

  丢弃这个封包,也就不能通过规则检验而被挡掉。

  REJECT

  与 DROP 一样,但会向来源地送出 ICMP 封包,告之对方‘ port unreachable ’的错误信息。

  REDIRECT

  将封包重导至 本机端 的其它 port 。

  SNAT / DNAT / MASQUERADE

  这些都是 NAT 的处理,视要求而修改为特定的 Source Socket 或 Destination Socket 、或动态的根据路由判断後的界面而修改 Source Socket 。

  建立一个新的(自定)链 ( -N 。

  删除一个空的(自定)链 ( -X 。

  改变一个内建链的原则 ( -P 。

  列出一个链中的规则 ( -L 。

  清除一个(内建)链中的所有规则 ( -F 。

  在一个链的最後面新增( append 一条规则 ( -A 。

  在链内某个位置插入( insert 一条新规则( -I 。

  在链内某个位置替换( replace 一条规则 ( -R 。

  在链内某个位置删除( delete 一条规则 ( -D 。

  删除(delete) 链内第一条符合的规则 (-D)。

  在 iptables 中,要指定规则是欲作用在那一个规则表上(使用 -t 来指定,如 -t nat),若不指定,则预设是作用在 filter 这个表。

  封包于防火墙中的流向 ( INPUT、OUTPUT、FORWARD

  相关界面 ( -i 或 -o

  所属协定 ( -p

  连线类型 ( -m state

  封包类型 ( --syn

  来源地 ( -s

  来源端口 ( --sport

  目的地 ( -d

  目的地端口 ( --dport

  好了,开始工作!

  首先查看一下机器上的有关于iptables的设定情况

  作法如下:

  iptables -L -n 或者 iptablse -t nat -L -n

  定义参数

  $DDN_IP="211.101.251.4"

  如果你以前调试过iptables那么我们先清除先前的设定

  iptables -F 清除预设表 filter 中,所有规则链中的规则

  iptables -X 清除预设表 filter 中,使用者自订链中的规则

  iptables -F -t mangle 清除mangle表中,所有规则链中的规则

  以此类推:

  iptables -t mangle -X 清除mangle表中,使用者自订链中的规则

  iptables -F -t nat 清除nat表中,所有规则链中的规则

  iptables -t nat -X 清除nat表中,使用者自订链中的规则

  首先我们来设置 filter table 的预设策略

  iptables -P INPUT ACCEPT

  iptables -P OUTPUT ACCEPT

  iptables -P FORWARD ACCEPT

  当然我们也可以使用DROP,但一般我们不会这么做

  接下来配置nat tables表

  &&一个典型的例子IP 伪装(SNAT应用),即局域网网所有的机器都通过eth0做的透明网关出去,不做其他限制,

  iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

  假如你的上网方式是adsl拨号上网,adsl接口是ppp0,那么也可以这么设置

  iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE

  好了,现在我们要把这些命令保存为策略文件,好让iptables认出

  /etc/rc.d/init.d/iptables save 系统会根据你刚才输入的命令保存为一个策略配置文件/etc/sysconfig/iptables

  然后我们运行/etc/rc.d/init.d/iptables start 启动iptables,并加载配置文件

  好了现在你的局域网客户端都可以通过这台服务器上网,ftp,qq,www都没有限制,因为我们现在设置的是透明的防火墙。我们总结一下刚才的命令是:

  源码:--------------------------------------------------------------------------------

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

  iptables -F

  iptables -X

  iptables -t nat -F

  iptables -t nat -X

  iptables -P INPUT ACCEPT

  iptables -P OUTPUT ACCEPT

  iptables -P FORWARD ACCEPT

  iptables -t nat -P PREROUTING ACCEPT

  iptables -t nat -P OUTPUT ACCEPT

  iptables -t nat -P POSTROUTING ACCEPT

  iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

  /etc/rc.d/init.d/iptables save

  /etc/rc.d/init.d/iptables start

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

  &&另外一个典型的例子是DNAT,利用转址、转 port 的方式,使外网的封包,可以到达内网中的服务器主机,俗称虚拟主机。这种方式可保护服务器主机大部份的 port 不被外界存取,只开放公开服务的通道(如 Web Server port 80),因此安全性较高。

  比如: 凡对 211.101.251.4:80 连线者, 则转址至 192.168.0.2:80

  iptables -t nat -A PREROUTING -i eth0 -p tcp -d 211.101.251.4 --dprot 80 -j DNAT --to-distination 192.168.0.2:80

  同样DNAT还可以利用在DMZ区域的mail,FTP等服务,大家就安需自己写吧!

  以上讲的策略对大多数朋友来说已经绰绰有余了,但有些公司的老板可不是这么想,老板们往往希望员工好好工作,除了能上网收信以外,其他的诸如 FTP,QQ一律静止,这样的话iptables的设置就比较大,我们不能简单的MASQUERADE。比如我们现在只开放53(dns)80,25, 110三个端口用来平时的www和mail服务,那么我们就可以这样设置

  源码:--------------------------------------------------------------------------------

  ptables -F

  iptables -X

  iptables -t nat -F

  iptables -t nat -X

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,