使用debian配置网关服务器(自己)

首先要求电脑有两块网卡,一个连接到外网,一个连接到switch,而switch与内网其他电脑相连。

安装linux操作系统,这里选择了debian stable版本(目前是sarge版)只需要安装基本部分,不需要安装x(比如xorg)和wm(比如fvwm)以及desktop environment(比如gnome,kde)

选择eth0作为主网卡(若eth0不能连接,则对调两个网线,或着把eth1作为对外网卡)

修改ip,不用

iface eth0 inet dhcp

并增加eth1的设置

vi /etc/network/interfaces

比如我这里是

auto eth0
iface eth0 inet static
        address 202.38.68.148
        netmask 255.255.255.128
        network 202.38.68.0
        broadcast 202.38.68.255
        gateway 202.38.68.254
        dns-nameservers 202.38.64.1
auto eth1
iface eth1 inet static
        address 192.168.2.1
        netmask 255.255.255.0
        network 192.168.2.0
        broadcast 192.168.2.255

aptitude安装resolvconf使得dns-nameservers有效。

aptitude安装emacs,vim做编辑器,安装lftp做ftp客户工具,安装ssh来远程管理。

重启网络

/etc/init.d/network restart

配置iptables,在shell下执行

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source  202.38.68.148

现在内网(设置好192.168.2.*等)就能够上网了(ipv4)。当然这样做比较麻烦,请看下面的dhcp自动分配ip服务的设置。

配置dhcp服务

如果子网内电脑很多,一个一个手动分配ip就给管理员带来很大的麻烦的,dhcp服务可以给内网的电脑自动分配ip,可以大大减轻管理员的工作。

aptitude安装dhcp这里的dhcp是版本2,当然也可以选择版本3,版本3叫做dhcp3-server不过dhcp3软件包使用/etc/dhcp3/dhcpd.conf作为其配置文件,而不像dhcp2使用/etc/dhcpd.conf

写配置文件/etc/dhcpd.conf

subnet 192.168.2.0 netmask 255.255.255.0 {
  option routers 192.168.2.1;
  option subnet-mask 255.255.255.0;

  option domain-name "domain.org";
  option domain-name-servers 202.38.64.1;
  option broadcast-address 192.168.2.255;

  option time-offset -18000;
  range 192.168.2.11 192.168.2.250;
  default-lease-time 216000;
  max-lease-time 432000;
}

设置提供dhcp的网卡修改/etc/default/dhcp

INTERFACES="eth1"

重新启动dhcp服务

/etc/init.d/dhcp restart



我自己的配置如下:

首先要内核支持iptables

配置内核可以参考网址:

http://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#KERNELSETUP

内核配置

为了运行iptables,需要在内核配置期间,选择以下一些选项,不管你用make config或其他命令。

CONFIG_PACKET - 允许程序直接访问网络设备(译者注:最常用的就是网卡了),象tcpdump 和 snort就要使用这个功能。

Note

严格地说,iptables并不需要CONFIG_PACKET,但是它有很多用处(译者注:其他程序需要),所以就选上了。当然,你不想要,不选就是了。(译者注:建议还是选的为好)

CONFIG_NETFILTER - 允许计算机作为网关或防火墙。这个是必需的,因为整篇文章都要用到这个功能。我想你也需要这个,谁叫你学iptables呢:)

当然,你要给网络设备安装正确的驱动程序,比如,Ethernet 网卡, PPP 还有 SLIP 。 上面的选项,只是在内核中建立了一个框架,iptables确实已经可以运行,但不能做任何实质性的工作。我们需要更多的选项。以下给出内核2.4.9的选项和简单的说明:

CONFIG_IP_NF_CONNTRACK - 连接跟踪模块,用于 NAT(网络地址转换)Masquerading(ip地址伪装),当然,还有其他应用。如果你想把LAN中的一台机子作为防火墙,这个模块你算选对了。脚本rc.firewall.txt 要想正常工作,就必需有它的存在。

CONFIG_IP_NF_FTP - 这个选项提供针对FTP连接进行连接跟踪的功能。一般情况下,对FTP连接进行连接跟踪是很困难的,要做到这一点,需要一个名为helper的动态链接库。此选项就是用来编译helper的。如果没有这个功能,就无法穿越防火墙或网关使用FTP。

CONFIG_IP_NF_IPTABLES - 有了它,你才能使用过滤、伪装、NAT。它为内核加入了iptables标识框架。没有它,iptables毫无作用。

CONFIG_IP_NF_MATCH_LIMIT - 此模块并不是十分必要,但我在例子rc.firewall.txt中用到了。它提供匹配LIMIT的功能,以便于使用一个适当的规则来控制每分钟要匹配的数据包的数量。比如,-m limit --limit 3/minute 的作用是每分钟最多匹配三个数据包。这个功能也可用来消除某种DoS攻击。

CONFIG_IP_NF_MATCH_MAC - 选择这个模块,可以根据MAC地址匹配数据包。例如,我们想要阻塞使用了某些MAC地址的数据包,或阻塞某些计算机的通信,用这个很容易。因为每个Ethernet网卡都有它自己的MAC地址,且几乎从不会改变。但我在rc.firewall.txt中没有用到这个功能,其他例子也未用到。(译者注:这又一次说明了学习是为将来打基础:) )

CONFIG_IP_NF_MATCH_MARK - 这个选项用来标记数据包。对数据包做MARK(标记)操作,我们就可以在后面的表中用这个标记来匹配数据包。后文有详细的说明。

CONFIG_IP_NF_MATCH_MULTIPORT - 选择这个模块我们可以使用端口范围来匹配数据包,没有它,是无法做到这一点的。

CONFIG_IP_NF_MATCH_TOS - 使我们可以设置数据包的TOS(Type Of Service 服务类型)。这个工作也可以用命令ip/tc完成,还可在mangle表中用某种规则设定。

CONFIG_IP_NF_MATCH_TCPMSS - 可以基于MSS匹配TCP数据包。

CONFIG_IP_NF_MATCH_STATE - 相比较ipchains这是最大的更新,有了它,我们可以对数据包做状态匹配。比如,在某个TCP连接的两个方向上已有通信,则这个连接上的数据包就被看作ESTABLISHED(已建立连接)状态。在rc.firewall.txt 里大量使用了此模块的功能。

CONFIG_IP_NF_MATCH_UNCLEAN - 匹配那些不符合类型标准或无效的P、TCP、UDP、ICMP数据包(译者注:之所以此模块名为UNCLEAN,可以这样理解,凡不是正确模式的包都是脏的。这有些象操作系统内存管理中的“脏页”,那这里就可以称作“脏包”了,自然也就UNCLEAN了)。我们一般丢弃这样的包,但不知这样做是否正确。另外要注意,这种匹配功能还在实验阶段,可能会有些问题。

CONFIG_IP_NF_MATCH_OWNER - 根据套接字的拥有者匹配数据包。比如,我们只允许root访问Internet。在iptables中,这个模块最初只是用一个例子来说明它的功能。同样,这个模块也处于实验阶段,还无法使用。

CONFIG_IP_NF_FILTER - 这个模块为iptables添加基本的过滤表,其中包含INPUT、FORWARD、OUTPUT链。通过过滤表可以做完全的IP过滤。只要想过滤数据包,不管是接收的还是发送的,也不管做何种过滤,都必需此模块。

CONFIG_IP_NF_TARGET_REJECT - 这个操作使我们用ICMP错误信息来回应接收到的数据包,而不是简单地丢弃它。有些情况必须要有回应的,比如,相对于ICMP和UDP来说,要重置或拒绝TCP连接总是需要一个TCP RST包。

CONFIG_IP_NF_TARGET_MIRROR - 这个操作使数据包返回到发送它的计算机。例如,我们在INPUT链里对目的端口为HTTP的包设置了MIRROR操作,当有人访问HTTP时,包就被发送回原计算机,最后,他访问的可能是他自己的主页。(译者注:应该不难理解为什么叫做MIRROR了)

CONFIG_IP_NF_NAT - 顾名思义,本模块提供NAT功能。这个选项使我们有权访问nat表。端口转发和伪装是必需此模块的。当然,如果你的LAN里的所有计算机都有唯一的有效的IP地址,那在做防火墙或伪装时就无须这个选项了。rc.firewall.txt 是需要的:)

CONFIG_IP_NF_TARGET_MASQUERADE - 提供MASQUERADE(伪装)操作。如果我们不知道连接Internet的IP,首选的方法就是使用MASQUERADE,而不是DNAT或SNAT。换句话说,就是如果我们使用PPP或SLIP等连入Internet,由DHCP或其他服务分配IP,使用这个比SNAT好。因为MASQUERADE不需要预先知道连接Internet的IP,虽然对于计算机来说MASQUERADE要比NAT的负载稍微高一点。

CONFIG_IP_NF_TARGET_REDIRECT - 这个操作和代理程序一起使用是很有用的。它不会让数据包直接通过,而是把包重新映射到本地主机,也就是完成透明代理。

CONFIG_IP_NF_TARGET_LOG - 为iptables增加LOG(日志)操作。通过它,可以使用系统日志服务记录某些数据包,这样我们就能了解在包上发生了什么。这对于我们做安全审查、调试脚本的帮助是无价的。

CONFIG_IP_NF_TARGET_TCPMSS - 这个选项可以对付一些阻塞ICMP分段信息的ISP(服务提供商)或服务。没有ICMP分段信息,一些网页、大邮件无法通过,虽然小邮件可以,还有,在握手完成之后,ssh可以但scp不能工作。我们可以用TCPMSS解决这个问题,就是使MSS(Maximum Segment Size)被钳制于PMTU(Path Maximum Transmit Unit)。这个方法可以处理被Netfilter开发者们在内核配置帮助中称作“criminally brain-dead ISPs or servers”的问题。

CONFIG_IP_NF_COMPAT_IPCHAINS - ipchains的,这只是为内核从2.2转换到2.4而使用的,它会在2.6中删除。

CONFIG_IP_NF_COMPAT_IPFWADM - 同上,这只是ipfwadm的暂时使用的兼容模式。

上面,我简要介绍了很多选项,但这只是内核2.4.9中的。要想看看更多的选项,建议你去Netfilter看看patch-o-matic。在那里,有其他的一些选项。POM可能会被加到内核里,当然现在还没有。这有很多原因,比如,还不稳定,Linus Torvalds没打算或没坚持要把这些补丁放入主流的内核,因为它们还在实验。

把以下选项编译进内核或编译成模块,rc.firewall.txt才能使用。

  • CONFIG_PACKET

  • CONFIG_NETFILTER

  • CONFIG_IP_NF_CONNTRACK

  • CONFIG_IP_NF_FTP

  • CONFIG_IP_NF_IRC

  • CONFIG_IP_NF_IPTABLES

  • CONFIG_IP_NF_FILTER

  • CONFIG_IP_NF_NAT

  • CONFIG_IP_NF_MATCH_STATE

  • CONFIG_IP_NF_TARGET_LOG

  • CONFIG_IP_NF_MATCH_LIMIT

  • CONFIG_IP_NF_TARGET_MASQUERADE

以上是为保证 rc.firewall.txt正常工作而需要的最少的选项。其他脚本需要的选项,在相应的章节里都有说明。目前,我们只需注意要学习的这个脚本。


内核配置并编译好之后,剩下的就是修改两个配置文件了。

vim /etc/network/interfaces


# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# Generated by rays-installer.

# The loopback interface
auto lo
iface lo inet loopback

auto eth3
iface eth3 inet static
    address 202.201.13.65
    netmask 255.255.255.0
    network 202.201.13.0
    broadcast 202.201.13.255
    gateway 202.201.13.1
    dns-nameservers 202.201.0.131
#auto eth3
#iface eth3 inet static
#   address 192.168.2.247
#   netmask 255.255.255.0
#   network 192.168.2.0
#   broadcast 192.168.2.255
#   gateway 192.168.2.1
#   dns-nameservers 202.201.0.131

#auto eth2
#iface eth2 inet static
#   address 192.168.3.1
#   netmask 255.255.255.0
#   network 192.168.3.0
#   broadcast 192.168.3.255

auto eth2
iface eth2 inet static
    address 10.0.0.1
    netmask 255.0.0.0
    network 10.0.0.0
    broadcast 10.255.255.255


安装dhcp,即dhcp的版本为2。(可以参考前面的)


vim /etc/dhcpd.conf

subnet 10.0.0.0 netmask 255.0.0.0 {
    option routers 10.0.0.1;
    option subnet-mask 255.0.0.0;


    option domain-name "dslab lzu.edu.cn";
    option domain-name-servers 202.201.0.131, 202.201.0.132;
    option broadcast-address 10.255.255.255;

    option time-offset -18000;
    range 10.0.0.11 10.0.0.250;
    default-lease-time 216000;
    max-lease-time 432000;
}

最后执行

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

iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 202.201.13.65

上面这条命令配置的NAT属于Port Restricted cone Nat型

关于iptables可以参考网址:

http://tldp.org/HOWTO/IP-Masquerade-HOWTO/firewall-examples.html

至此,配置完毕,可以使用了!


你可能感兴趣的:(Linux网络相关)