一、nat

之前网络防火墙的示例中,如果内网是私网地址,那么内网主机如何与外网通信呢?

这时候,iptables要实现内网和外网通信,有两种方式:

  nat: Network Address Translation,安全性,网络层+传输层
  proxy: 代理,应用层

常见的nat有两种情形:

SNAT: 只修改请求报文的源地址
DNAT:只修改请求报文的目标地址

nat表:

PREROUTTING: DNAT
OUTPUT
POSTROUTING: SNAT

实例:架构如下

中间一台主机当做连接内网和外网的接口,添加两块网卡,192.168.20.1作为内网网关,192.168.1.1为外网网关,内网中有台主(192.168.20.2)机指向内网网关(192.168.20.1)

具体步骤:
  中间主机: 添加一块自定义网卡,添加ip: # ip addr add 192.168.20.1/24
        打开转发功能: # vim /etc/sysctl.conf ==> net.ipv4.ip_forward=1 ==> sysctl -p
  内网主机: 添加ip并且指向内网网关: # ifconfig eth1 192.168.20.2/24 up; # route add default gw 192.168.20.1
  外网主机: 添加网络路由: # route add -net 192.168.20.0/24 gw 192.168.1.101
现在内外网主机可以互相ping通

接下来做一个基于DNAT的方式进行源地址转换:

1. 首先让外网启动web服务,并写一个简单的测试页面

2. 抓包测试:

外网主机: # tcpdump -i eth0 host 192.168.1.103
内网主机: # curl http://192.168.20.2
外网主机成功抓包: 说明内网主机可以和外网主机通信

3. 现在删掉刚才添加的外网主机的网络路由:

# route del -net 192.168.20.0/24

4. 写iptables规则实现snat转发

# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j SNAT --to-source 192.168.1.101
如果这个外网地址不是固定的,可以用MASQUERADE机制来地址伪装:
# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j MASQUERADE

6. 写iptables规则实现dnat转发

# iptables -t nat -A PREROUTING -d 192.168.1.101 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2

再次测试,内网和外网可以通信,如果是端口映射,可以直接在ip后面指定[:PORT]

二、tcp_wrapper

tcp_wrapper: tcp包装器
  对基于tcp协议开发并提供服务的应用程序,提供的一层访问控制工具
  基于库调用实现其功能:libwrap 

判断服务是否能够由tcp_wrapper进行访问控制:

 (1)动态编译: ldd命令
 (2)静态编译: strings命令查看应用程序文件,其结果中如果出现
      hosts.allow
      hosts.deny 

在配置文件中为各服务分别定义访问控制规则实现访问控制:

/etc/hosts.allow
/etc/hosts.deny 配置文件语法:
  daemon_list: client_list [:options]
  daemon_list:
    应用程序的文件名称,而非服务名
    应用程序文件名称列表,彼此间使用逗号分隔
        例如: sshd,vsftpd
          ALL表示所有服务   client_list:
    IP地址
    主机名
    网络地址:必须使用完整格式的掩码,不使用前缀格式掩码;所以类似于192.168.1.0/24不合法
    简短格式的网络地址:192.168.1.表示 192.168.1.0/255.255.255.0
    ALL: 所有主机
    KNOWN
    UNKNOWN:
    PARANOID
  
  EXCEPT: 除了
    hosts.allow
      vsftpd:172.16. EXCEPT 172.16.100.0/255.255.255.0 EXCEPT 172.16.100.1   [:options]
    deny: 拒绝,主要用于hosts.allow文件中
      vsftpd: 172.16.:deny  //非172.16网络的反而能访问
    allow: 允许,主要用于hosts.deny文件中
    spawn: 启动额外应用程序
      vsftpd: ALL : spawn /bin/echo `date` login attempt from %c to %s,%d >> /var/log/vsftpd.deny.log
            %c: client ip    
            %s: server ip
            %d: daemon name
  
  例如: 1.vsftpd服务不允许192.168.1.101访问
        # vim /etc/hsots.deny
         添加: vsftpd: 192.168.1.101
      2. vsftpd服务只允许192.168.1网络访问
        # vim /etc/hosts.allow
          添加:vsftpd:192.168.1.
        # vim /etc/hosts.deny
          添加: vsftpd:ALL

检查次序如下图所示:先在hosts.allow中进行匹配,如果有就直接放行了,没有就继续进行host.deny匹配,hosts.deny中如果匹配,那么就拒绝放行,没有就进行默认操作,默认放行

实例:控制telnet服务仅允许172.16.0.0网络中的主机访问,但不包括172.16.100.0/255.255.255.0中的主机

  对所有正常登陆的主机都记录于/var/log/telnet.allow.log中

  所有未授权访问尝试都记录于/var/log/telnet.deny.log中

# yum install telnet-server -y
# vim /etc/xinetd.d/telnet
disabled = no //相当于chkconfig telnet on
# vim hosts.allow
 添加: in.telnetd: 172.16. EXCEPT 172.16.100. :spawn /bin/echo `date` login attempt from %c to %s,%d >> /var/log/telenet.allow.log
# vim hosts.deny
 添加: in.telnetd:ALL EXCEPT 172.16. EXCEPT 172.16.100. :spawn /bin/echo `date` login attempt from %c to %s,%d >> /var/log/telnet.deny.log   

iptables (二) nat & tcp_wrapper的更多相关文章

  1. 用iptables做NAT代理,使内网机器上外网

    现状:服务器A只有一个内网IP,不能上外网,内网IP与服务器B内网相通:服务器B有一个内网IP和公网IP.想实现服务器A也能上外网. 1 2 3 4 服务器A:内网网卡:eth0 内网IP:192.1 ...

  2. 动手实验iptables的NAT功能实现流量穿透

    1.NAT和iptables理论见: http://lustlost.blog.51cto.com/2600869/943110 2.引子 近期,有同事抱怨说数据入库时,由于数据库所在的服务器只有内网 ...

  3. iptables配置——NAT地址转换

    iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如 ...

  4. 用iptables 做NAT代理上网

    背景:有一台A服务器不能上网,和B服务器通过内网来连接,B服务器可以上网,要实现A服务器也可以上网. 内网主机: A eth1:172.16.1.8 外网主机: B eth0:10.0.0.61外网主 ...

  5. 亲测可用,iptables实现NAT转发。

    环境 服务器A:192.168.1.7 服务器B: 192.168.1.160 需求 实现将本机(192.168.1.7:7410)端口流量转发给(192.168.1.160:9200). 1. 内核 ...

  6. zabbix和iptables的nat表结合使用

    A 机器要去访问C机器,但是无法直接访问到A可以访问到B机器,B机器可以访问到C机器这时候就可以再B机器设置nat,让A机器访问C机器 正好工作中zabbix server要监控2个http地址,缺无 ...

  7. iptables之NAT端口转发设置

    背景:服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通服务器C: ...

  8. 5、iptables之nat

    iptables: 显式扩展.网络防火墙 显式扩展:multiport, iprange, string, time, connlimit, limit, state state:无关是哪种协议 /p ...

  9. iptables之NAT代理-内网访问外网

    1.前言 本文使用NAT功能:内网服务器,想上网又不想被攻击. 工作原理:内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做 ...

随机推荐

  1. 自学笔记系列:《Python学习手册 第五版》 -写在开始之前

    今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...

  2. Go语言实现:【剑指offer】从上往下打印二叉树

    该题目来源于牛客网<剑指offer>专题. 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 不需分层,一维数组. Go语言实现: /** * Definition for a bi ...

  3. 编译原理实验之SLR1文法分析

    ---内容开始--- 这是一份编译原理实验报告,分析表是手动造的,可以作为借鉴. 基于  SLR(1) 分析法的语法制导翻译及中间代码生成程序设计原理与实现1 .理论传授语法制导的基本概念,目标代码结 ...

  4. shell脚本 定期删除日志

    定期删除日志: 然后建立清除日志文件的shell脚本,文件名为clean_log只保留最近三天的日志     #! /bin/bashlogdir=/var/log/httpdcd ${logdir} ...

  5. windows设置开机自启动的地方

    2013-03-24 11:06 (分类:网络安全) 精心总结,这些都是可以放小木马的好地方,留意了 1.最简单的 开始→程序→启动它的位置 C:\Documents and Settings\*** ...

  6. Angular目录结构

    一. Angular目录结构 e2e:在e2e/下是端到端测试 node_modules:安装的第三方模块都在这,使用npm install安装的1 Src:我们项目的所有文件 { App:组件,以a ...

  7. 在Kali linux下使用docker配置sqli-labs(国内源的配置和系统软件更新)

    本篇blog导航: ~前言 ~第一步:在安装好的kali配置国内源 ~第二步:安装docker ~第三步:docker下安装sqli-labs ~写在最后. 前言: 最近闲来无事,在闯关sqli-la ...

  8. Yet Another Broken Keyboard[双指针]

    题目大意: 求贡献,已知公式n*(n+1)/2,求总和 收获: long long的转换技巧只能在乘或除上进行 题目链接 #include<bits/stdc++.h> typedef l ...

  9. WannaMine4.0查杀方法

    病毒现象 扫描爆破内网基于445端口的SMB服务 服务器出现卡顿.蓝屏 服务器主动访问恶意域名:totonm.com.cake.pilutce.com:443 病毒处置 删除关键病毒文件:C:\Win ...

  10. Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...