nat方式下主动模式的ftp[技术]

这几天做的ftp有了新的需求,需要将ftp服务对外提供服务,都知道,ftp分为主动模式和被动模式两种,如果使用被动模式就需要开放多个端口,这样就有点太麻烦了,所以选择了主动模式,只需要开放tcp的20,21端口就行了

iptables的写法

iptables -A PREROUTING -p tcp –dst 10.100.0.1–dport 20 -j DNAT –to 192.168.224.52:20
iptables -A PREROUTING -p tcp –dst 10.100.0.1–dport 21 -j DNAT –to 192.168.224.52:21
iptables -A POSTROUTING -d 192.168.224.52 -j SNAT –to 192.168.0.1

蚊子这边的服务器是双网卡

重启iptables之后发现,连接21端口并不好使,而且在client端强制使用主动模式也连不上,于是发动了google,发现,只需要在启用一个模块就可以了

modprobe ip_nat_ftp

Centos5.4 X64系统下安装PPTP做vpn[技术]

新服务器上线,配了很多虚拟机做测试环境,可惜虚拟机都是内网环境,所以无奈之下只能在服务器上安装vpn软件作为跳转,蚊子使用的软件是PPTP,pptp概念可以参考下面网站:http://www.networkdictionary.cn/protocols/pptp.php,下面就来写下操作步骤

1,添加新的yum点

vi /etc/yum.repos.d/Doylenet.repo,添加如下内容

[doylenet]
name=Doylenet custom repository for CentOS
baseurl=http://files.doylenet.net/linux/yum/centos/5/i386/doylenet/
gpgcheck=1
gpgkey=http://files.doylenet.net/linux/yum/centos/RPM-GPG-KEY-rdoyle
enabled=1

2,安装相应软件

yum install ppp

yum install pptpd

3,编辑相应的配置

vi /etc/pptp.conf文件

注释掉“logwtmp”这行

配置网络

localip 10.0.0.2
remoteip 10.0.0.200-220 设置客户端拨号上来后获得的ip段

保存退出。

vi /etc/ppp/options.pptpd,在最后加入

ms-dns 8.8.8.8  设置客户端拨号上来后设置的dns

保存退出

vi /etc.ppp/chap-secret

添加如下内容

test        pptpd         12345678      *

第一个字段是用户名
第三个字段是密码
第四个字段是设置客户端从哪个ip连上来

编辑好后保存退出,并启动pptp服务

/etc/init.d/pptpd start

# netstat –lnp

tcp        0      0 0.0.0.0:1723                0.0.0.0:*                   LISTEN      4316/pptpd

看到pptpd已经正常启动了

然后就可以在windows上设置vpn拨号了

要使pptpd工作, 包转发必须打开。 编辑/etc/sysctl.conf加入下面的语句:
net.ipv4.ip_forward = 1
要使sysctl立即生效, 运行下面的命令: –
sysctl -p

打开防火墙端口
将Linux服务器的1723端口和47端口打开,并打开GRE协议。
[root@as4u4 ~]# /sbin/iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
[root@as4u4 ~]# /sbin/iptables -A INPUT -p tcp –dport 47 -j ACCEPT
[root@as4u4 ~]#/sbin/iptables -A INPUT -p gre -j ACCEPT

如果要求外网机器通过vpn连接其它网段的机器,还要用iptable做NAT转发

/sbin/iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j MASQUERADE

linux iptables允许NFS Client访问NFS Server[技术]

portmapper在NFS服务启动的时候给每一个NFS服务分配了一个动态的端口,如何才能让NFS client在使用RHEL/Fedora/CentOS linux iptales防火墙时可以正常使用NFS服务呢?

需要打开下面的端口

a] TCP/UDP 111 – RPC 4.0 portmapper

b] TCP/UDP 2049 – NFSD (nfs server)

c] Portmap 静态端口—在/etc/sysconfig/nfs文件中定义的一系列TCP/UDP端口

按nfs默认启动的话,很多服务如rpc.mounted,端口都不是固定的,这样不方便在防火墙上进行管理,所以我们需要把每个启动的服务的端口固定下来,需要做的就是编辑/etc/sysconfig/nfs文件。

# vi /etc/sysconfig/nfs

更改下面的配置,将端口分配为一个没被占用的

# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=lockd-port-number
# UDP port rpc.lockd should listen on.
LOCKD_UDPPORT=lockd-port-number
# Port rpc.mountd should listen on.
MOUNTD_PORT=mountd-port-number
# Port rquotad should listen on.
RQUOTAD_PORT=rquotad-port-number
# Port rpc.statd should listen on.
STATD_PORT=statd-port-number
# Outgoing port statd should used. The default is port is random
STATD_OUTGOING_PORT=statd-outgoing-port-numbe

下面是我用于测试的机器上修改的内容

RQUOTAD_PORT=6005
LOCKD_TCPPORT=6004
LOCKD_UDPPORT=6004
MOUNTD_PORT=6002
STATD_PORT=6003
STATD_OUTGOING_PORT=6006

保存退出后就可以重启nfs服务,portmap服务

# service portmap restart
# service nfs restart

下面就是iptables方面的配置了,蚊子这里因为是学习,所以设置的比较严格,下面先说下我的环境

1,两台Server:192.168.211.128(nfs-server),192.168.211.129(nfs-client)
2,nfs-server上只允许nfs,ssh的访问,其余都拒绝

下面是我的iptables的配置

iptables -A INPUT -p tcp -s 192.168.211.0/24 –dport 22 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6002 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6003 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6004 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6005 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6006 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6002 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6003 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6004 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6005 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6006 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 111 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 111 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 2049 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 2049 -j ACCEPT
iptables -P INPUT DROP

第一条就是允许连接ssh
第二条作用是在启动nfs的时候,nfs-server会通过本地回环接口与portmap进行会话,所以需要允许
最后一条是设置input链的默认策略为drop
中间的就是允许nfs-server相应的端口了

如果在配置iptables的时候有问题可以使用service iptables restart重置,如果没有问题就可以使用service iptables save保存相应的配置,保存的配置文件放在/etc/sysconfig/iptables里。

squid3.0单网卡透明代理服务器[原创]

看网上很多人都做了squid的透明代理,今天自己也试验了一个,使用的是squid3.0stable8版本+iptables,下面就吧我的过程总结如下,首先看下我的拓扑结构
squid单网卡,通过交换机可以直接连接到Internet,A和B两组client可以处在不同的网段或相同的网段,只要可以和squid所在网段互通就行
本文本着只把透明代理实现的最基本过程整理如下,对于squid详细配置,以及iptables相对应的安全配置一概不涉及,有需要的朋友请自行去相应网站查找
言归正传,我的环境如下
vmware6.0模拟两个系统1、centos4.4(squid:192.168.220.128),2、winxp(ip:192.168.220.140)
squid基本配置:

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localnet

http_access deny all
always_direct allow localnet

http_port 3128 transparent       #透明代理的关键参数

hierarchy_stoplist cgi-bin ?

access_log /opt/squid/var/logs/access.log squid
cache_dir ufs /tmp 10 2 4 no-store

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|?) 0 0% 0
refresh_pattern . 0 20% 4320

visible_hostname 1

cache_effective_user squid
cache_effective_group squid

然后正常启动squid,测试机xp系统ie中设置代理服务器,可以正常上网,说明,squid目前运行正常

接下来是iptables的配置

echo "1" >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128

完成后,将xp中ie的代理去掉,更改xp的网关为192.168.220.128,然后配置好dns,直接在访问网页,就可以看到你想要的页面了,而squid中也有正常访问的日志了

这次最简单的squid透明代理就做完了

关于实施中的一点点问题,最先开始的时候,squid中我没有添加transparent这个参数,结果加完iptables后,访问返回的错误的页面如下

ERROR
The requested URL could not be retrieved

--------------------------------------------------------------------------------

While trying to retrieve the URL: /

The following error was encountered:

Invalid URL
Some aspect of the requested URL is incorrect. Possible problems:

Missing or incorrect access protocol (should be `http://'' or similar)
Missing hostname
Illegal double-escape in the URL-Path
Illegal character in hostname; underscores are not allowed
Your cache administrator is webmaster.

后来加上这个参数后就正常了