iptables/netfilter网络防火墙:

iptables/netfilter网络防火墙:


FORWORD链上的防火墙规则

iptables/netfilter网络防火墙:

路由功能打开
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

网关设置防火墙,让内网可以访问外网网页

iptables -A FORWARD -s 192.168.126.131 -p tcp --dport 80 -j ACCEPT

iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j DROP

也可以用笨办法

iptables -A FORWARD -s 192.168.126.131 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -j DROP
iptables -I FORWARD 2 -d 192.168.126.0/24 -p tcp --sport 80 -j ACCEPT

不过第一种方法可以实现多条端口的访问

iptables -R FORWARD 2 -s 192.168.126.131 -p tcp -m multiport --dport 80,22,23,21,139,445 -m state --state NEW -j -ACCEPT

modprobe nf_conntrack_ftp (有了此条命令就能使用ftp的RELATED了)

iptables -I FORWARD  -m state --state ESTABLISHED,RELATED -j ACCEPT

所以添加规则于FORWARD链,注意几个问题:

1) 请求和响应报文均会经由FORWARD链,要注意规则的方向性;分清谁是请求谁是相应 
建议:第一条:iptables -I FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

(2) 如果可以启用conntrack机制,注意网关主机所能够追踪的连接数的最大数量要符合需要

NAT:

  • 源地址转换:SNAT,POSTROUTING
      静态转换:外网地址是固定的
      动态转换:外网地址时不固定的,需要临时探测地址后再转换
      地址池地址转换! 
    
  • 目标地址转换:DNAT,PREROUTING

  • PAT:端口转换 (端口映射)Port Address Translation

SNAT:源地址转换,主要用于请求时隐藏主机

目标地址不变,重新改写源地址,并在本机建立NAT表项,当数据返回时,在刚收到报文的时候就要根据NAT表将目的地址数据改写为数据发送出去时候的源地址(要不就会发送到INPUT了),并发送给主机

目前大多都是解决内网用户用同一个公网地址上网的情况

–to-source [ipaddr[-ipaddr]]

注意:【系统在路由及过虑等处理直到数据包要被送出时才进行SNAT】
(有一种SNAT的特殊情况是ip欺骗,也就是所谓的Masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况下使用)

-j SNAT --to-source IP[-IP][:端口-端口](nat 表的 POSTROUTING链)

 源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池
 (一组连续的 IP 地址)
例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \
 -j SNAT --to 1.1.1.1
将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \
 -j SNAT --to 1.1.1.1-1.1.1.10
同上,只不过修改成一个地址池里的 IP

iptables/netfilter网络防火墙:

1、默认情况
iptables/netfilter网络防火墙:

iptables/netfilter网络防火墙:
2、网关主机(源端口转换)

 ~]# iptables -t nat -A POSTROUTING -s 192.168.22.0/24(内网段) -j SNAT --to-source 10.1.6.68(路由的外网ip)

iptables/netfilter网络防火墙:

iptables/netfilter网络防火墙:

这时会发现 目标主机自动转换ip到请求主机

MASQUERADE:地址伪装,这种用于不知道地址时做转换使用,如果知道地址最好不要用,会消耗大量系统资源
        This target is only valid in the nat table, in the POSTROUTING chain.  It  should  only  be  used  with  dynamically assigned  IP (dialup) connections: if you have a static IP address, you should use the SNAT target. 

DNAT:用于被请求时隐藏主机

和SNAT相反,源地址不变,重新修改目标地址,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机

在DNAT的基础上,可以根据请求数据包的端口做PNAT(端口转换,也称为端口映射),可以更句请求数据包不同的端口改写不同的目标地址,从而发送给不同的主机

这在用一个公网地址做不同服务时用的比较多,而且相对来说,用NAT的方式可以隐藏后端服务器的真实地址,更加的安全         

–to-destination [ipaddr[-ipaddr]][:port[-port]]

REDIRECT:本机短端口映射
    This  target  is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains. 

        --to-ports port[-port]

    RETURN:返回 

iptables/netfilter网络防火墙:

iptables/netfilter网络防火墙:
~]# iptables -t nat -A PREROUTING -d 10.1.6.68 -p tcp –dport 80 -j DNAT –to-destination 192.168.126.131:80

ss -tnl 可以看到哪台主机访问哪个端口
注意:改22号端口时 本地转发主机会被隐藏,最好改的时候把ssh端口给换一下也可以



iptables -t nat -A PREROUTING -d 10.1.6.68 -p tcp --dport 22022 -j DNAT --to-destination 192.168.126.131:22

这样就不用改本地主机的22端口了,改那个内网主机的端口隐藏成其他的做法

如果本机监听的端口是8080,但外部不识别这个端口只识别80端口解决方法

做本机的端口映射(NAT表),把刚到达本机的请求(PREROUTING)给改映射端口!

iptables -t nat -A PREROUTING -d 192.168.126.130(本机端口) -p tcp –dport 80 -j REDIRECT –to-port 8080

自定义链:如果没被匹配到默认就会返回调用链,不过还是建议加上返回 -j RETURN

iptables -N web_in

iptables -A web_in -d 192.168.126.0/24 -p tcp –dport 80 -j ACCEPT

虽然这样加上了但是不会被引用
还要在默认链上加上引用

iptables -I FORWARD 2 -d 192.168.126.0/24 -p –dport 80 -j web_in

这样就会把来自192.168.126.0/24网络上的主机的转发请求跳转到 web_in这条链上去了

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/54725

(0)
qzxqzx
上一篇 2016-10-26 21:50
下一篇 2016-10-26 21:58

相关推荐

  • 一步到位实现zabbix安装

    简介 zabbix是一个基于WEB界面的提供分布式网络监视功能的企业级的开源解决方案。相对于cacti和nagios而言,zabbix最大的特点是分布式监控,自动发现,自定义监控项目。 一、监控系统所具备的四个要素 1、数据采集       zabbix采集数据的手段有SNMP、zabbix的Agent、IPMI ag…

    2015-03-02
  • Shell脚本之流程控制语句

    Shell脚本之流程控制语句 1、 if语句 (1)if 条件;then        action1 else        action2 fi  注意:shell里没有缩进要求。 (2)if 条件1;then   …

    Linux干货 2017-04-16
  • nginx反向代理负载均衡集群配置详解

    反向代理负载均衡集群配置详解 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时站在服务器角度来看,代理服务器对外就表现为一个反向代理服务器。 对反向代理服务器的攻击并不会使得后端内网Web服务器上网页信息遭到…

    Linux干货 2016-11-07
  • 磁盘文件挂载与卸载

    挂载(mount)何为挂载?挂载指将文件系统与根文件系统的某个现存的目录建立起来的关联关系,这样我们就可以将目录作为访问磁盘文件的入口,进行存取交互。挂载点:挂载点指的是被挂载的对象,通常挂载点是一个目录,不过有时候也有文件作为挂载点格式:mount 设备 挂载点 ;此挂载方法味临时挂载,只在当前的shell中有效,退出则清除挂载关联设备文件在/dev/sd…

    Linux干货 2017-04-24
  • 马哥教育网络班22期-第1周博客作业2

    date命令 date – print or set the system date and time 显示或设置系统日期和时间 【SYNOPSIS】 date [OPTION]… [+FORMAT] 【OPTIONS】 -d:–date=STRING,显示字符串所指的日期与时间, 而不是当前时间,字符串前后必须加上双引号…

    Linux干货 2016-08-15
  • linux基础学习第十一天(shell循环、软件包管理)

    2016-08-16 授课内容: shell脚本基础:循环,for,while,until(未讲完) 软件包管理(未讲完): 软件运行环境 软件包基础 Rpm包管理 循环执行 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 循环控制语句: break:【提结束循环,循环将不再执行】指前面的循环退出,退…

    Linux干货 2016-08-18