假设:
eth0与192.168.1.0相连,
eth1与192.168.2.0相连,
eth2与192.168.3.0相连。
备注:
由于这台PC机的网络接口比较多,所以在连接每个段的网络时,注意使用#route命令。
这样可以判断哪个网络接口是对外的。
首先来配置eth0。给这个网络接口分配地址192.168.1.15,运行下列命令:
# ifconfig eth0 192.168.1.15 netmask 255.255.255.0
或#ifconfig eth0 192.168.1.15 broadcast 192.168.1.255 netmask 255.255.255.0
为了使这个地址不再计算机重新启动后消失,编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件
增加一条静态路由:
# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
服务器端核心的两句:
①打开LINUX的路由功能:
#echo 1 >/proc/sys/net/ipv4/ip_forward
②将局域网中所有机器的数据包都通过eth1所做的透明网关送出去,不做任何限制
或者说:IP伪装,使内部网路的封包经过伪装之后,使用对外的 eth1 网卡当作代表号,对外连线(启动内部对外转址)。
#iptables -t nat -A POSTROUTING -o eth1 -s 192.168.2.0/24 -j SNAT
--to 192.168.1.15
# ptables -t nat -A POSTROUTING -o eth1 -s 192.168.2.0/24 -j SNAT
--to 192.168.1.15
③设置防火墙,增加规则
将会阻止来自某一特定IP范围内(92.168.2.0/24)数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动:
#iptables -t filter -A INPUT -s 192.168.2.0/24 -j DROP
若想要取消的话,则删除规则
#iptables -t filter -D INPUT -s 192.168.2.0/24 -j DROP
④缺省的策略(一般不要设,会导致网络不通),最基本的原则是“先拒绝所有的数据包,然后再允许需要的”。下面来为每一个链设置缺省的规则:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
这样会导致客户端不能访问服务器,服务器也不能上网
或者预设全部接受∶
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
⑤如果我们的Linux机器配置有防火墙,为防止防火墙将通过177端口(即xdmcp服务)的数据过虑,我们必须加上如下的规则:
#iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 177 -j ACCEPT
这个命令使iptables增加一条规则到INPUT,用以接受从所有的源(-s 0/0)到所有的目标(-d 0/0)通过端口177的数据包
或者用
#iptables -I INPUT -i eth0 -p udp 192.168.2.155 --dport 177 -j DROP(关闭177端口)
#iptables -I INPUT -i eth0 -p udp 192.168.2.155 --dport 177 -j
ACCEPT(打开177端口)
说明 插入一条规则,原本该位置上的规则将会往后移动一个顺位。
⑥一般被保护的内部网络可分成两部分,一部分是内部通讯区,只允许内部用户访问,绝对禁止外部用户访问,另一部分是停火区DMZ,对外提供有条件的服务。前者是系统的核心子网,后者易受到外部的攻击,是一个比较危险的子网环境。一方面要求严格保护内部子网,另一方面又要满足DMZ对外提供服务的需要,因此,必须采用分别保护的策略,对上述两个区域进行保护。两个区域要尽量独立,即使DMZ受到外部攻击,内部子网仍处于防火墙的保护之下。
⑦防火墙规则
#iptables -A INPUT -i eth1 -s 0.0.0.0/0 -p ICMP -j DROP(将所有从外网进来的ping包都统统丢弃,不允许从外网向内网发ping)
#iptables –A INPUT –i eth1 –s 0.0.0.0/0 –p TCP –port ! 80 –j DROP(将所有由外网发起的非80端口的请求都统统丢弃, 只允许外网访问内网的HTTP服务)
补充说明:
⑴添加广播路由
#route add -host 255.255.255.255 -dev eth1(内网机器连在eth1网卡上)
若要系统启动后自动添加路由,需要修改/etc/rc.local
⑵配置iptables,设置DNAT功能
# iptables –A PREROUTING -t nat -p tcp -s ! 192.168.0.0/24 --dport 4899 -j DNAT --to 192.168.0.2:4899
此功能是将访问LINUX机器TCP协议4899端口(内网除外)的所有连接转到内网的192.168.0.2的4899端口上
⑶filter是最常用的表,在filter表中最常用的三个目标是ACCEPT、DROP和REJECT。DROP会丢弃数据包,不再对其进行任何处理。REJECT会把出错信息传送至发送数据包的主机。
⑷增加规则
将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动:
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP
也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令稍有不同:
# iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP
注意这里的A选项,使用它说明是给现有的链添加规则。
⑸删除规则
网络上的恶意攻击者总是在变化的,因此需要不断改变IP。假设一个网上攻击者转移到新的IP地址,而其老的IP地址被分配给一些清白的用户,那么这时这些用户的数据包将无法通过你的网络。这种情况下,可以使用带-D选项的命令来删除现有的规则:
# iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP
⑹缺省的策略
创建一个具有很好灵活性、可以抵御各种意外事件的规则需要大量的时间。对于那些没有时间这样做的人,最基本的原则是“先拒绝所有的数据包,然后再允许需要的”。下面来为每一个链设置缺省的规则:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。很多时候需要接收外部信息,则可使用以下命令:
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
⑺清除所有的规则
#iptables –F(清除预设表 filter 中,所有规则链中的规则)
#iptables -F -t nat(清除nat表中,所有规则链中的规则)
本文出自 “技术经理” 博客,谢绝转载!