问题一:如果开发被动模式的ftp服务?

21号端口是命令连接端口,数据连接端口不固定

三步骤:

  (1)装载ftp追踪时的专用的模块 

     /lib/modules/$(uname-r)/kernel/kernel下有个trace模块     

     /lib/modules/$(uname-r)/kernel/net 下有个netfilter目录nf_conntrack_ftp.ko.xz 此模块 专门为ftp追踪RELATED连接的专用模块

    #modprode  nf_conntrack_ftp 手动装载此依赖模块

[root@localhost netfilter]# modinfo nf_conntrack_ftp.ko.xz
filename: /lib/modules/3.10.-.el7.x86_64/kernel/net/netfilter/nf_conntrack_ftp.ko.xz
alias: nfct-helper-ftp
alias: ip_conntrack_ftp
description: ftp connection tracking helper
author: Rusty Russell <rusty@rustcorp.com.au>
license: GPL
rhelversion: 7.4
srcversion: D43BF56A22E3D137BA1227B
depends: nf_conntrack
intree: Y
vermagic: 3.10.-.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: DA::7D:CA:7D:BE::AB::BD::BD:0C:4E::F4::B6:A4:9C
sig_hashalgo: sha256
parm: ports:array of ushort
parm: loose:bool

   

(2)放行请求报文:

    命令连接:NEW, ESTABLISHED

    数据连接:RELATED(第一次建立连接--这个连接不是新连接而是RELATED), ESTABLISHED(所有的后续通信)

只有对数据连接的第一次请求叫做RELATED;后续请求一旦达成了,双方建立起来对话,后续所有数据传输连接过程都是ESTABLISHED

 # iptables -A INPUT -d LocalIP -p tcp -m state --state RALETD,ESTABLISHED -j ACCEPT

 # iptables -A INPUT -d LocalIP -p tcp --dport 21  -m state --state NEW,ESTABLISHED -j ACCEPT

 (3)放行响应报文:ESTABLISHED

#iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

实例:

(1)yum -y install vsftp

ll /var/ftp

(2)cp /etc/issue /var/ftp/pub

(3)start vsftpd.service

(4)iptables-save > /root/iptables.  另存为

(5)不加防火墙规则,ftp是否可以访问

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -F

(6)iptables-restore < /root/iptables.  重新载入

(7)modprode  nf_conntrack_ftp
   lsmod | grep ftp
(8)放行ftp策略 这是新增规则
iptables -I INPUT -d 192.168.1.101 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 1 -p tcp -m state --state RALETD,ESTABLISHED -j ACCEPT

iptables -I OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

这是在原来规则上修改
iptables -R INPUT -2 -d 192.168.1.101 -p tcp -m multiport --dport 21,22,80 -m state --state NEW,ESTABLISHED -j ACCEPT


 二、如何保存及重载规则:

  保存规则至指定文件:

   iptables-save > /PATH/TO/SOMEFILE

  从指定文件重载规则:

   iptables-restore < /PATH/TO/SOMEFILE

CentOS 6 :

  service iptables save 相当于 iptables-save > /etc/sysconfig/iptables

  service iptables restart   比系统中的规则全清了,再把此路径下文件读进去

        相当于 iptables-restore <  /etc/sysconfig/iptables

CentOS 7:

  引入了新的iptables的前端管理服务工具:firewalld

    firewalld-cmd、firewalld-config

 注:在CentOS 7上使用iptables需要首先禁用firewalld

  systemctl disables firewalld.service

  systemctl stop firewalld.servicer

 PS:

1)、CentOS 6环境

service iptables start  没反应说明此前禁用了iptables

  如果此前禁用iptables那么就没有此文件/etc/sysconfig/iptables

可以先保存service iptables save 就会产生

再重启service iptables start

 

脚本:/etc/rc.d/init.d/iptables  (此脚本不会启动任何服务,虽然叫服务脚本,也支持start,但它没有启动任何进程;仅仅是让那些规则生效而已)

  另一个作用:此脚本能够在开机时候自动把我们某些所需要的模块装载进来;依赖于/etc/sysconfig/iptables/iptables-config此文件;

  把需要开机启动的模块写于此处,多个模块之间用空格隔开

关于firewalld:

https://www.ibm.com/developerworks/cn/linux/1507_caojh/index.html

三、网络防火墙

nmcli  管理命令

a、内网添加默认路由

route add default gw 192.168.20.1

b、中间主机添加一块网卡和地址

ip addr  add  192.168.20.1/24  dev en0number

c、中间主机打开网络转发功能: cat /proc/sys/net/ipv4/ip_forward

sysctl -w net.ipv4.ip_forward=1

d、外网主机添加路由指向

  route add -net 192.168.20.0/24 gw 192.168.100.9

在内网主机开启httpd服务:

目的:如何在中间主机添加规则来控制外网谁能访问,谁不能访问?

因为开了转发功能,所有的转发都会经过本机的forward链, 默认是ACCEPT

针对单个:

iptables -P FORWARD DROP

iptables -A FORWARF -d 192.168.20.2 -p tcp --dport 80 -j ACCEPT

iptables -A FORWARF -s 192.168.20.2 -p tcp --sport 80 -j ACCEPT

能访问web服务,但是ping不同;

优化:

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

iptables -A FORWARF -d 192.168.20.2 -p tcp -m multiport --dport 22,80 -m state --state NEW -j ACCEPT

练习:

主机防火墙:

    放行telnet,ftp,web服务,samba,  dns服务(查询和区域传送)

网络防火墙:打开核心转发

    放行telnet,ftp,web服务,samba,  dns服务(查询和区域传送)

dns : INPUT:53/tcp ;OUTPUT:53/tcp

samba : 137/udp  ,138/udp,139/tcp,445/tcp

四、nat表

nat : Network Address Translation  网络层+传输层

proxy :代理  应用层

nat :

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

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

响应地址的转换是由nat server自行决定的(内部有个nat表)

nat表三条链:使用位置

  PREROUTING : DNAT

  OUTPUT

  POSTROUTING : SNAT

#源地址转换:外网地址固定

 iptables -t nat - A POSTROUTING  -s LocalNET  ! -d LocalNet  -j  SANT  --to-source  ExtIP(外部IP)

外网地址不固定

 iptables -t nat - A POSTROUTING  -s LocalNET  ! -d LocalNet  -j  MASQUERADE

#目标地址转换:

  iptables -t nat -A PERROUTING  -d ExtIP  -p {tcp|udp|icmp} --dport  PORT -j  DANT  --to-destination  InterServerIP[:PORT]

e.g

iptables -t nat - A POSTROUTING  -s 192.168.20.0/24  ! -d  192.168.20.0/24  -j  SANT  --to-source 172.16.100.9

iptables -t nat -A PERROUTING  -d 172.16.100.9  -p tcp --dport 80  -j  DANT  --to-destination 192.168.20.2:80    #转发

#外网地址经常发生变换,无法使用--to-source确定某个地址

iptables -t nat - A POSTROUTING  -s 192.168.20.0/24  ! -d  192.168.20.0/24  -j  MASQUERADE   #地址伪装

SNAT 和 DNAT

SNAT:

假如我要让公司192.168.10.0/24段的地址都通过linux服务器的eth0 :123.123.123.123上网

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 123.123.123.123

DNAT

GATEWAY eth0:123.123.123.123 eth1:192.168.10.1 内网主机:192.168.10.10

要使访问123.123.123.123的80 自动跳到192.168.10.10的80端口上

iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 80 -j DNAT --to-destination 192.168.10.10:80

iptables -t nat -A POSTROUTING -p tcp -d 192.168.10.10 --dport 80 -j SNAT --to-source 192.168.10.1 (内网之间进行nat才加上)

第一条:将外部数据包的目的地址改到内网主机的指定端口
第二条:转发前,将外部源地址改为内网本地地址

https://www.cnblogs.com/harlanzhang/p/6188952.html

Iptables 之二扩展模块 nat的更多相关文章

  1. iptables 分析(二)

    原文:http://blog.chinaunix.net/uid-24207747-id-2622901.html do_command()函数分析 //负责整个用户输入的命令处理 int do_co ...

  2. iptables(二)iptables实际操作之规则查询

    如果你是一个新手,在阅读如下文章时,请坚持读到最后,读的过程中可能会有障碍,但是在读完以后,你会发现你已经明白了. 在进行iptables实验时,请务必在测试机上进行. 之前在iptables的概念中 ...

  3. LVS(二)NAT模型配置

    NAT配置模式 环境说明 LVS服务器(在eth0:0上设置VIP为:192.168.159.200/24) Eth0:192.168.159.133/24   GW:192.168.159.2 Et ...

  4. 【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制

    NAT是Network Address Translation的缩写,意即"网络地址转换". 从本质上来说,是通过改动IP数据首部中的地址,以实现将一个地址转换成还有一个地址的技术 ...

  5. 二、NAT(地址转换模式)

    刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择.NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网.其网络结构如下图所示: NA ...

  6. iptables nat及端口映射

    iptables nat及端口映射 发布: 2010-6-11 15:05 | 作者: admin | 来源: SF NetWork 门户网站 iptables 应用初探(nat+三层访问控制) ip ...

  7. iptables NAT规则【转】

    nat表需要的三个链: 1.PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT; ...

  8. Static NAT with iptables on Linux

    本文的名字取的比较有意义,因为本文并不是真的要讨论如何在Linux上使用iptables实现static nat!之所以这么命名本文,是想引起别人的注意,因为中文资料,以及国内的搜索引擎,基本上没有人 ...

  9. Linux iptables用法与NAT

    1.相关概念 2.iptables相关用法 3.NAT(DNAT与SNAT) 相关概念 防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP ...

随机推荐

  1. jdk安装以及Java环境配置

    jdk其实自己大一的时候就已经装过,java环境也配置过,但是随着后面学习的东西越来越多,要安装的软件也越来越多,一开始没有安装路径的概念,好多东西都放的很乱.接着这次自己复习java的机会,于是重新 ...

  2. spark源码阅读--SparkContext启动过程

    ##SparkContext启动过程 基于spark 2.1.0  scala 2.11.8 spark源码的体系结构实在是很庞大,从使用spark-submit脚本提交任务,到向yarn申请容器,启 ...

  3. 【转载】 C#使用Math.Round方法对计算结果进行四舍五入操作

    在C#的数值运算中,有时候需要对计算结果进行四舍五入操作,此时就可使用内置方法Math.Round方法来实现四舍五入操作,Math.Round方法有多个重载函数,支持设置有效位数进行四舍五入,如果没有 ...

  4. gitlab异地备份并验证MD5值

    最近公司发生了蛮多事情的,唉,咱也不管问啊,好好干活吧 需求 把gitlab的备份文件异地备份一份,备份无论失败还是成功通知某邮箱 实现思路 先rsync文件过去,判断rsync这个步骤有没有成功,失 ...

  5. 使用python库relate搭建LMS学习管理系统

    Relate is an Environment for Learning And TEaching Relate是在 Django上面构建的,可以快速搭建LMS系统,该系统可以方便学习管理和在线课程 ...

  6. 小米5s plus刷机

    1. 先去这里解锁 .http://www.miui.com/unlock/done.html 2.再去开发者选项里面,将手机账号和解锁手机绑定. 3.使用解锁工具解锁 4.下载安装奇兔刷机 http ...

  7. 微信小程序 时间戳 转化为 日期格式

    util.js  : function transTime(unixtime) { var dateTime = new Date(parseInt(unixtime) * 1000) var yea ...

  8. web-mini框架的基本实现(一)

    本篇主要介绍WSGI-web-mini框架的基本实现,以及什么是WSGI协议.对于浏览器的资源请求服务端是如何处理的等相关知识: 一.浏览器资源请求 我们知道浏览器和web服务器之间是基于HTTP协议 ...

  9. sqlite3入门之sqlite3_get_table,sqlite3_free_table

    sqlite3_get_table sqlite3_get_table函数原型: int sqlite3_get_table( sqlite3 *db, /* An open database */ ...

  10. Windows连接Linux服务器远程开发解决方案

    解决方案 vscode+Linux服务器 解决连接问题 vscode商店下载remote-ssh工具,然后进行配置. 这个网上依旧有很多详细的教程了,这里就不过多赘述. 配置免密登录 这一部分是我要重 ...