iptables实现网络防火墙及地址转换
iptables主机防火墙功能及常用命令
FSM:Finite State Machine 有限状态机
客户端:closed -->syn_sent -->established --> fin_wait_1 -->find_wait_2 --> timewait(2MSL)
服务器:closed -->listen -->syn_rcvd -->establised --> close_wait -->last_ack
-m state:追踪连接状态
模板:内存中会维持一个空间
NEW
ESTABLISHED
RELATED
INVALID
在前端的服务器中尽量不要开启追踪连接
iptables子命令
规则:-A,-I,-D,-R
链:-N,-X,-F,-Z,-E,-P -S
通:默认 DROP
堵:默认ACCEPT
显示:-L -S
-L
-n -v -x --line-numbers
规则定义:iptables -t table -A|-I|-R chain 匹配条件 -j target
匹配条件
通用匹配:-s -d -i -o -p
扩展匹配
隐含扩展
-p tcp
--sport --dport --tcp-flags
--syn
-p udp
--sport --dport
-p icmp
--icmp-type
echo-request 8
echo-reply 0
显示扩展:
-m state
--state
-m multiport
--sprots, --dports, --ports
-m iprange
--src-range, --dst-range
-m string
-algo {bm|kmp} --string --hex-string
-m connlimit
! --connlimit-above
-m limit
--limit n(/second|/minute|/hour|/day), --limit-burst
-m time
--datestart --datestop
--timestart -- timestop
--weekdays
-j
ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNST,MASQUERADE,MARK,RETURN,自定义链
四表:raw mangle nat filter
五链:PREROUTING INPUT FOEWARD OUTPUT POSTOUTING
规则保存和恢复:iptables-save iptables-restore
主机防火墙:INPUT OUTPUT
网络防火墙:FORWARD
路由:
NAT:
/proc/sys/net/ipv4/ip_forward
地址属于内核,地址当前属于主机的都给予响应
路由:对Linux主机而言,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启路由
路由表的生成
静态:手动添加
动态:基于路由协议学习,RIP2 OSPF
NAT:网络地址转换
A:10
B:172.16-172.31
C:192.168.0-192.168.255
NAT: 工作于传输层和网络层
过载技术
Basic NAT:静态NAT
NAPT:动态NAT,网络地址端口转换
源地址转换:SNAT 用于内网主机访问互联网
目标地址转换:DNAT
让互联网上主机访问本地内网中的某服务器上的服务(发布)
iptables基于SNAT和DNAT这两个目标实现地址转换技术
-j SNT --to-source SIP
规则添加:POSTROUTING链
-j MASQUERAADE 动态获取
-j DNAT --to-destination DIP{:PORT}
支持端口映射
基于nat表
PREROUTING
POSTROTING
OUTPUT
Proxy(代理):工作在应用层
举例说明:
网络拓扑
简单网络访问路由转发功能
172.16.1.10能ping通192.168.8.40,但不能ping通192.168.8.39
192.168.8.39能Ping通172.16.1.254,但不能ping通172.16.1.10
原因:linux中网卡程序都加载于系统内核中,运行在上面的网卡程序会被系统认为是同一个设备
配置开启路由转发功能
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
让配置生效
# sysctl -p
也可以,采用如下命令临时生效
# sysctl -w net.ipv4.ip_forward=1
验证
# cat /proc/sys/net/ipv4/ip_forward
windows客户端添加路由,也可以实现访问
route add 172.16.1.0 mask 255.255.255.0 172.16.1.254
将转发规则屏蔽,则无法访问
# iptables -P FORWARD DROP
对常见服务的放行实例
放行192.168.8.39中80口的访问
# iptables -A FORWARD -s 172.16.1.10 -d 192.168.8.39 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -d 172.16.1.10 -s 192.168.8.39 -p tcp --sport 80 -j ACCEPT
放行172.16.1.0/24网段对192.168.8.0网段22号端口的访问
# iptables -A FORWARD -s 172.16.1.0/24 -d 192.168.8.0/24 -p tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -s 192.168.8.0/24 -d 172.16.1.0/24 -p tcp --sport 22 -j ACCEPT
重新编写规则
# iptables -F FORWARD
# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
# iptables -R FORWARD 2 -d 192.168.8.39 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
nat规则举例
初始化:
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
//需要accept否则将无法通过路由转发任何数据包
# iptables -P FORWARD ACCEPT
模拟dnat功能之互联网访问局域网服务器
外网端:172.16.1.10
内网端:192.168.8.39
//将访问172.16.1.254 80端口的服务映射到8.89的80端口上
# iptables -t nat -F
# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.8.39
在目标8.39的web日志中可以看到是172.16.1.10访问的,而不是192.168.8.40路由访问
禁止172.16.1.10的IP访问
# iptables -I FORWARD -s 172.16.1.10 -j REJECT
通过外网地址172.16.1.254的22022端口访问192.168.8.39的22号端口(相当于端口映射)
# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 22022 -j DNAT --to-destination 192.168.8.39:22
模拟snat功能之局域网访问互联网应用
172.16.1.10 和 172.16.1.254的eth1都放置于 vmnet2虚拟交换环境中
充当路由功能的机器
外网接口:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.8.15
BROADCAST=192.168.8.255
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
NETWORK=192.168.8.0
DNS配置
/etc/resolve.conf
nameserver 192.168.8.251
内网接口:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.1.254
BROADCAST=172.16.1.255
NETMASK=255.255.255.0
NETWORK=172.16.1.0
内网的机器:
172.16.1.10
DNS:192.168.8.251
GAWEWAY:172.16.1.254
配置192.168.8.251
# vim /etc/sysctl.conf
打开防火墙转发功能
net.ipv4.ip_forward = 1
sysctl -p 使配置生效
在防火墙上添加规则,对来自内网 172.16.1.0网段的机器进行源地址转换
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 192.168.8.15
测试在内网机器中可以访问互联网
iptables实现网络防火墙及地址转换的更多相关文章
- iptables详解(11):iptables之网络防火墙
我们一起来回顾一下之前的知识,在第一篇介绍iptables的文章中,我们就描述过防火墙的概念,我们说过,防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防 ...
- 防火墙之地址转换SNAT DNAT
一.SNAT源地址转换. 1.原理:在路由器后(PSOTROUTING)将内网的ip地址修改为外网网卡的ip地址. 2.应用场景:共享内部主机上网. 3.设置SNAT:网关主机进行设置. (1)设置i ...
- centos6中iptables单机网络防火墙的使用
概述: iptables:基于软件的形式实现的一种防火墙的软件程序 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是 ...
- Iptables防火墙NAT地址转换与端口转发
开启系统转发功能: [root@localhost /]# vim /etc/sysctl.conf # Generated by iptables-save v1.4.7 on Thu May 12 ...
- iptables进行DNAT(目标地址转换)
前言:对于Linux服务器而言,一般服务器不会直接提供公网地址给用户访问,服务器在企业防火墙后面,通常只是暴露一个公网给用户,下面已80端口进行实现. 演示环境:VM (1)host: 172.16. ...
- 网络防火墙和NAT地址转换
网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...
- 【iptables】linux网络防火墙-iptables基础详解(重要)
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...
- linux网络防火墙-iptables基础详解
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙 ...
- 【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作
1.黑白名单当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单&qu ...
随机推荐
- 【洛谷P4180】严格次小生成树
题目大意:给定一个 N 个顶点,M 条边的带权无向图,求该无向图的一个严格次小生成树. 引理:有至少一个严格次小生成树,和最小生成树之间只有一条边的差异. 题解: 通过引理可以想到一个暴力,即:先求出 ...
- apigateway-kong(六)认证
到上游服务(API或微服务)的流量通常由各种Kong认证插件的应用程序和配置来控制.由于Kong的服务实体(Service Entity)代表自己的上游服务的1对1映射,最简单的方案是在选择的服务上配 ...
- hdu 2874(裸LCA)
传送门:Problem 2874 https://www.cnblogs.com/violet-acmer/p/9686774.html 改了一晚上bug,悲伤辣么大,明天再补详细题解 题解: 题目中 ...
- C语言实现KMP模式匹配算法
next: /*! * Description: * author scictor <scictor@gmail.com> * date 2018/7/4 */ #include < ...
- Tony的口胡呼呼(。-ω-)zzz
三分 给定平面内 \(n <= 2000\) 个节点, 求平面内一点使得到所有点的欧几里得距离和最小 确定 \(y\) 轴时 \(x\) 轴满足单峰函数 \(x\) 轴同理 三分套三分即可 深度 ...
- Python基础【day03】:文件操作(七)
零.本节内容 1.文件常用操作汇总 2.打开文件 3.操作文件 4.关闭文件 一.文件常用操作汇总 二.打开文件 1.普通打开模式 r,英文:read,只读模式(默认) w,英文:write,只写模式 ...
- div中让内容能不换行就尽量不换行.【纯原】
div中让内容能不换行就尽量不换行,部分左对齐,部分右对齐. <html> <head> <title>九歌·少司命</title> <style ...
- UEditor百度编辑器,工具栏自定义添加一个普通按钮
根据网上前辈提供的,还真的不错,下面也整理一下 添加一个名叫“macros”的普通按钮在工具栏上: 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“macros” ...
- 用Python中的re做信息筛选
背景 平时工作中,我们经常会处理大量的元数据(Raw Data),而一般的文件编辑器只能一次查询一个关键字,这就难以连续的分析元数据,比如分析产品日志文件(log),日志可能包括很多informati ...
- Java之Jacob调用COM接口DLL-----------------------------------dm。dll
用Java控制windows了,嗯,低层次按键模拟,可控制游戏,内存也不在话下. 一.环境介绍 1.myeclipse8.5 2.著名按键插件dm.dll 32bit.此插件实现COM接口,百度百科 ...