iptables (二) nat & tcp_wrapper
一、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的更多相关文章
- 用iptables做NAT代理,使内网机器上外网
现状:服务器A只有一个内网IP,不能上外网,内网IP与服务器B内网相通:服务器B有一个内网IP和公网IP.想实现服务器A也能上外网. 1 2 3 4 服务器A:内网网卡:eth0 内网IP:192.1 ...
- 动手实验iptables的NAT功能实现流量穿透
1.NAT和iptables理论见: http://lustlost.blog.51cto.com/2600869/943110 2.引子 近期,有同事抱怨说数据入库时,由于数据库所在的服务器只有内网 ...
- iptables配置——NAT地址转换
iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如 ...
- 用iptables 做NAT代理上网
背景:有一台A服务器不能上网,和B服务器通过内网来连接,B服务器可以上网,要实现A服务器也可以上网. 内网主机: A eth1:172.16.1.8 外网主机: B eth0:10.0.0.61外网主 ...
- 亲测可用,iptables实现NAT转发。
环境 服务器A:192.168.1.7 服务器B: 192.168.1.160 需求 实现将本机(192.168.1.7:7410)端口流量转发给(192.168.1.160:9200). 1. 内核 ...
- zabbix和iptables的nat表结合使用
A 机器要去访问C机器,但是无法直接访问到A可以访问到B机器,B机器可以访问到C机器这时候就可以再B机器设置nat,让A机器访问C机器 正好工作中zabbix server要监控2个http地址,缺无 ...
- iptables之NAT端口转发设置
背景:服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通服务器C: ...
- 5、iptables之nat
iptables: 显式扩展.网络防火墙 显式扩展:multiport, iprange, string, time, connlimit, limit, state state:无关是哪种协议 /p ...
- iptables之NAT代理-内网访问外网
1.前言 本文使用NAT功能:内网服务器,想上网又不想被攻击. 工作原理:内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做 ...
随机推荐
- 推荐一个很棒的开源工作流elsa-core
开源项目orchard主要开发人员Sipke Schoorstra 开源了一个netcore 工作流项目,地址:https://github.com/elsa-workflows/elsa-core, ...
- Shell:setfacl缩小普通用户的权限
简介 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现 ...
- 基于 Google-S2 的地理相册服务实现及应用
马蜂窝技术原创内容,更多干货请关注公众号:mfwtech 随着智能手机存储容量的增大,以及相册备份技术的普及,我们可以随时随地用手机影像记录生活,在手机中存储几千张甚至上万张照片已经是很常见的事情.但 ...
- CentOS7 Cloudera Manager6 完全离线安装 CDH6 集群
本文是在CentOS7.4 下进行CDH6集群的完全离线部署.CDH5集群与CDH6集群的部署区别比较大. 说明:本文内容所有操作都是在root用户下进行的. 文件下载 首先一些安装CDH6集群的必须 ...
- 自动化运维工具:ansible
自动化运维工具:ansible Ansible(1):简介和基本概念 Ansible(2):安装配置 Ansible(3):ansible资源清单管理 Ansible(4):常用模块
- 【问题】多重继承时,super函数只初始化继承的第一个类,不初始化第二个类。
class A(object): def __init__(self): print("init class A") class B(object): def __init__(s ...
- IT运维软件免费送 智和信通战疫活动火热进行中
突如其来的“新型冠状病毒”疫情牵动了全国人民的心,这是一场与病毒抗争,为生命逆行与时间赛跑的战役.举国上下众志成城面对疫情,在线医疗.在线教学.在线办公.在线会议.电商销售成为热点.线上经济的火热给企 ...
- java架构之路-(dubbo专题)dubbo的基本使用
今天我们来说一下dubbo的基本使用,没有什么高阶的知识,真的超级简单易懂. Dubbo核心功能解释 dubbo 阿里开源的一个SOA服务治理框架,从目前来看把它称作是一个RPC远程调用框架更为贴切. ...
- pikachu-跨站脚本漏洞(XSS)
一.跨站脚本漏洞概述 1.1 什么是XSS漏洞? XSS是一种发生在Web前端的漏洞,其危害的对象也主要是前端用户. 1.2 XSS如何攻击? 二.跨站脚本漏洞类型及测试流程 2.1 跨站脚本 ...
- 11种常用css样式之表格和定位样式学习
table表格中border-collapse: collapse;/*表格边框是否合并*/border-spacing: 10px;/*表格边框之间的距离*/定位详情可以阅读position属性值4 ...