热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

轻松掌握——图形简释iptables防火墙

文章标题:轻松掌握——图形简释iptables防火墙。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  一般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 ?v
  COMMIT
  ################################################
  *filter
  ##############################
  :INPUT DROP [0:0]
  :FORWARD DROP [0:0]
  :OUTPUT DROP [0:0]
  ##############################
  -F
  -Z
  -X
  ### 以后要新增语句请在此处增加。
  -L ?v
  COMMIT
  ##########################################################################
  
  1、 局域网用户通过服务器共享上网
  
  (即从张三家到李四家)
  1)首先进①号门,再从⑥号门走出。
  -A PREROUTING ?p tcp --dport 80 ?j ACCEPT #允许TCP 80端口通过服务器
  -A FORWARD ?p tcp --dport 80 ?j ACCEPT #允许TCP80 端口转发
  -A FORWARD ?p tcp --sport 80 ?j ACCEPT #允许接收对方为TCP80端口反回的信息
  2)其次,由于我们上网打的是域名,为此有一个公网DNS服务器为我们服务,那当然也要允许内网机器与DNS服务器的数据转发。DNS用UDP 53或者 TCP 53端口。两者用其一个就行。
  -A PREROUTING ?p udp --dport 53 ?j ACCEPT
  -A FORWARD ?p udp --dport 53 ?j ACCEPT
  -A FORWARD ?p udp --sport 53 ?j ACCEPT
  3)再次,由于局域网的地址在公网上是不被允许的,所以在出公网前应该把其地址转为服务器地址进行伪装。
  -A POSTROUTING ?s 192.168.5.0/24 ?j SNAT ?to 218.100.100.111
  
  2、 允许局域网和公网可以访问服务器的SSH
  
  假设SSH采用默认端口TCP 22 。此要求相当于要进我的家的TCP 22号门,为此我们首先要进我家院子,然后再进我家门,最后走出我家门这样的过程。此操作是征对服务器本身的操作。
  -A PREROUTING ?p tcp --dport 22 ?j ACCEPT
  -A INPUT ?p tcp --dport 22 ?j ACCEPT
  -A OUTPUT ?p tcp --sport 22 ?j ACCEPT
  
  3、 允许内网机器可以登录MSN和QQ。
  
  (MSN和QQ默认是不允许登录的)QQ一般来说可以从TCP 80、8000、443及UDP 8000、4000登录,而MSN可以从TCP 1863、443登录。我们登录MSN和QQ的过程就象上网一样,也是去访问远程服务器的指定端口,故而我们只用数据转发即可。
  -A PREROUTING ?p tcp --dport 1863 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 443 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 8000 ?j ACCEPT
  -A PREROUTING ?p udp --dport 8000 ?j ACCEPT
  -A PREROUTING ?p udp --dport 4000 ?j ACCEPT
  -A FORWARD ?p tcp --dport 1863 ?j ACCEPT
  -A FORWARD ?p tcp --sport 1863 ?j ACCEPT
  -A FORWARD ?p tcp --dport 443 ?j ACCEPT
  -A FORWARD ?p tcp --sport 443 ?j ACCEPT
  -A FORWARD ?p tcp --dport 8000 ?j ACCEPT
  -A FORWARD ?p tcp --sport 8000 ?j ACCEPT
  -A FORWARD ?p udp --dport 8000 ?j ACCEPT
  -A FORWARD ?p udp --sport 8000 ?j ACCEPT
  -A FORWARD ?p udp --dport 4000 ?j ACCEPT
  -A FORWARD ?p udp --sport 4000 ?j ACCEPT
  
  4、 让内网机器可以收发邮件。
  
  接收邮件是访问远程服务器的TCP 110端口,发送邮件是访问TCP25端口。用数据转发即可。
  -A PREROUTING ?p tcp --dport 110 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 25 ?j ACCEPT
  -A FORWARD ?p tcp --dport 110 ?j ACCEPT
  -A FORWARD ?p tcp --sport 110 ?j ACCEPT
  -A FORWARD ?p tcp --dport 25 ?j ACCEPT
  -A FORWARD ?p tcp --sport 25 ?j 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 ?i eth0 ?p tcp ?d 218.100.100.111 --dport 80 ?j DNAT --to-destination 192.168.5.179:80
  -A PREROUTING ?i eth1 ?p tcp ?d 218.100.100.111 ?dport 80 ?j DNAT ?to-destination 192.168.5.179:80
  (以上两句必须写在 ?A PREROUTING ?p tcp --dport 80 ?j ACCEPT 前面。)
  TCP 80端口的转发在第1步就已做过,此处就不用重复制作了。另外在
  -A POSTROUTING ?s 192.168.5.0/24 ?j SNAT ?to 218.100.100.111 之后加上一句:
  -A POSTROUTING ?p tcp --dport 80 ?j 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 ?i eth0 ?p tcp ?d 218.100.100.111 --dport 80 ?j DNAT --to-destination 192.168.5.179:80 告诉199.199.199.199,您要访问的真正地址应该是192.168.5.179:80,然后我们通过-A POSTROUTING ?p tcp --dport 80 ?j 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 ?s 192.168.5.0/24 ?j SNAT ?to 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 ?i eth0 ?p tcp ?d 218.100.100.111 --dport 80 ?j DNAT --to-destination 192.168.5.179:80
  -A PREROUTING ?i eth1 ?p tcp ?d 218.100.100.111 --dport 80 ?j DNAT ?to-destination 192.168.5.179:80
  -A PREROUTING ?p tcp --dport 80 ?j ACCEPT
  -A PREROUTING ?p udp --dport 53 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 22 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 1863 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 443 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 8000 ?j ACCEPT
  -A PREROUTING ?p udp --dport 8000 ?j ACCEPT
  -A PREROUTING ?p udp --dport 4000 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 110 ?j ACCEPT
  -A PREROUTING ?p tcp --dport 25 ?j ACCEPT
  -A POSTROUTING ?s 192.168.5.0/24 ?j SNAT ?to 218.100.100.111
  -A POSTROUTING ?p tcp --dport 80 ?j ACCEPT
  -L ?v
  COMMIT
  ################################################
  *filter
  ##############################
  :INPUT DROP [0:0]
  :FORWARD DROP [0:0]
  :OUTPUT DROP [0:0]
  ##############################
  -F
  -Z
  -X
  -A INPUT ?p tcp --dport 22 ?j ACCEPT
  -A OUTPUT ?p tcp --sport 22 ?j ACCEPT
  -A FORWARD ?p tcp --dport 80 ?j ACCEPT
  -A FORWARD ?p tcp --sport 80 ?j ACCEPT
  -A FORWARD ?p udp --dport 53 ?j
推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了使用SSH免密登录的步骤,包括生成公私钥、传递公钥给被登录机、修改文件权限的操作。同时提醒用户注意私钥的传递方式,建议使用U盘等离线方式传递。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
迈迈最love
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有