我的vsftpd 罢工了

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
abbott
帖子: 435
注册时间: 2007-07-11 22:45

我的vsftpd 罢工了

#1

帖子 abbott » 2009-08-03 21:15

情况是这样的,
我的机器具有两个网卡,eth0 eth1, 所连接的网络不互通。
我的机器扮演NAT, 为192.9.206.0/24的用户提供NAT网关服务。
说明,我的公网IP 是 59.72.122.49

采用的防火墙策略如下:
# Set the key parameters
EXTIF="eth0"
INIF="eth1"
INNET="192.9.206.0/24"
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH EXTIF INIF INNET

# Configuration Network

ifconfig $EXTIF down
ifconfig $INIF down
ifconfig $EXTIF hw ether 00:22:B0:61:A6:B2
ifconfig $EXTIF 59.72.122.49 netmask 255.255.255.0
ifconfig $INIF 192.9.206.50 netmask 255.255.255.0
ifconfig $INIF up
ifconfig $EXTIF up
route add -net 192.9.0.0 netmask 255.255.0.0 gw 192.9.206.254 dev $INIF
route add default gw 59.72.122.254 dev $EXTIF

# Enable ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Load Appropriate Module for FireWall

modprobe ip_tables > /dev/null 2>&1
modprobe iptable_nat > /dev/null 2>&1
modprobe ip_nat_ftp > /dev/null 2>&1
modprobe ip_nat_irc > /dev/null 2>&1
modprobe ip_conntrack > /dev/null 2>&1
modprobe ip_conntrack_ftp > /dev/null 2>&1
modprobe ip_conntrack_irc > /dev/null 2>&1
#
# Attention.
# I don't understand ip_nat_irc here.

# Flush the default rules
# And Set the new default rules
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -Z -t nat
# Flush the original rules

/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
# Set the new rules


# Allow the trusted network
# The local loopback interface
/sbin/iptables -A INPUT -i lo -j ACCEPT

# The private network
# Allow all the data from private network
/sbin/iptables -A INPUT -i $INIF -j ACCEPT

# Starting NAT Server
#echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE

#/sbin/iptables -t nat -A POSTROUTING -s $INNET -o $INIF -j MASQUERADE
# No need for the private network


/sbin/iptables -A FORWARD -s $INNET -j ACCEPT

# Enable NAT work in High Efficiency

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Allow Service
/sbin/iptables -A INPUT -p tcp -i $EXTIF --dport 8022 -j ACCEPT #SSH
/sbin/iptables -A INPUT -p tcp -i $INIF --dport 8022 -j ACCEPT #SSH
/sbin/iptables -A INPUT -p tcp -i $EXTIF --dport 8021 -j ACCEPT #FTP
/sbin/iptables -A INPUT -p tcp -i $EXTIF --dport 8020 -j ACCEPT #FTP
/sbin/iptables -A INPUT -p udp -i $EXTIF --dport 1194 -j ACCEPT #OpenVPN
/sbin/iptables -A INPUT -p udp -i $EXTIF --dport 1195 -j ACCEPT #OpenVPN
/sbin/iptables -A INPUT -p tcp -i $EXTIF --dport 4999 -j ACCEPT # aMule
/sbin/iptables -A INPUT -p udp -i $EXTIF --dport 4999 -j ACCEPT # aMule


# About the NAT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -o tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
iptables -A FORWARD -o tap+ -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o $EXTIF -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o $INIF -j MASQUERADE

iptables -t nat -A POSTROUTING -s 10.9.9.0/24 -o $EXTIF -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.9.9.0/24 -o $INIF -j MASQUERADE

iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
#iptables -t nat -A POSTROUTING -s $INNET -o $INIF -j MASQUERADE
# no need for the private network

# Enable virtual IP from VPN client


# Forward the package to private network
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 3389 -j DNAT --to 192.9.206.130:3389 #Win Remote Desktop
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 20 -j DNAT --to 192.9.206.130:20 # FTP
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 21 -j DNAT --to 192.9.206.130:21 # FTP
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 8085 -j DNAT --to 192.9.206.130:8085 # World of Warcraft
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 8085 -j DNAT --to 192.9.206.130:8085 # World of Warcraft

iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 4662 -j DNAT --to 192.9.206.25:4662
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 4672 -j DNAT --to 192.9.206.25:4672
# About eMule for my Slave

iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 4166 -j DNAT --to 192.9.206.243:4166
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 4176 -j DNAT --to 192.9.206.243:4176
# About eMule for my Laptop

iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 4666 -j DNAT --to 192.9.206.130:4666
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 4668 -j DNAT --to 192.9.206.130:4668
# About eMule for Sunlei WinXP

iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 30701 -j DNAT --to 192.9.206.243:30701
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 30701 -j DNAT --to 192.9.206.243:30701

iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 30706 -j DNAT --to 192.9.206.243:30706
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 30706 -j DNAT --to 192.9.206.243:30706


采用的FTP的配置:
[root@master vsftpd]# cat vsftpd.conf
### This configuration is only for the Real user ###
anonymous_enable=NO
# Disable the anonymous user

local_enable=YES
write_enable=YES
local_umask=022

# the local user can create new file and directory

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
# About the user, the related file must exist
# user in /etc/vsftpd.user_list can use FTP

use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
#connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
listen_port=8021
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt
# About the Server


chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
# By default the user can only stay in their home directory
# but user in /etc/vsftpd.chroot_list file, can go every in the system

local_max_rate=10000000000
# control the speed, in Bytes/s
# 2100000 = 2MB/s

max_clients=10
max_per_ip=5
# about the client

ls_recurse_enable=NO

所有的一切都工作OK。

比如FTP,
无论是通过ftp://tang:tang@192.9.206.50:8021
还是ftp://tang:tang@59.72.122.49:8021都可以登录的。
公网的用户通过我的公网IP登录,NAT后面的机器,通过192地址登录。

今天忽然发现,还是上面的配置,结果出问题了。
通过公网不能访问到我的vsftpd,只能通过内网访问到。

我对比了/etc/rc.local vsftpd.conf /etc/hosts.allow /etc/hosts.deny ,把现在的文件和系统配置好,运行OK的备份文件对比了一下,
么有任何却别....

可是现在通过公网登录FTP 提示信息是:
[右] 正在连接到 59.72.122.49 -> IP=59.72.122.49 PORT=8021
[右] 已连接到 59.72.122.49
[右] 220-Welcome Back!
[右] 220-My Friend!!!
[右] 220-Have a Good Day!!!
[右] 220-To Be Good To YourSelf....
[右] 220
[右] USER tang
[右] 331 Please specify the password.
[右] PASS (隐藏)
[右] 230 Login successful.
[右] SYST
[右] 215 UNIX Type: L8
[右] FEAT
[右] 211-Features:
[右] EPRT
[右] EPSV
[右] MDTM
[右] PASV
[右] REST STREAM
[右] SIZE
[右] TVFS
[右] 211 End
[右] CWD /
[右] 250 Directory successfully changed.
[右] PWD
[右] 257 "/"
[右] TYPE A
[右] 200 Switching to ASCII mode.
[右] PASV
[右] 227 Entering Passive Mode (59,72,122,49,105,54)
[右] 正在打开数据连接 IP: 59.72.122.49 端口: 26934
[右] 数据 Socket 错误: 连接超时
[右] 列表错误
[右] PASV
[右] 227 Entering Passive Mode (59,72,122,49,183,150)
[右] 正在打开数据连接 IP: 59.72.122.49 端口: 46998
[右] 数据 Socket 错误: 连接超时
[右] 列表错误
[右] PASV 模式失败, 尝试 PORT 模式。
[右] 监听端口: 1938, 等待连接。
[右] PORT 192,168,2,3,7,146
[右] 500 Illegal PORT command.
[右] 列表错误

同时 通过内外登录, 是OK的,
[右] 正在连接到 abbott -> IP=192.9.206.50 PORT=8021
[右] 已连接到 abbott
[右] 220-Welcome Back!
[右] 220-My Friend!!!
[右] 220-Have a Good Day!!!
[右] 220-To Be Good To YourSelf....
[右] 220
[右] USER abbott
[右] 331 Please specify the password.
[右] PASS (隐藏)
[右] 230 Login successful.
[右] SYST
[右] 215 UNIX Type: L8
[右] FEAT
[右] 211-Features:
[右] EPRT
[右] EPSV
[右] MDTM
[右] PASV
[右] REST STREAM
[右] SIZE
[右] TVFS
[右] 211 End
[右] CWD /home/abbott
[右] 250 Directory successfully changed.
[右] PWD
[右] 257 "/home/abbott"

为什么公网登录不了呢?
系统一直工作OK的。
只是发现我的amule工作在high ID之后,amule 频繁的自动关闭,
然后这一周内,gnome也无辜崩溃过三次: 键盘没有相依,什么窗口都打不开,只能拔电源....

这个是怎么回事呢?

另外,我的系统安装了openvpn server 客户端工作OK,网络OK。

服务启动里面也确认系统boot是就启动它,但是启动的时候,总告诉我,openvpn start fialed....

我不得不把启动vpn的指令写如/etc/rc.local中.....

大侠能指点一下吗?

我使用Linux的原因是,我不想重灌系统,
我的系统自从我配置好之后,做了一周的测试,各项都满足我的工作要求,
然后我做了配置备份。
之后,除了干活之外,系统没有进行任何升级.....
系统安全上,我只允许几个特定的IP才能访问我的机器,
当然这个也不能确保万无一失, 但是我确定,我所处的网络环境中,还没有人能突破/etc/hosts.allow /etc/hosts.deny这两个文件的检测吧?
而且我对外开启的端口和服务,就那么几个.....

依旧还是那个配置文件,怎么就不工作了呢?
大侠指导一下.....
angelus
帖子: 445
注册时间: 2007-08-27 17:31

Re: 我的vsftpd 罢工了

#2

帖子 angelus » 2009-08-03 22:04

说实话,太乱了
你的netfilter/iptables规则写的,真让人无奈。

如果你想让自己的ftp工作在防火墙之后,就需要进行三步
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

意思很明显,内网用户可以登陆是因为对内网来说,防火墙是通明的,可以忽略
但来自外网的包就必须经过防火墙,因为FTP是复杂通信协议(这里复杂只是针对需要建立2条tcp连接来说的)
就必须加载特别为ftp写的模块与连接追踪扩展模块以识别RELATED状态的封包,让其能够通过防火墙!
只加载模块而不写规则是没用的,所以,需要加上第三行,放行所有转发的ESTABLISHED与RELATED状态的封包!


[右] 227 Entering Passive Mode (59,72,122,49,183,150)
[右] 正在打开数据连接 IP: 59.72.122.49 端口: 46998
[右] 数据 Socket 错误: 连接超时

根据你的ftp连接状态,可以很明显看出是使用被动模式,最关键的一步是ftp服务器随机打开port 46998,等待客户端连接,而发生的timeout,而防火墙上并只开放了21,20端口的访问,所以那个随机port是不可能通过防火墙的,所以数据信道不可能建立成功,而登陆却是成功的,这种情况下,不可能让防火墙打开所有可能被随机出的端口。
因为通信信道的建立,触发了数据信道建立,这样的情况可以看做是服务器的封包使客户端被动产生了新的tcp连接,而这类被动触发的连接,在防火墙的识别状态为RELATED,那么只要开放RELATED状态封包可以通过就行了。
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#3

帖子 abbott » 2009-08-03 23:29

angelus, angelus, angelus, angelus,
回复 angelus

我不明白的事情是:

1 我采用上面的我贴出来的配置文件, 这个Server运行了大概3个月,没有任何问题, 我是说采用上面的配置文件,服务器无论从内网,公网都可以顺利登录的。 知道一周前,公网登录的时候,会出现卡机现象,卡一会,刷新几下也可以登录的。可是现在公网绝对登录不了啦, 这期间,没有更新过系统, 没有修改过配置文件。 而且我检测了一下,现在的配置文件,和以前的文件一样。

2 对于vsftpd, 我有点疑惑了, 我在配置文件中,有下面的几行:
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
listen_port=8021
tcp_wrappers=YES

不太确定这些如何使用:
但是目前,必须通过类似的方式连接ftp:
ftp://tang:tang@192.9.206.50:8021

我有点不太明白这里的TCP下的端口协议了?
FTP 记忆中是通过默认的20端口建立连接,通过21端口传递数据 是这么回事吧?
为什么我使用客户端连接时(我指定的端口是8021,我配置中做了修改)
依旧显示的是随机打开的端口呢? 如果我没有对错的话,应该是服务器随机打开一个随机端口(> 1024),然后和客户端连接?
这样一来,对这个端口工作模式就有点迷糊了。
到底是客户端提供随机端口,还是服务器提供随机端口?

我刚刚尝试把你说的指令放到iptables.rules里面, 结果没有得到预期的目的....

奇怪的是,从头到尾,都是同样的配置文件,为何就不工作了呢?

希望能和 angelus 你多多交流,
我只是工作中用linux系统,处于工作上高效方便的考虑,
Linux方面,所接触的 只是与我自己工作中能用到的相关的,
我配置FTP只是为自己服务, smb也是, 但是现在不工作了。。。

我在工作室以外的地方,不能直接进入实验室的内网,
只能通过VPN拨入,
可是通过这么折腾之后,网速有一定的影响,
字符界面很OK

有时候需要通过图形界面做一些检测,就有麻烦了....

目前没有找到处理方法, 只能先拨通vpn,然后再通过vpn直接通过内网连接ftp啦....

谢谢你的关注...
我的邮件是abbott.cn@gmail.com

希望和你多多交流.....


提供一个参考信息。
我使用的系统是centOS 5.3 64bit.
这个系统似乎有毛病:

1 就是我上面遇到的问题。 如果说我的iptables有毛病,那么刚刚开始的时候,ftp无论是内外还是公网那个都是OK的。 运行了一段时间,大概3个月不到,就有问题了....

2 我们研究所使用一个大型cluster,系统也是centOS 4.7
我们需要通过pbs把东西提交到节点上计算。 正常的时候,我们可以通过rcp 指令,把计算节点上的数据拷贝出来。。。
但是现在不行了,使用rcp会遭到警告:
poll: protocol failure in circuit setup
rcmd: cu33-c: Connection reset by peer

管理员确定没有开启任何防火墙和安全措施.....
很迷茫, 怎么会这样呢?
angelus
帖子: 445
注册时间: 2007-08-27 17:31

Re: 我的vsftpd 罢工了

#4

帖子 angelus » 2009-08-04 11:40

不好意思,没看到你这一句
listen_port=8021
如果你使用的不是标准的21端口的话,加载连接追踪扩展的ftp模块时候需要加上参数
modprobe ip_conntrack_ftp ports=8021
意思是让连接追踪扩展模块监听所有8021端口上的所有数据包,如果有收到服务端发给客户端的随机端口号的时候,就知道稍后有客户端会连接到服务器的随机端口,而把这条连接上的包都归类为RELATED状态!

/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
根据语法的优先匹配,这条规则应该加入到链的第一条,否则是没用的,因为根本就不会执行到这一条就accept了

加点题外的,你的nat规则中,PREROUTING没有指定封包流向。
这在iptalbes上是语法错误的!
最好严格控制Filter表中的input链,把那些开放的端口去掉,因为你的服务不是建立在防火墙主机上,所以写那些服务端口可以accept是没有任何用处的!
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#5

帖子 abbott » 2009-08-05 8:16

谢谢 angelus
这几日忙着整理东西,刚刚有时间看这个 谢谢了先,

iptable rule是自己瞎写的,
还需要多多想你请教的。

我的机器是这样的:
具有两个网卡,
eth0 公网
eth1 内网
这个机器作为NAT网关,
起上运行,openvpn(运行在公网IP), sftpd(通过内外网络都可访问),sshd(通过内外网络都可访问)
swows
帖子: 14
注册时间: 2009-07-16 15:53
来自: 北京
联系:

Re: 我的vsftpd 罢工了

#6

帖子 swows » 2009-08-05 10:35

学习
Taskcity --> 全球领先的专业软件项目外包平台!
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#7

帖子 abbott » 2009-08-05 10:42

angelus 写了:不好意思,没看到你这一句
listen_port=8021
如果你使用的不是标准的21端口的话,加载连接追踪扩展的ftp模块时候需要加上参数
modprobe ip_conntrack_ftp ports=8021
意思是让连接追踪扩展模块监听所有8021端口上的所有数据包,如果有收到服务端发给客户端的随机端口号的时候,就知道稍后有客户端会连接到服务器的随机端口,而把这条连接上的包都归类为RELATED状态!

/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
根据语法的优先匹配,这条规则应该加入到链的第一条,否则是没用的,因为根本就不会执行到这一条就accept了

加点题外的,你的nat规则中,PREROUTING没有指定封包流向。
这在iptalbes上是语法错误的!
最好严格控制Filter表中的input链,把那些开放的端口去掉,因为你的服务不是建立在防火墙主机上,所以写那些服务端口可以accept是没有任何用处的!
找了本书正在看呢!!!
加点题外的,你的nat规则中,PREROUTING没有指定封包流向。
这在iptalbes上是语法错误的!
你说的是这些指令吧?
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 3389 -j DNAT --to 192.9.206.130:3389 #Win Remote Desktop
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 20 -j DNAT --to 192.9.206.130:20 # FTP
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 21 -j DNAT --to 192.9.206.130:21 # FTP
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 8085 -j DNAT --to 192.9.206.130:8085 # World of Warcraft
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 8085 -j DNAT --to 192.9.206.130:8085 # World of Warcraft

封包流向? 是不是应该写成这样的?
iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 3389 -j DNAT --to 192.9.206.130:3389 #Win Remote Desktop
或者是? 这个封包流向,实在不明白?请指教....

最好严格控制Filter表中的input链,把那些开放的端口去掉,因为你的服务不是建立在防火墙主机上,所以写那些服务端口可以accept是没有任何用处的!
这里,你说我的服务不在防火墙主机上,所以需要删除那些我自己写的开放端口服务的规则。 可是,我的这个主机是采用双网卡配置,本身作NAT网关的。 关于机器的具体详细的配置,我给你站内信件了。 烦请你帮我分析一下.

刚刚仔细看了一下vsftpd的配置文档,
发现我需要指定服务为被动模式.....
诚如你所说,
如果是要开启ftp的被动模式,
必须在服务器上打开一些端口范围,
以便客户端的连接。。。
这个正在调试中....

和你交流 收获颇多...

有时候,一个人瞎看,遇到点问题,很多时候,不知道应该看那个方面,这个实在很令人头疼的... 希望你多多指点... 期望今后能和你多多交流....
angelus
帖子: 445
注册时间: 2007-08-27 17:31

Re: 我的vsftpd 罢工了

#8

帖子 angelus » 2009-08-05 12:32

不好意思,没说明封包流向
其实就是包的流动方向,比如有两块网卡,一个包从eth0进入,从eth1出去,那么这个包的流动路径就是
eth0---routing tables----eth1 这就是包的流向。
在nat中,必须要指定包的流向,因为PREROUTING,POSTROUTING 并不是固定在特定的一侧
比如:包从eth0进入,那么PREROUTING就在eth0这一边
包从eth1进入,那么PREROUTING就在eth1这一边
所以要使用PREROUTING改变包的目的端(DNAT,NAPT),就要指明封包进入的接口,-i eth0
使用POSTROUTING改变包的来源端(SNAT),就要指明封包出去的接口,-o eth1
否则会提示iptables语法错误.

因为你防火墙本机只开放了ssh服务,所以在input链中只需要让特定几个ip可以通过22端口连接本机ssh。
(最好使用mac模块绑定特定ip的mac地址,因为源ip可以很简单伪造)
如:(注意规则的顺序)
iptables -P INPUT DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.12 -m mac --mac-source 00:03:33:44:55:66 -j ACCEPT
就只允许特定来源ip与对应的mac可以访问!达到锁mac地址的目的

至于filter表的output链,原则上是需要严格控制的,比如下边的要求
icmp协议只能送到几个特定的ip
udp协议只能送到53端口
tcp协议只能送到几个特定ip
如:
iptables -P OUTPUT DROP
iptables -A OUTPUT -p icmp -d 192.168.0.1 -j ACCEPT
iptables -A OUTPUT -p udp --dports 53 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.0.1 -j ACCEPT
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#9

帖子 abbott » 2009-08-05 13:21

学习了。。。
谢谢指点,
我在翻书看看 你提到的东西.....
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#10

帖子 abbott » 2009-08-05 13:43

至于filter表的output链,原则上是需要严格控制的,比如下边的要求
icmp协议只能送到几个特定的ip
udp协议只能送到53端口
tcp协议只能送到几个特定ip
如:
iptables -P OUTPUT DROP
iptables -A OUTPUT -p icmp -d 192.168.0.1 -j ACCEPT
iptables -A OUTPUT -p udp --dports 53 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.0.1 -j ACCEPT

至于filter表的output链, 这个是不是仅仅管理经由我的网卡,发往网络的数据包?

我自己的是NAT网关。
客户端就自己的laptop和几个同学,
没有对他们做严格的限制。 现在我默认的规则是,对于经由本机发出的数据,一概放行...

我还有几个关于网络应用的问题, 另写帖子请教....
angelus
帖子: 445
注册时间: 2007-08-27 17:31

Re: 我的vsftpd 罢工了

#11

帖子 angelus » 2009-08-05 22:07

你现在有个很严重的概念性错误。
filter表中,input链过滤的是-d 为本机封包,是传递给本机应用程序的包。
output链过滤的是本机应用程序产生,并离开本机的封包
换句话说,input链限制从外对本机的连接,output限制本机对外的连接。
而这两个都是与本机有关的,是保护本机用的!
如果你的ftp....等服务是建立在其他机器,而只是用本机做nat带防火墙,应该更关注的是forward链!
它决定了转发封包的通过或丢弃。你的ftp服务----客户端的任意一个封包都不会进入input,output,但必定会经过forward链。因为,不管那边的包都不是给防火墙机器上的应用程序,所以不会进入input,而每个封包也不是防火墙主机的应用程序产生的,所以不会进入output。每个封包都只是把防火墙主机当成类似路由转发,如此必定会经过forward链

我上边写的那些规则,都是用来保护你防火墙主机的,而不是你搭建ftp的机器,但这是正比促进关系,防火墙主机越安全,它后边的机器就会越安全!
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#12

帖子 abbott » 2009-08-06 7:05

angelus 写了:你现在有个很严重的概念性错误。
filter表中,input链过滤的是-d 为本机封包,是传递给本机应用程序的包。
output链过滤的是本机应用程序产生,并离开本机的封包
换句话说,input链限制从外对本机的连接,output限制本机对外的连接。
而这两个都是与本机有关的,是保护本机用的!
如果你的ftp....等服务是建立在其他机器,而只是用本机做nat带防火墙,应该更关注的是forward链!
它决定了转发封包的通过或丢弃。你的ftp服务----客户端的任意一个封包都不会进入input,output,但必定会经过forward链。因为,不管那边的包都不是给防火墙机器上的应用程序,所以不会进入input,而每个封包也不是防火墙主机的应用程序产生的,所以不会进入output。每个封包都只是把防火墙主机当成类似路由转发,如此必定会经过forward链

我上边写的那些规则,都是用来保护你防火墙主机的,而不是你搭建ftp的机器,但这是正比促进关系,防火墙主机越安全,它后边的机器就会越安全!
原来是这样,
现在明白input output forward了。

但是有一个问题,
也许你说的不太对。
我在给你的站内信件中有详细的资料,是关于我的机器的配置的。

很明确,
主机运行的服务有:
amule TCP/UDP 4999/4999
vsftpd TCP 8021, 被动模式,端口范围 8000-8008
sshd TCP 8022
smb 采用默认的端口配置
NFS 采用默认端口配置
并通过iptables作NAT网关,

NAT 客户端,都处于 192.9.206.0/24,
运行:
ftp 默认端口 21
微软远程 3389
eMule 不同的客户端,使用不同的端口,
其他服务等。

我不明白,你会说我的ssh运行在别的机器.....
angelus
帖子: 445
注册时间: 2007-08-27 17:31

Re: 我的vsftpd 罢工了

#13

帖子 angelus » 2009-08-06 11:19

你在防火墙主机上开的服务??(除了SSH)
网关式防火墙除了必须要远程管理用的SSH以外,最好不要开放任何服务

如果你是在防火墙主机上开的那些服务,最好严格管理input,output链。(建议放到后方机器)

不好意思,我以为你的那些ftp,..等服务是运行在后方机器的,因为你写了大量的PREROUTING规则
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 3389 -j DNAT --to 192.9.206.130:3389 #Win Remote Desktop
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 20 -j DNAT --to 192.9.206.130:20 # FTP
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 21 -j DNAT --to 192.9.206.130:21 # FTP
iptables -t nat -A PREROUTING -p tcp -d 59.72.122.49 --dport 8085 -j DNAT --to 192.9.206.130:8085 # World of Warcraft
iptables -t nat -A PREROUTING -p udp -d 59.72.122.49 --dport 8085 -j DNAT --to 192.9.206.130:8085 # World of Warcraft

不是运行在后方的服务,那么上边这些NAPT是没有任何作用的!怪不的这些没有封包流向错误的规则无法写入内存,竟然会不影响使用!
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 我的vsftpd 罢工了

#14

帖子 abbott » 2009-08-06 14:54

谢谢关注..

本来,我的linux主机,多数情况下,是提供给我自己个人使用的。

开启NAT, 只是为了我的其他两台机器偶尔能联网访问东西。

NAT后面的机器,只有一台采用默认的端口 开放对外的ftp 和微软远程服务。

在我主机的Linux主机上,
开启的服务有ssh vsfptd(如果我的朋友都能明白sftp,我就不用这个东西了), openvpn, etc.

令, 我找到一本书 讲的是linux防火墙,但是都是以ipchain作为实现的软件处理的,
ipchain的语法和原理和iptables一样吗?
angelus
帖子: 445
注册时间: 2007-08-27 17:31

Re: 我的vsftpd 罢工了

#15

帖子 angelus » 2009-08-06 21:21

ipchain是比较老的一种防火墙机制,和netfilter是不一样的。
netfilter是linux第三代防火墙,前两代是ipfwadm和ipchain
因为功能,稳定性,安全性,扩充性甚至比一些商业防火墙还要出色,被linux组织采纳进内核
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
回复