Linux中使用有状态防火墙实现FTP功能

首先大家要认清楚一个概念,使用FTP是从http代理出去,还是由socks代理或firewall上打开一个口转发。从http代理出去的FTP,实际上使用的是http代理程序,象最常用的squid,是http/https代理,但是它也能代理ftp请求。当你打开浏览器登陆ftp站点时,使用的就是http代理程序来处理ftp的问题。而有些程序只能设置成socks或firewall代理,象Cuteftp,wu-ftp和dos下的FTP。此类的代理才是标准的FTP代理。

本文假设大家对netfilter技术已经有了一定了解,介绍利用netfilter的有状态功能在inux2.4内核上实现FTP。

系统环境:

linux7.2,安装了iptable,squid,有两块网卡:

eth0:x.x.x.x 接internet,

eth1:192.168.0.1 接内网。

firewall相关规则:

  ##Ismod the firewall modules *加载模块
  modprobe ip_tables
  insmod ip_conntrack
  insmod ip_conntrack_ftp
  insmod ip_nat_ftp

关于有状态功能,重点在于后三个模块:ip_conntrack模块能够使防火墙具有连接跟踪能力。(通过输入 "cat /proc/net/ip_conntrack" 可以查看您的机器参与的活动网络连接。)加载这个模块后,基本上所有有状态的返回包都能识别,例:telnet,http,QQ,mail,ping,dns等。

实际上,加载了ip_conntrack模块,ftp已经能够登陆,并能使用象pwd,cd等命令,但当使用ls命令显示文件内容时,就会timeout。原因在于显示文件列表的包防火墙无法识别,就会进入默认策略----禁止,此时就需要加载ip_conntrack_ftp模块。

ip_conntrack_ftp模块使防火墙能够识别FTP某类特殊的返回包。如果防火墙上对所有出去的返回包作了伪装,就需要加载ip_nat_ftp模块。ip_nat_ftp模块在出去的包作了伪装以后,必须加载,否则防火墙无法知道返回的包该转发到哪里。  ##Define the policy *定义默认规则
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT ACCEPT
  
  #MASQUERADE
  $IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

所有从局域网出去的包伪装。  #accept lan use ftp *允许所有局域网用户使用FTP
  iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p tcp --dport 20 -j ACCEPT
  iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p tcp --dport 21 -j ACCEPT
  iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p udp --dport 20 -j ACCEPT
  iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p udp --dport 21 -j ACCEPT
  打开ftp的20,21端口
  
  #accept come back packets from INTERNET
  iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

允许有状态的返回包转发。

关于netfilter有状态基础知识,请查看相关资料。

时间: 2024-11-05 04:48:18

Linux中使用有状态防火墙实现FTP功能的相关文章

Linux中查看socket状态(转)

Linux中查看socket状态:cat /proc/net/sockstat #(这个是ipv4的) sockets: used 137 TCP: inuse 49 orphan 0 tw 3272 alloc 52 mem 46UDP: inuse 1 mem 0RAW: inuse 0 FRAG: inuse 0 memory 0 说明:sockets: used:已使用的所有协议套接字总量TCP: inuse:正在使用(正在侦听)的TCP套接字数量.其值≤ netstat –lnt |

如何在LINUX中利用wu-ftp架设一台FTP服务器

FTP服务可以根据服务对象的不同分为两类:一类是系统FTP服务器,它只允许系统上的合法http://www.aliyun.com/zixun/aggregation/6579.html">用户使用: 另一类是匿名FTP服务器,Anonymous FTP Server,它使用任何人都可以登录到FTP服务器上去获取文件.下面,小编就给大家介绍一下如何在LINUX系统中利用wu-ftp架设一台FTP服务器. 一.选择和安装FTP服务器软件 如果你在安装LINUX系统的时候,在选择启动进程的时候选

linux中mrtg监控juniper防火墙流量配置

 一.juniper开启SNMP 这里开启SNMP的步骤和昨天提到配置方法一样,这里略过. 二.安装配置mrtg 1.安装 mrtg的官方页面为http://oss.oetiker.ch/mrtg/ ,最新版本是2.17.4 .可以选择使用源码包编译安装,也可以选择系统源安装 .  代码如下 复制代码 #yum -y install mrtg mrtg-libs 需要注意的是mrtg也有windows版的,由于个人习惯了使用linux这里仍以centos/redhat为例. 2.cfgmaker

Linux中统计TCP状态命令

一行简单的命令就可以,比如我们要80端口的各个TCP链接状态:  代码如下 复制代码 netstat -n | grep `hostname -i`:80 |awk '/^tcp/{++S[$NF]}END{for (key in S) print key,S[key]}'

linux中给ssh命令加上自动完成功能

于是我回归到了使用Linux的命令行终端,通过创建多个alias来满足不同的ssh参数的情况,比如有的需要用key,有的需要用密码:再将所有的服务器添加到某个文本文件中以列表的方式进行更新,同时将其内容作为这些alias的自动完成列表,用起来感觉非常不错. 具体配置: 定义alias  代码如下 复制代码 [dong.guo@heydevops ~]$ vim .bashrc alias sshads='ssh -t -i /home/dong.guo/workspace/sshkeys/key

教你使用vsftpd架设Linux中的FTP:测试

教你使用vsftpd架设Linux中的FTP:测试 配置安装完成之后,现在我们需要对vsftpd进行测试一下,看是否正常! 打开防火墙的21端口 [root@centos tmp]# vi /etc/sysconfig/iptables 添加如下规则: -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT 重启防火墙应用新规则 [root@centos tmp]# service iptables restartiptables:清除防火墙规则:&http://

linux中centOS防火墙iptables的设置教程

  1.安装iptables防火墙 怎么知道系统是否安装了iptables?执行iptables -V,如果显示如: iptables v1.3.5 说明已经安装了iptables. 如果没有安装iptables需要先安装,执行: yum install iptables 在Linux中设置防火墙,以CentOS为例,打开iptables的配置文件: vi /etc/sysconfig/iptables   通过/etc/init.d/iptables status命令查询是否有打开80端口,如

linux中如何编写防火墙脚本

防火墙脚本实际上就是个shell脚本,使用shell脚本来设置防火墙策略的优点在于: 可以预先加载一些必要的内核模块.设置环境参数: 可以使用变量和灵活控制程序结构,便于脚本文件的重用和移植. 常见的防火墙脚本通常包括以下部分 1.设置网段.网卡.IP地址等变量 将防火墙主机的网卡.IP地址.区域网段.iptables命令的路径等定义为变量,便于对脚本程序的维护和移植使用. 2.加载包过滤相关的内核模块 在防火墙脚本文件中预先加载需要用到的内核模块,以确保用户设置的防火墙规则能够正常工作. 本文

实现Linux中Mysql数据库自动备份并上传到远程FTP服务器

这篇文章很有分享价值,因为我们在实际的生产环境中需要将数据库进行自动备份,然后上传到指定的位置,当然也可以像以下文章中所讲的一样,上传到你指定的FTP服务器中,从而实现Mysql数据库自动备份并上传到远程FTP服务器的部署,在Linuxhttp://www.aliyun.com/zixun/aggregation/31093.html">技术交流群中,也有朋友会遇到这方面的问题,可以将此文分享给群友共益. 注意:任何的操作都会具有风险性,请在本机实际测试通过之后再部署到服务器环境,这样即熟