vsftp&iptables

1、搭建vsftpd,并实现虚拟用户

一、安装所需要程序

# yum groupinstall -y "Development Tools" "Server PlatformDevelopment"

# yum -y install  mariadb-devel mariadb-server vsftpd lftp ftp pam-devel

启动服务:

# systemctl start mariadb.service

编译安装pam_mysql

# Install required build packages

yum install make gcc-c++ autoconf automake libtool rpm-build pam-devel mysql-devel openssl-devel

# Download the fedora source rpm

wget "ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora-secondary/releases/23/Everything/source/SRPMS/p/pam_mysql-0.7-0.20.rc1.fc23.src.rpm"

# Rebuild the RPM, it should say "Wrote blah blah.rpm" at the end

rpmbuild --rebuild pam_mysql-0.7-0.20.rc1.fc23.src.rpm

# Install the Centos Specific RPM

yum localinstall /home/you/rpmbuild/RPMS/x86_64/pam_mysql-0.7-0.20.rc1.el7.centos.x86_64.rpm

[root@node1 x86_64]# rpm -ql pam_mysql

/lib64/security/pam_mysql.so

二、创建虚拟用户账号

1.准备数据库及相关表

首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。

mysql> create database vsftpd;

mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd';

mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd';

mysql> flush privileges;

mysql> use vsftpd;

mysql> create table users (

id int AUTO_INCREMENT NOT NULL,

name char(20) binary NOT NULL,

password char(48) binary NOT NULL,

primary key(id)

);

2、添加测试的虚拟用户

根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。

mysql> insert into users(name,password) values('abc1',password('abc1'));

mysql> insert into users(name,password) values('abc2',password(abc2'));

三、配置vsftpd

1.建立pam认证所需文件

#vi /etc/pam.d/vsftpd.mysql

添加如下两行

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。

2.修改vsftpd的配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录

# useradd -s /sbin/nologin -d /var/ftproot/vuser vuser

# mkdir /var/ftproot/vuser/pub

# chmod a-w /var/ftproot/vuser

请确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=NO

local_enable=YES

write_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES

而后添加以下选项

guest_enable=YES

guest_username=vuser

并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql

四、启动vsftpd服务

# service vsftpd start

# chkconfig vsftpd on

五、配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

1、配置vsftpd为虚拟用户使用配置文件目录

# vim vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vusers_config

2、创建所需要目录,并为虚拟用户提供配置文件

# mkdir /etc/vsftpd/vusers_config/

# cd /etc/vsftpd/vusers_config/

# touch abc1 abc2

3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。

local_root=/var/ftproot

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

2、简述iptales四表五链及详细介绍iptables命令使用方法

iptales四表

filter:过滤,防火墙;

nat:network address translation;用于修改源IP或目标IP,也可以改端口;

mangle:拆解报文,做出修改,并重新封装起来;

raw:关闭nat表上启用的连接追踪机制;

五链

filter:过滤,防火墙;

nat:network address translation;用于修改源IP或目标IP,也可以改端口;

mangle:拆解报文,做出修改,并重新封装起来;

raw:关闭nat表上启用的连接追踪机制;

表上可以使用的链

raw:PREROUTING, OUTPUT

mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING

filter:INPUT,FORWARD,OUTPUT

报文流向:

流入本机:PREROUTING --> INPUT

由本机流出:OUTPUT --> POSTROUTING

转发:PREROUTING --> FORWARD --> POSTROUTING

iptables命令:

高度模块化,由诸多扩展模块实现其检查条件或处理动作的定义;

/usr/lib64/xtables/

IPv6:libip6t_

IPv4:libipt_, libxt_

iptables [-t table] {-A|-C|-D} chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

iptables [-t table] -N chain

iptables [-t table] -X  [chain]

iptables [-t table] -P chain target

iptables [-t table] -E old-chain-name new-chain-name

rule-specification = [matches...]  [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]

规则格式:iptables  [-t table]  COMMAND  chain  [-m matchname [per-match-options]]  -j targetname [per-target-options]

-t table:

raw, mangle, nat, [filter]

COMMAND:

链管理:

-N:new, 自定义一条新的规则链;

-X: delete,删除自定义的规则链;

注意:仅能删除 用户自定义的 引用计数为0的 空的 链;

-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:

ACCEPT:接受

DROP:丢弃

REJECT:拒绝

-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;

规则管理:

-A:append,追加;

-I:insert, 插入,要指明位置,省略时表示第一条;

-D:delete,删除;

(1) 指明规则序号;

(2) 指明规则本身;

-R:replace,替换指定链上的指定规则;

-F:flush,清空指定的规则链;

-Z:zero,置零;

iptables的每条规则都有两个计数器:

(1) 匹配到的报文的个数;

(2) 匹配到的所有报文的大小之和;

查看:

-L:list, 列出指定鏈上的所有规则;

-n:numberic,以数字格式显示地址和端口号;

-v:verbose,详细信息;

-vv, -vvv

-x:exactly,显示计数器结果的精确值;

--line-numbers:显示规则的序号;

chain:

PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

匹配条件:

基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;

[!] -s, --source  address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;

[!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;

所有地址:0.0.0.0/0

[!] -p, --protocol protocol

protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  "all"

{tcp|udp|icmp}

[!] -i, --in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;

[!] -o, --out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;

处理动作:

-j targetname [per-target-options]

ACCEPT

DROP

REJECT

显式扩展:必须要手动加载扩展模块, [-m matchname [per-match-options]];

显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制;

1、multiport

This  module  matches  a  set  of  source  or  destination  ports. Up  to 15 ports can be specified.  A port range (port:port) counts as two ports.  It can only be used in conjunction with one of the following protocols: tcp,  udp, udplite, dccp and sctp.

以离散或连续的 方式定义多端口匹配条件,最多15个;

[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;

[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;

# iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT

2、iprange

以连续地址块的方式来指明多IP地址匹配条件;

[!] --src-range from[-to]

[!] --dst-range from[-to]

# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT

3、time

This  matches  if the packet arrival time/date is within a given range.

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

[!] --weekdays day[,day...]

[!] --monthdays day[,day...]

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--kerneltz:使用内核配置的时区而非默认的UTC;

4、string

This modules matches a given string by using some pattern matching strategy.

--algo {bm|kmp}

[!] --string pattern

[!] --hex-string pattern

--from offset

--to offset

~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT

5、connlimit

Allows  you  to  restrict  the  number  of parallel connections to a server per client IP address (or client address block).

--connlimit-upto n

--connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT

6、limit

This  module  matches  at  a limited rate using a token bucket filter.

--limit rate[/second|/minute|/hour|/day]

--limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT

限制本机某tcp服务接收新请求的速率:--syn, -m limit

7、state

The "state" extension is a subset of the "conntrack" module.  "state" allows access to the connection tracking state for this packet.

[!] --state state

INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

NEW: 新连接请求;

ESTABLISHED:已建立的连接;

INVALID:无法识别的连接;

RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;

UNTRACKED:未追踪的连接;

state扩展:

内核模块装载:

nf_conntrack

nf_conntrack_ipv4

手动装载:

nf_conntrack_ftp

追踪到的连接:

/proc/net/nf_conntrack

调整可记录的连接数量最大值:

/proc/sys/net/nf_conntrack_max

超时时长:

/proc/sys/net/netfilter/*timeout*

处理动作(跳转目标):

-j targetname [per-target-options]

简单target:

ACCEPT, DROP

扩展target:

REJECT

This is used to send back an error packet in response to the matched packet: otherwise it is equivalent to  DROP  so it  is  a  terminating  TARGET,  ending  rule traversal.

--reject-with type

The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreach‐ able, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited (*), which return  the  appropriate ICMP  error  message (icmp-port-unreachable is the default).

LOG

Turn  on  kernel  logging of matching packets.

--log-level

--log-prefix

默认日志保存于/var/log/messages

RETURN:

返回调用者;

自定义链做为target:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • 1.安全技术 (1)入侵检测与管理系统(Intrusion Detection Systems): 特点是不阻断任...
    尛尛大尹阅读 2,453评论 0 2
  • (第十三周作业) 1、搭建vsftpd,并实现虚拟用户root用户登录#yum install vsftpd -y...
    haoxi2018阅读 346评论 1 0
  • 1、搭建vsftpd,并实现虚拟用户 我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。 匿名登录:...
    xinxin2019阅读 225评论 0 0
  • 1、搭建vsftpd,并实现虚拟用户 root用户登录 #yum install vsftpd -y 安装完后可以...
    卫清华阅读 249评论 0 0
  • 详述iptables五链 防火墙程序是工作在内核的TCP/IP的网络协议栈的框架之上,通过网络过滤可以实现入侵检测...
    Net夜风阅读 829评论 1 1