简释iptables防火墙(转)

        简释iptables防火墙(转)
 
一般 LINUX 防火墙( iptalbes )的运用无非是用 nat  表( PREROUTING OUTPUT POSTROUTING )和 filter (FORWARD INPUT OUTPUT) 。我们只有知道了数据的流向才能正确的配置防火墙。现用一个相对比较直观的图形解释数据的走向。
(此处只作最基本的 iptables 数据流走向说明。)
上图是你的家,蓝色的圈是你家院子,有两扇大门①⑥进出,你家有两个房间,分别为 eth0  eth1 房间,每个房间有两个门可以进出②③④⑤。旁边是张三和李四的家,张三家和李四家之间的往返必须要过你家院子。
现假设, eth0 网卡 IP 为: 192.168.5.1 链接内网, eth1 网卡 IP 为: 218.100.100.111 链接互连网。
再假设,“张三家”为一个局域网,“李四家”为互连网。进我家院子用 PREROUTING ,出我家院子用 FORWARD ,进我家门用 INPUT ,出我家门用 OUTPUT 。( 当我们的操作是征对服务器本身而言的话,如 SSH 操作,此时肯定会用到 PREROUTING INPUT OUTPUT ,当数据只是通过服务器去访问别的机器时会用到 PREROUTING FORWARD
又假设,默认这六个门都是关的。生成如下代码。
###########################################################################
*nat
################################
:PREROUTING    DROP  [0:0]
:OUTPUT         DROP  [0:0]
:POSTROUTING   DROP  [0:0]
################################
-F 
-Z
-X
###  以后要新增语句请在此处增加。
-L �Cv
COMMIT
################################################
*filter
##############################
:INPUT          DROP  [0:0]
:FORWARD      DROP  [0:0]
:OUTPUT        DROP  [0:0]
##############################
-F
-Z
-X 
###  以后要新增语句请在此处增加。
-L �Cv 
COMMIT
##########################################################################
1、    局域网用户通过服务器共享上网
( 即从张三家到李四家 )
1) 首先进①号门,再从⑥号门走出。
-A  PREROUTING �Cp tcp --dport 80 �Cj ACCEPT  # 允许 TCP 80 端口通过服务器
-A  FORWARD �Cp tcp --dport 80 �Cj ACCEPT     # 允许 TCP80  端口转发
-A  FORWARD �Cp tcp --sport 80 �Cj ACCEPT     # 允许接收对方为 TCP80 端口反回的信息
2) 其次,由于我们上网打的是域名,为此有一个公网 DNS 服务器为我们服务,那当然也要允许内网机器与 DNS 服务器的数据转发。 DNS UDP 53 或者  TCP 53 端口。两者用其一个就行。
-A  PREROUTING �Cp udp  --dport 53 �Cj ACCEPT   
-A  FORWARD �Cp udp  --dport 53 �Cj ACCEPT      
-A  FORWARD �Cp udp  --sport 53 �Cj ACCEPT      
3 )再次,由于局域网的地址在公网上是不被允许的,所以在出公网前应该把其地址转为服务器地址进行伪装。
-A  POSTROUTING �Cs 192.168.5.0/24 �Cj SNAT �Cto  218.100.100.111
2、    允许局域网和公网可以访问服务器的 SSH
假设 SSH 采用默认端口 TCP 22  。此要求相当于要进我的家的 TCP 22 号门,为此我们首先要进我家院子,然后再进我家门,最后走出我家门这样的过程。此操作是征对服务器本身的操作。
-A  PREROUTING �Cp tcp --dport 22 �Cj ACCEPT
-A  INPUT �Cp tcp --dport 22 �Cj ACCEPT 
-A  OUTPUT �Cp tcp --sport 22 �Cj ACCEPT
3、    允许内网机器可以登录 MSN QQ
MSN QQ 默认是不允许登录的) QQ 一般来说可以从 TCP 80 8000 443 UDP 8000 4000 登录,而 MSN 可以从 TCP 1863 443 登录。我们登录 MSN QQ 的过程就象上网一样,也是去访问远程服务器的指定端口,故而我们只用数据转发即可。
-A  PREROUTING �Cp tcp --dport 1863 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 443 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 8000 �Cj ACCEPT
-A  PREROUTING �Cp udp --dport 8000 �Cj ACCEPT
-A  PREROUTING �Cp udp --dport 4000 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 1863 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 1863 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 443 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 443 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 8000 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 8000 �Cj ACCEPT
-A  FORWARD �Cp udp --dport 8000 �Cj ACCEPT
-A  FORWARD �Cp udp --sport 8000 �Cj ACCEPT
-A  FORWARD �Cp udp --dport 4000 �Cj ACCEPT
-A  FORWARD �Cp udp --sport 4000 �Cj ACCEPT
4、    让内网机器可以收发邮件。
接收邮件是访问远程服务器的 TCP 110 端口,发送邮件是访问 TCP25 端口。用数据转发即可。
-A  PREROUTING �Cp tcp --dport 110 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 25 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 110 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 110 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 25 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 25 �Cj ACCEPT
5、    内部机器对外发布 WEB
要把内网机器 192.168.5.179 WEB 对外发布的话,相当于是从外网访问内网。与第 1 步操作的局域网共享上网相同,只是访问的方向改变了。不是从内网访问外网,而是从外网访问内网。
当公网访问服务器 218.100.100.111 时,防火墙把它映射到内网的 192.168.5.179 TCP80 上。当内网机器访问服务器 218.100.100.111 时,防火墙把它映射到内网的 192.168.5.179 TCP80 上。
-A PREROUTING �Ci eth0 �Cp tcp �Cd 218.100.100.111 --dport 80 �Cj DNAT --to-destination 192.168.5.179:80
-A PREROUTING �Ci eth1 �Cp tcp �Cd 218.100.100.111 �Cdport 80 �Cj DNAT �Cto-destination 192.168.5.179:80
(以上两句必须写在   �CA PREROUTING �Cp tcp --dport 80 �Cj ACCEPT   前面。)
  TCP 80 端口的转发在第 1 步就已做过,此处就不用重复制作了。另外在
-A  POSTROUTING �Cs 192.168.5.0/24 �Cj SNAT �Cto  218.100.100.111   之后加上一句 :
-A  POSTROUTING �Cp tcp --dport 80 �Cj  ACCEPT
为什么要加这句话呢,我的理解是这样的,
公网访问   http://218.100.100.111时:(假设公网上用户的 IP 199.199.199.199, 端口 12345 为随机的产生的。)
数据源      ip:199.199.199.199   sport:12345 
数据目标:   ip:218.100.100.111   dport 80
此时,通过 -A PREROUTING �Ci eth0 �Cp tcp �Cd 218.100.100.111 --dport 80 �Cj DNAT --to-destination 192.168.5.179:80  告诉 199.199.199.199, 您要访问的真正地址应该是 192.168.5.179:80, 然后我们通过 -A  POSTROUTING �Cp tcp --dport 80 �Cj  ACCEPT  目标地址 218.100.100.111:80 伪装成  192.168.5.179:80   
数据源      ip:199.199.199.199   sport:12345 
数据目标:   ip:192.168.5.179     dport 80
192.168.5.179 返回数据时:
数据源      ip:192.168.5.179     sport:80 
数据目标:   ip:199.199.199.199   dport 12345
数据经过   -A  POSTROUTING �Cs 192.168.5.0/24 �Cj SNAT �Cto  218.100.100.111  后,
数据源      ip:218.100.100.111   sport:80 
数据目标:   ip:199.199.199.199   dport 12345
6、    完整的 iptables 配置
###########################################################################
*nat
################################
:PREROUTING    DROP  [0:0]
:OUTPUT         DROP  [0:0]
:POSTROUTING   DROP  [0:0]
################################
-F 
-Z
-X
-A PREROUTING �Ci eth0 �Cp tcp �Cd 218.100.100.111 --dport 80 �Cj DNAT --to-destination 192.168.5.179:80
-A PREROUTING �Ci eth1 �Cp tcp �Cd 218.100.100.111 --dport 80 �Cj DNAT �Cto-destination 192.168.5.179:80
-A  PREROUTING �Cp tcp --dport 80 �Cj ACCEPT
-A  PREROUTING �Cp udp  --dport 53 �Cj ACCEPT   
-A  PREROUTING �Cp tcp --dport 22 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 1863 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 443 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 8000 �Cj ACCEPT
-A  PREROUTING �Cp udp --dport 8000 �Cj ACCEPT
-A  PREROUTING �Cp udp --dport 4000 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 110 �Cj ACCEPT
-A  PREROUTING �Cp tcp --dport 25 �Cj ACCEPT
-A  POSTROUTING �Cs 192.168.5.0/24 �Cj SNAT �Cto  218.100.100.111
-A  POSTROUTING �Cp tcp --dport 80 �Cj  ACCEPT
-L �Cv
COMMIT
################################################
*filter
##############################
:INPUT          DROP  [0:0]
:FORWARD      DROP  [0:0]
:OUTPUT        DROP  [0:0]
##############################
-F
-Z
-X 
-A  INPUT �Cp tcp --dport 22 �Cj ACCEPT 
-A  OUTPUT �Cp tcp --sport 22 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 80 �Cj ACCEPT     
-A  FORWARD �Cp tcp --sport 80 �Cj ACCEPT     
-A  FORWARD �Cp udp --dport 53 �Cj ACCEPT      
-A  FORWARD �Cp udp  --sport 53 �Cj ACCEPT   
-A  FORWARD �Cp tcp --dport 1863 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 1863 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 443 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 443 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 8000 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 8000 �Cj ACCEPT
-A  FORWARD �Cp udp --dport 8000 �Cj ACCEPT
-A  FORWARD �Cp udp --sport 8000 �Cj ACCEPT
-A  FORWARD �Cp udp --dport 4000 �Cj ACCEPT
-A  FORWARD �Cp udp --sport 4000 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 110 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 110 �Cj ACCEPT
-A  FORWARD �Cp tcp --dport 25 �Cj ACCEPT
-A  FORWARD �Cp tcp --sport 25 �Cj ACCEPT
-L �Cv  
COMMIT
##########################################################################
7、    其它注意事项
1) 在使用 iptables 防火墙之前,必须先打开 IP 转发功能。
echo “1” > /proc/sys/net/ipv4/ip_forward
2) 以上内容(第 6 步生成的内容)保存到  /etc/sysconfig/iptables 文件中。
3 )每修改一次 iptables 文件后,都要重启 iptalbes
    #  service iptables restart

你可能感兴趣的:(职场,iptables,休闲,iptables防火墙)