iptables防火墙策略
环境:
foundation1 172.25.1.250 172.25.254.1
server1 172.25.1.1
server2 172.25.1.2
server3 172.25.1.3
四个主机都做解析
iptables简介:
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables采用“表”和“链”的分层结构,在linux中iptables主要有三张表五条链:
三张表即filter表、nat表、mangle表,分别用于实现包过滤,网络地址转换、包重构(修改)功能
filter表有三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包
Nat表有三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口)
Mangle表有五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型等
iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链。
规则链则依据处理数据包的位置不同分类:
PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING: 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记(较少使用)
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
另外注意:
1.没有指定规则表则默认指filter表。
2.不指定规则链则指表内所有的规则链。
3.在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。
注意:
你所定义的所有内容,当你重启的时候都会失效,要想我们能够生效,需要使用一个命令将它保存起来
1.service iptables save 命令
它会保存在/etc/sysconfig/iptables这个文件中
2.iptables-save 命令
iptables-save > /etc/sysconfig/iptables
为了不影响实验去除干扰,将 firewalld 关闭,安装 iptables,并启动
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# systemctl status firewalld
[root@server1 ~]# yum install iptables-services //下载防火墙服务,server1、server2、server3均下载
[root@server1 ~]# systemctl start iptables.service //开启服务
[root@server1 ~]# iptables -nL //查看防火墙策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server1 ~]# iptables -F //刷新策略
[root@server1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server1 ~]# yum install -y httpd //下载http服务
[root@server1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@server1 ~]# systemctl start httpd //开启http服务
[root@server1 ~]# iptables -P INPUT ACCEPT //设置接受模式
此时所有主机浏览器都可以访问httpd页面,这里用curl命令
给server1写一个Apache的发布页面
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls
[root@server1 html]# vim index.html
[root@foundation1 Desktop]# curl server1
[root@server2 ~]# curl server1
server1
[root@server3 ~]# curl server1
server1
[root@server1 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT //添加策略,使http为拒绝
[root@server1 ~]# iptables -nL //查看策略是否已添加
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
此时:
[root@server2 ~]# curl server1
[root@server3 ~]# curl server1
curl: (7) Failed connect to server1:80; Connection refused
[root@server1 ~]# iptables -A INPUT -s 172.25.1.2 -p tcp --dport 80 -j ACCEPT //指定ip为server2可以访问该主机的http服务
[root@server1 ~]# iptables -nL
[root@server2 ~]# curl server1
curl: (7) Failed connect to server1:80; Connection refused
防火墙策略读取方式:
读取时从第一条开始读取,当满足第一条时停止读取。
可以看到虽然有策略,但是server2还是不能访问,因为第一条策略读完就拒之门外,所以因采用:
[root@server1 ~]# iptables -D INPUT 2
[root@server1 ~]# iptables -I INPUT 1 -s 172.25.1.2 -p tcp --dport 80 -j ACCEPT [root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -nL
此时:
[root@server2 ~]# curl server1
[root@server3 ~]# curl server1
[root@server1 ~]# iptables -R INPUT 2 -s 172.25.1.3 -p tcp --dport 80 -j ACCEPT //修改第二条策略,修改为允许server3访问
[root@server1 ~]# iptables -nL
此时server3也可进行访问
[root@server3 ~]# curl server1
[root@server1 ~]# iptables -F //刷新策略
[root@server1 ~]# iptables -nL //察看是否已刷新
[root@server1 ~]# iptables -N xx //添加名为xx的链
[root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -E xx cc //修改链名,将名为xx的链修改为cc
[root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -X cc //删除链cc
[root@server1 ~]# iptables -nL
NAT (Net Address Trancelate:网络地址转换)
*************************源地址转换:SNAT*********************************
(源地址转换)是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的 IP,这样,接收方就认为数据包的来源是被替换的那个 IP 的 主机
*************************目的地址转换:DNAT*******************************
(目标地址转换),就是指数据包从网卡发送出去的时候,修改数据包中的目的 IP,表现为如果你想访问 A,可是因为网关做了 DNAT,把所有访问 A 的数 据包的目的 IP 全部修改为 B,那么,你实际上访问的是 B
注意:实现配置iptables的NAT功能需要 开启内核的转发功能
1、SNAT
环境:
server1:172.25.1.1
server2: 172.25.1.2 172.25.254.2 开启iptables服务
server3:172.25.254.3
## 所有主机刷新策略,并关闭防火墙firewalld
## 打开转发IP功能(IP forwarding):
echo "1" > /proc/sys/net/ipv4/ip_forward
要想永久有效:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
如果使用PPP、DHCP等动态IP,需要打开:
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
[root@server2 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@server2 ~]# systemctl status iptables
[root@server2 ~]# ip address add 172.25.254.2/24 dev eth1 //添加网卡eth1:172.25.254.2
[root@server1 ~]# ip addr
[root@server3 ~]# ip addr
原本不同网段ip是ping不通的,即server1和server3是ping不通的
[root@server1 ~]# ping 172.25.254.3
[root@server2 ~]# iptables -nL -t nat //查看nat策略
[root@server2 ~]# iptables -t nat -I POSTROUTING -s 172.25.1.0/24 -j MASQUERADE
//在路由后,将172.25.1.0/24网段过来的主机转发出去
[root@server2 ~]# iptables -nL -t nat
[root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 //添加网关
GATEWAY=172.25.1.2
[root@server1 ~]# systemctl restart network
[root@server2 ~]# route -n
-bash: route: command not found
[root@server2 ~]# yum install -y net-tools //下载route 命令所需的工具
[root@server1 ~]# route -n //查看网关
[root@server1 ~]# ping 172.25.254.3
//此时虽然是不同网段,但是可以ping通
2、DNAT
环境:
server1 内网 172.25.1.1/24
server2 路由 172.25.1.2/24 172.25.254.2/24
server3 外网 172.25.254.3/24
分别给三个主机写一个http页面,内容为各自的ip,方便判断连接到的是哪个主机
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# echo 172.25.1.1 > /var/www/html/index.html //写一个http页面,内容为172.25.1.1
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# systemctl start httpd
[root@server2 ~]# echo 172.25.1.2 > /var/www/html/index.html //写一个http页面,内容为172.25.1.1
[root@server3 ~]# yum install httpd
[root@server3 ~]# systemctl start httpd
[root@server3 ~]# systemctl status httpd
[root@server3 ~]# echo 172.25.254.3 > /var/www/html/index.html //写一个http页面,内容为172.25.254.3
给路由主机添加策略:
现在要把外网访问172.25.254.2的所有流量映射到172.25.1.1上
[root@server2 ~]# iptables -t nat -A PREROUTING -d 172.25.254.2 -j DNAT --to-destination 172.25.1.1
[root@server2 ~]# iptables -t nat -A POSTROUTING -d 172.25.1.1 -j SNAT --to 172.25.1.2
[root@server2 ~]# iptables -nL -t nat
[root@server2 ~]# service iptables save //保存策略
[root@server2 ~]# cat /etc/sysconfig/iptables //可以查看策略保存的内容
此时,外网用curl命令访问路由主机,相当于http访问:
[root@server3 ~]# curl 172.25.254.2
curl命令查看172.25.1.2内容时出现的不是172.25.1.2而是server1的内容,即172.25.1.1的httpd发布内容
也可以通过ssh远程连接:
[root@server3 ~]# ssh root@172.25.254.2
//本应连接到server2,但此时远程连接上的是server1而不是server2,因为目标地址进行了转换,将172.25.254.2转换成了172.25.1.1
相关文章:

ubuntu(16.04.01)学习-day1
1.修改root用户密码 sudo passwd root 按提示进行设置。 2.从Ubuntu 16.04开始,用户可以实现改变启动器的位置,可以将启动器移到屏幕底部,但是无法移到右边或顶部。打开终端,然后输入下面这个命令,即可将启动器移到屏幕…

HDU 1090 A+B for Input-Output Practice (II)
#include <cstdio> int main() {int n,a,b;scanf("%d",&n);for (int i1; i<n; i){ scanf("%d%d",&a,&b);printf("%d\n",ab);}return 0; } 转载于:https://www.cnblogs.com/forever97/p/3539605.html

监听UIWebView点击视频播放的事件
最近项目需要统计在跳转UIWebView后,用户点击网页上的视频进行播放的概率。找了很多监听进入视频播放的方法,最后在stackoverflow找到下面这个使用Notification的可行方法(如果是弹出): #pragma mark Notification - (void)addNotification {…

linux系统下redhat7之虚拟机控制
基础操作: [kioskfoundation0 Desktop]$ rht-vmctl start desktop ###开启desktop虚拟机 Error: desktop not started (is already running) ###报错,desktop已经运行 [kioskfoundation0 Desktop]$ rht-vmctl view desktop …
如何设计一个 iOS 控件?(iOS 控件完全解析)
前言 一个控件从外在特征来说,主要是封装这几点: 交互方式显示样式数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内;而一个…

Chapter12:动态内存
智能指针——shared_ptr为了更容易地使用动态内存,新的标准提供了智能指针来管理动态对象。智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象。 智能指针的使用方式与普通指针类似。解引用一个智能指针返回它指向的对象。 1 if (p1 &am…

判断JS对象是否拥有某属性两种方式
方式,但稍有区别 1,in 运算符 1 2 3 var obj {name:jack}; alert(name in obj); // --> true alert(toString in obj); // --> true 可看到无论是name,还是原形链上的toString,都能检测到返回true。 2,hasOwnP…

Linux之redhat7系统结构
一.linux系统结构 linux是一个倒树结构 linux中所有的东西都是文件 这些文件都在系统顶级目录“/” /就是根目录 /目录以下为二级目录这些目录都是系统装机时系统自动建立的 二级目录的作用 /bin ##二进制可执行文件也就是系统命令 /sbin ##系统管理命令存放位置 /boot …

ASP.NET优化
源地址:http://www.cnblogs.com/wangjingblogs/archive/2013/02/27/2934706.html http://jingyan.baidu.com/article/2d5afd69bfd0ff85a3e28e6d.html转载于:https://www.cnblogs.com/haizine/p/5841771.html
3D Touch介绍: 一个数字压力器App和Quick Actions
随着iPhone 6s and 6s Plus的发布,苹果介绍了全新的手机交互方式:重按手势。你应该知道,这个特性其实早已应用在苹果手表和MacBook产品中,名字叫Force Touch。它给用户交互添加了全新的维度! 或许你对Force Touch为什么…

一些LUA函数(转载)
转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1、assert (v [, message]) 功能:相当于C的断言,当表达式v为nil或false将触发错误, message:发生错误时返回的信息,默认为"assertion f…

cifs------网络文件系统(1)
SMB文件共享 SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层࿰…

Swift 教學:如何使用iOS Charts API 製作漂亮的圖表
在應付許多的資料時,比起只在表格中呈現,使用圖表來顯示資料,可以幫助使用者容易地了解資訊。有了圖表,相對於讀取整個資料表(或幾個資料表)你可以輕鬆地一眼便見到以圖形表示的資料,取得所需的…

在Proteus中添加标号
1.Proteus中添加组件后双击引脚可以快速生成一个最近的端口。 2.按A调出设置界面 3.在String中写:netH#,"H"可以换成自定义前缀。count为起始值,increment为增量。 4.依次点击想要编号的引脚。转载于:https://www.cnblogs.com/viaduct/p/58424…

九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
题目地址:http://ac.jobdu.com/problem.php?pid1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符…

cifs------网络文件系统(2)
接着上篇博客继续: Samba 基本配置 [rootserver2 ~]# rpm -qc samba-common //查看smb的配置文件 1、黑、白名单的设定 默认白名单,设置的ip是黑名单用户:hosts deny ip 默认黑名单,设置的ip是白名单用户ÿ…
iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md 目录 当我们在谈论缓存的时候,我们在谈论什么?GET网络请求缓存 80%的缓存需求:两行代码就可满足…

YARN集群维护部分问题汇总
云梯开发人员在云梯Yarn集群的搭建和维护过程中做了许多工作,本文选择这期间部分较为典型的问题,通过对这些问题的分析和解决方案,为大家分享分布式系统问题调查的经验。 调查的问题 1. 2013年初引入社区0.23时,调查ResourceManag…

linux系统管理及vim
1.管理输入输出 在linux系统中,正确输出的编号为1,错误输出编号为2 在系统中用普通用户执行 "student" find /etc -name passwd 因为student用户权限问题会有以下输出 find: ‘/etc/pki/CA/private’: Permission denied ##没有进入权力…

如何用 OS X 的 Xcode 写C语言程序
這篇是給新手看的。 如果你在 Windows 習慣使用 Visual C 或 Dev-C 的話,到了 Mac OS X 可能會突然不知道要怎麼寫程式,尤其當你已經用 Visual C 的 Debugger 用得很上手的話。 最近我們系上的課充滿了 C programming,我也稍微摸懂了 Xcode 的…

【转】初等数论 ——原根、指标及其应用
转自:http://blog.163.com/gc_chdch126/blog/static/172279052201641935828402/ 学习总结:初等数论(3)——原根、指标及其应用 2016-05-19 15:58:28| 分类: 信息学——学习总 | 标签:初等数论 数学 |…

互联网产品评论索引
这里收集一些评论文章,定期查看文章观点的正确性,索引持续更新中 网站前期如何获得推广资源 专访陶瑾:微信公众平台开发先行者转载于:https://www.cnblogs.com/needrunning/p/3000353.html

Apache服务器部署(1)
apache(web服务器)简介: Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充&…

JavaScript关键字this指向
在js中this始终指向一个调用函数的那个对象 var a有种你干掉我啊; //纯粹调用函数 function test(){ console.log(this.a);//默认指向全局对象 } //test();//>windows.test() //作为对象的方法被调用 Function.prototype.logfunction(){ console.log(this.a); } //此时t为一…

项目开发过程中的收获与思考
2013年7月,我正式毕业了,到公司入职,也就正式成为了一名菜鸟程序员。到今天,2014年1月3日,目前主要的工作是公司一个项目中的一个功能模块,到我进入项目组算起,已经过了四个月了。因此ÿ…
【仿汽车之家】价格区间选择控件
仿照汽车之家iOS客户端“找车”栏目的价格区间选择控件,最终实现效果如下: 一、界面实现 *根据屏幕大小以及刻度的大小,宏定义需要用到的一些值 #define SCREENW [UIScreen mainScreen].bounds.size.width #define SCREENH [UIScreen mainScr…

Apache服务器部署(2)
签名CA证书 环境:server1:172.25.1.1 重置虚拟机 挂载yum源 [rootserver1 ~]# yum install mod_ssl -y //下载ssl模块 [rootserver1 ~]# yum install crypto-utils -y //安装加密软件 [rootserver1 ~]# genkey …

ASCII、Unicode、GBK和UTF-8字符编码的区别联系
一直对编码这块晕晕乎乎,今天终于看到一篇写的很清楚也很风趣的文章,转过来mark一下。 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的&…
【iOS】快速集成轮播控件
自己写的一个轮播控件,初始化后只要实现两个数据源方法,几行代码就能快速集成,支持本地图片和网络图片,支持点击事件,可定制播放速度、指示器颜色/位置、默认加载图等,效果: 1.下载地址…

Hibernate中get方法和load方法的区别
一、get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实就hibernate的一级缓存),如果没有,…