1.freebsd下jail命令说明
2.idea项目怎么打包发给别人
3.linux系统下邮件服务器sendmail的目录码配置
freebsd下jail命令说明
Jail 命令在FreeBSD 4.0中首次出现。用于“监禁”进程以及其衍生的树源子进程。而且jail和FreeBSD本身的目录码secure_level合并使用可以显著限制(jail中的)root的能力。
假设某一个应用程序在系统内中运行,树源一段时间之后该应用程序被发现包含有致命的目录码安全漏洞,如果在通常的树源python图像分割源码系统中,这个应用程序可能已经在这个上面构成了漏洞,目录码甚至cracker们已经成功地攻破这一应用并且成为root,树源控制了系统;但假如该应用程序放在jail内运行,目录码即使cracker们已经攻破系统,树源也无法访问到jail之外系统的目录码其他部分。因为尽管应用程序可以在jail之中自由活动,树源但是目录码无法获得更多权限以及访问在jail之外的任何资源。通过这一特性,树源在系统管理上面可以做到防范未知漏洞,目录码避免这些潜在的漏洞对整个系统的安全构成威胁。
jail通常有两类应用方向:
一、对应用程序的活动能力进行限制。
比如ftp服务器,DNS服务器,这样一些东西,比如wu-ftpd,bind这样一些隔三岔五就会爆出漏洞的“著名”软件放到jail里面会让人更加放心。
二、受控制的主机。
某些时候,需要对外提供有shell的管理性访问,比如作为某公司A,其合作单位B有某项目需要在A的机器上获得shell乃至root权限,这就需要提供受控制的主机,用户可以在jail里面控制几乎所有他需要的资源(除了jail不允许他访问的部分)。
第一类应用并不是非常复杂,实际上这类应用实现方法相对简单,只要在Linux下面玩过chroot就没有什么大问题;第二类应用则有很多有趣的查看jsp源码特性,而jail最吸引人的部分也是这些很有趣的特性。
下面从最简单的部分开始:
第一类:限制应用程序活动能力
首先按照通常习惯的方式安装好你想要jail的应用程序,下面我们将会使用pure-ftpd(我不是很熟悉它,只不过顺手拿过来而已,据说还算好用)作为例子。
这个ftpd的安装位置,默认为:/usr/local/sbin;/usr/local/bin;在/etc下面还有一些相关的文件,整个结构感觉不是特别干净,不过它运行需要的东西并不很多,包括 /usr/local/sbin/pure-ftpd , /etc/xxx /etc/xxxx 这样一些文件。
接下来先用ldd看看/usr/local/sbin/pure-ftpd需要的那些运行库:
tester# cd /usr/local/sbin
tester# ldd pure-ftpd
pure-ftpd:
libcrypt.so.2 = /usr/lib/libcrypt.so.2 (0xb)
libpam.so.1 = /usr/lib/libpam.so.1 (0x)
libc.so.4 = /usr/lib/libc.so.4 (0xd)
这样我们的工作任务清单上面就多出来这样一些东西了: /usr/lib/......
使用ldd我们还可以获得其他一些需要放入jail的程序的运行库位置,信息搜集完成之后,我们开始建立jail目录树(这里我们假定jail环境构造在/jail内,当然你也可以选择你喜欢的位置):
tester# mkdir -p /jail/usr/{ lib,libexec,local/sbin,local/bin,local/etc,etc,var/run,var/log}
然后将上面列出的,libcrypt.so.2 等这些文件都复制到对应位置。当然还有我们FreeBSD下非常重要的一个文件ld-elf.so.1,尽管ldd没有给出提示,也还需要复制过去,否则应用程序也跑不起来。这样我们就获得了一个很干净(最小化)的应用程序运行环境jail命令的格式是:
jail path hostname ip-number command
下面开始在jail里面运行它:
tester# jail /jail jailed.host.name $JAILED_IP_ADDR /usr/local/sbin/pure-ftpd [options]
这里,/jail是你的jail环境的位置,也就是被jail之后,应用程序“以为”自己所在的“/”的位置;jailed.host.name是你打算提供给这个jail环境的主机名,某些情况下,应用程序需要知道这个变量;$JAILED_IP_ADDR是你打算提供ftp服务(如果是其他应用软件,那就是其他服务咯,比如web服务)的那个IP地址,至于/usr/local/sbin/pure-ftpd [options] 则是你打算运行的那个应用程序在jail里面的所在位置以及运行所需的参数。
然后用ps 查看一下进程状态:
tester# ps -axf |grep pureftpd
IsJ 0:. pure-ftpd (SERVER) (pure-ftpd)
可以看到所有这些pure-ftpd的进程都有一个J,标志这这一程序正在jail下面运行。
这时候可能会有一些管理用的程序无法正常工作,因为这些管理用程序无法找到他们需要访问的python实战源码那些文件,只要找到这些应用程序需要调用的文件(比如日志文件)的位置,然后制造一个soft link就可以了,通常这些管理程序都可以继续正常运行。
到此为止,一个针对应用程序的jail构造完成。
第二类,构造受控制的主机
在这种情况下面,我们首先需要构造一个当前版本操作系统的完整镜像(下面这个脚本是从FreeBSD 4.6r的man page里面来的,实际上4.5以及之前的man page在构造jail目录树脚本上面都有一定的问题,4.6才纠正过来):
tester# cat /root/mkjail.sh
jailhome=/data/jail
cd /usr/src
mkdir -p $jailhome
make world DESTDIR=$jailhome
cd etc
make distribution DESTDIR=$jailhome -DNO_MAKEDEV_RUN
cd $jailhome/dev
sh MAKEDEV jail
cd $jailhome
ln -sf dev/null kernel
^D
tester# sh /root/mkjail.sh
最后在/data/jail下面获得一个完整的根据当前源码树编译得来的jail目录树。
接下来:
/
*tester# mkdir $jailhome/stand
tester# cp /stand/sysinstall $jailhome/stand
tester# jail $jailhome jailed.system.box ..0. /bin/csh
(这时候就获得了一个jail下面的shell)
jailed# /stand/sysinstall
*/
通过sysinstall这个程序可以对jail系统的常用变量进行设置,比如时区,DNS,Mail。还有jail系统在“启动”的时候需要执行的程序。
如果你足够熟悉这个系统,可以考虑自己手工一个个的做过来。
复制/etc/localtime 到 $jailhome/etc,使jail环境下的应用程序可以得到正确的时间;
复制/etc/resolv.conf 到 $jailhome/etc/resolv.conf 使jail下面可以正确解释域名;
在jail里面运行newaliases 避免sendmail的不断抱怨;
如果打算运行inetd,需要修改inetd的启动参数,加上 -a $LISTEN_ADDR 选项(因为jail无法自己获得当前系统的ip地址,所以必须提供一个ip地址给它)在rc.conf里面看起来应该是这样:
inetd_flags="-wW -a ..0."
将系统本身的syslogd 运行加上 -ss 选项,避免这个syslog启动****端口;修改/etc/rc.conf 加上 syslogd_flags="-ss" (对$jailhome/etc/rc.conf也如法炮制)
在jail内创建一个空的/etc/fstab,在rc.conf里面去掉网卡地址的绑定,这样在jail系统在启动的时候不会抱怨。
为了实际运行这个jail系统,还需要为jail提供一个可以连接的IP地址,这个地址可以与实际环境同一个子网,也可以处于另外一个子网中。
tester# ifconfig fxp0 ..0. netmask 0xffffffff alias
(这里为网卡fxp0绑定了一个别名,准备提供服务。)
所有这些东西都执行完了以后,git 获取源码可以有几个方法把jail系统启动起来,一个是在jail外面运行
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/sh $jailhome/etc/rc
一个是单纯把ssh/telnetd这样一些提供远程访问的服务在jail内启动起来:
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/sh $jailhome/bin/inetd -wW -a $jail_IP_ADDR
然后从外面登录系统,运行、配置jail系统环境,或者手工启动需要的应用服务。
如果打算运行一个用于生产环境的jail系统的话,推荐使用第一种方法,并且把启动jail的命令放到(实际环境的)/etc/rc.local脚本里面去,这样jail系统可以有比较完备,与实际机器相类似的环境。
这样一个jail系统就算构造完成并且可以正常运作,加上在实际环境里面定期的严格的备份,安全检查与审计,就可以得到一个很不错的安全系统。一般的scriptkids已经无法对你的系统构成实际威胁,即使是某些与黑帽子走得很近的人在漏洞公开之前得到实际的攻击脚本,并且进入你的系统,他也只能在jail里面活动,而且你可以知道他什么时候进入和离开系统,做了什么。这样你可以很轻松的恢复系统和防范下一次未知的攻击。
在jail系统的管理上面有几个问题需要注意:
1. jail里面的帐号、密码是跟实际系统不同的,但是在jail之外ps或者查看jail目录树内的文件时,那些jail内部的uid会被看成外部的uid,因此最好把jail里面的/etc/adduser.conf进行修改,把他们的uid起始号码放大,比如:uid_start="",这样当你在jail外部进行文件、进程管理的时候不至于误会文件或者进程的宿主。
2. jail内的任何活动,其能力都受到了限制。jq网页源码比如top/vmstat这样的东西都不能使用,mknod,dd等等这样需要访问直接硬件的东西也无法工作。所以在jail内监控系统运行状态也比较难。
3. 当想要远程关闭jail系统的时候,可以有两种方法,一是进入jail之后kill -TERM -1 或者 kill -KILL -1 ,这样向所有该jail内的进程发送SIGTERM或者SIGKILL信号,也可以在jail里面运行/etc/rc.shutdown来关闭jail。如果是本地想要关闭jail倒是简单,只要把所有带有J标记的进程干掉就可以了。
4. 一个系统可以运行多个jail,各个jail之间无法互相干涉,如果在jail外面使用
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /path/to/application
这种方式运行某个应用程序,下一次试图通过运行
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/csh
这种方式获得的jail过的shell来管理该应用程序将会失败。因为这时是两个各自独立的jail,互相不能干涉。为了能对jail系统内进程灵活地进行管理,推荐在jail里面除开应用软件之外,再启动telnetd或者sshd之类的服务,这些服务此时与应用程序运行在同一个jail里面,就可以通过远程登入系统后获得与那些应用程序在同一个jail内的shell。
5. jail系统内的所有应用软件版本号应该与外部实际系统保持一致。当外部系统的源码同步到某个版本并且重新做过make world之后,推荐也重新生成一次jail,以避免某些可能的莫名其妙的错误。
6. 另外有一个做法不知道是否正确,在jail里面每次使用ps的时候,系统都会报告没有/var/run/dev.db文件,让人感觉很不舒服,复制实际系统的/var/run/dev.db 到 $jailhome/var/run/ ,就不会再碰到这个问题。
idea项目怎么打包发给别人
可用打包工具。在初始窗口中单击ImportProject,在文件树中选择您的项目,打开Import窗口,选择Eclipseoption,然后单击Next。导入完成后,主窗口将打开,项目目录在左侧,编辑区域在右侧。下图显示了目录树结构。人们发现。已经生成了idea目录和web_test.iml文件,它们是idea的IDE依赖文件。
选择左边的下一个菜单,模块,这是idea的概念。模块包含在项目下。对了,很多人会对这个概念感到困惑甚至鄙视,但确实是正确的。它来自于maven的想法。如果你看过一些大型开源软件,你就会知道开源nosql的源代码。一个项目将被开发成许多模块。但是对于常规的javaweb,不用担心那么多,只要明白一个项目就是一个模块,两者可以合二为一。
linux系统下邮件服务器sendmail的配置
安装所需软件sendmail.8...tar.gz ment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/mail/aliases')dnl
define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `')dnl
dnl define(`confREFUSE_LA', `')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -T; -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmailto only listen on the loopback device .0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl a kernel patch
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
记得要使以下两个条语句有效,他的意思是假如access.db访问控制没有配置,则启用以下
验证方式进行smtp验证。
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
sendmail宏定义说明
divert(n) 为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲
OSTYPE定义宏所使用的操作系统,该宏允许m4程式增加同相关操作系统相关的
文档
Domain定义MTA将使用哪些域来传输邮件
Feature定义配置文档中使用的一个特定的功能集
Define定义配置文档中的一个特定的选项值
MASQUERADE_AS 定义sendmail来应答邮件的其他主机名
MAILER定义sendmail使用的邮件传输方法
dnl注释
完成sendmail.mc文档的编写后就能够用m4程式生成正式的sendmail.cf配置文档。语法如
下:
# m4 sendmail.mc ; sendmail.cf
也能够用源码目录树下的cf/cf/Build命令生成。前提是您要在该目录下有一个sendmail.mc
文档。语法如下:
# ./Build sendmail.cf
ok,接着就能够把sendmail.cf and submit.cf文档安装到/etc/mail目录中的,语法如下:
# ./Build install-cf
其实也能够自已用cp命令拷贝的啦。记得把sendmail.mc文档也拷贝一份到/etc/mail目录,
以便以后修改配置时可重新生成sendmail.cf文档。
ok,接着到/etc/mail目录下配置一些文档。
# cd /etc/mail
# echo 'examply.com' ;; local-host-names 接收邮件的主机名
# echo 'localhost RELAY' ;; access 用来拒绝或允许来自某个域的邮件,本例允许
本地转发。
# makemap hash access 生成access.db数据库
# touch domaintable 用来把旧域名映射互新域名
# makemap hash domaintable 来覆盖向指定域的路由
# makemap hash mailertable 用来把用户和域名映射到其他地址
# makemap hash virtusertable 别名数据库,文本形式。可参照源码目录树下
sendmail/aliases文档。
# newaliases 从文本文档中创建一个新的别名数据库文档。
# sendmail-v -bi 调试启动。
/etc/mail/aliases: aliases, longest bytes, bytes total
假如出现以上提示信息,则启动成功。可用以下命令正式启动:
# sendmail-bd -qm
该命令以后台进程方式(-bd)运行,并使其每隔分钟(-qm)轮询一次未发送邮件队
列,检查是否有新邮件。
服务器启动后,能够用telnet连接服务器。
# telnet localhost
Trying .0.0.1...
Connected to localhost.
Escape character is '^]'.
test.tigerhead ESMTP Sendmail8../8..; Tue, Mar :: +
ehlo test 您输入的命令,按回车结束。
-test.tigerhead Hello LOCALHOST.localdomain [.0.0.1], pleased to meet you
-ENHANCEDSTATUSCODES
-PIPELINING
-8BITMIME
-SIZE
-DSN
-ETRN
-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
-DELIVERBY
HELP
以-开头的为服务器的响应信息。注意倒数第三行,这就是成功配置smtp验证的显示。
输入quit离开。
安装完成后为确保系统安全,还需调整一些目录的权限。可参考sendmail源码目录下
sendmail/SECURITY文档。
# chmod /etc/mail/aliases /etc/mail/aliases.{ db,pag,dir}
# chmod /etc/mail/*.{ db,pag,dir}
# chmod /etc/mail/statistics /var/log/sendmail.st
# chmod /var/run/sendmail.pid /etc/mail/sendmail.pid
-r-xr-sr-x root smmsp ... /PATH/TO/sendmail
drwxrwx--- smmsp smmsp ... /var/spool/clientmqueue
drwx------ root wheel ... /var/spool/mqueue
-r--r--r-- root wheel ... /etc/mail/sendmail.cf
-r--r--r-- root wheel ... /etc/mail/submit.cf
6、sendmail功能介绍
aliases 别名数据库配置
test: test1,test2,test3 配置test群组别名,test不是个实际的用户,只是个别名。发给
test的信,test1,2,3都可收到。
test: test,testbak 在testbak邮箱中备份test的邮件。
test: test,test@.com 远程邮件备份,原理同上。
test: :include: /etc/mail/userlist 使用用户列表配置群组。
userlist格式如下:
test1, /
test2, /
test3, /
test4
关于系统预设aliases,由于sendmail预设用mailer-daemon and postmaster作为资料传送者,
或邮件退回的帐号,但系统实际没有这两个帐号,所以要如下配置别名。
mailer-daemon: postmaster
postmaster: root
配置完成后不要忘了用newaliases命令生成数据库。
~/.forward文档配置
其实该文档的作用和aliases数据库的作差不多啦,都是配置别名,做邮件转发的。因为alises
只能由管理员控制,个人用户不能修改,所以就能够在个人的目录下建立一个转寄文档。以
配置个人的邮件转寄列表。文档格式如下:
test
test1
test2
test3
and os on
但由于个人用户安全意识差,假如配置不当会有安全漏洞,不建议使用。
access访问控制列表配置
. RELAY
test.NET OK
test.COM REJECT
test.COM SORRY,WE DON'T ALLOW SPAMMERS HERE
test.ORG DISCARD
Ok--远程主机能够向您的邮件服务器发送邮件;
RELAY--允许中转;
REJECT--不能向您的邮件服务器发邮件和不能中转;
DISCARD--发来的邮件将被丢弃,同时并不向发送者返回错误信息。
nnn text-- 发来的邮件将被丢弃,但sendmail将会向发送者返回nnn确定的smtp代码和text
变量确定的文本描述。
配置完成后要用makemap hash access.db 命令生成数据库。
mailq邮件队列查询命令。
Q-ID邮件id号。
Size邮件容量。
Q-Time邮件进入队列(也就是/var/spool/mqueue目录)的时间和不能邮寄的原因。
Sender/Recipient 发信和收信人的邮箱地址。
mailstats邮寄状态查询命令,可查询sendmail运行作至今邮件收发总计资料。
M :
msgsfr:发送的邮件数量。
bytes_from:邮件容量
megsto:收到邮件的数量。
bytes_to:同上
msgsrej:邮件deny的次数。
msgsdis:邮件discard的次数。
Mailer :esmtp对外邮件 ,local本地邮件 。
mail邮件命令
mail 查看/var/spool/mail/目录下自已邮箱内容。以q退出把看过的邮件保存在
~/mbox中。
mail test@example.com 直接发邮件给人。
mail -s 'title text' test@example.com 把文档中内容邮寄出去。
mail -f ~/mbox查看home目录下邮箱内容。
用mail发附件也是可行,要用到uuencode and uudecode命令进行编码。
编码:uuencode [file] name example:uuencode hello hello;hello.uue default input
is stdin;default output is stdout.
解码:uudecode [-o outfile] name example:uudecode hello.uue 能够用-o选项输出另外一个
文档名。
# uuencode ~/.bashrc bashrc | mail -s 'test uuencode'
test@example.com
五、其他配置。
要想更好的使用sendmail,常用到的一些配置:
1、限制最大邮件。
vi /etc/sendmail.cf
# maximum message size
O MaxMessageSize= (注:5M)
2、最大的群发数目。
vi /etc/sendmail.cf
# maximum number of recipients per SMTP envelope
O MaxRecipientsPerMessage= (注:个)
3、域名文档----local-host-name
能够用他来实现虚拟域名或多域名支持。
/etc/mail/local-host-name
v1mail.com
v2mail.com
.......
4、mail别名文档--aliases。
vi /etc/aliases
系统内部别名:peng:zpeng,hero,mmmn,yt peng是我的用户名,其他的是别名,用逗号隔开。
转发到其他的邮箱:peng:zpeng@sina.com,yt.sohu.com
#newaliases --写到库中
5、邮件控制文档--access
relay、ok、reject和discard。relay能够实现转发。ok是用来允许用户的任意访问,他会覆盖任何其他已建立的检查(实际配置中,最好别设这项,除非您对该用户是绝对信任的);reject能够实现对来访地址的拒绝,他根本就不容许该地址和您的邮件服务器进行连接通信;discard的作用是在接收到传输的邮件消息后,偷偷地把他丢弃掉(在发送者看来,他的邮件的确是接收了,但他并不知道,发送的目的地址根本不可能接收到他的邮件,服务器巧妙地欺骗了他。
vi /etc/mail/access.
localhost.localdomain RELAY ---允许
localhostRELAY
.0.0.1 RELAY
peng@sina.com ok
@sexgirl.net reject
... discard
#makemap hash access.db 写入库中
6、虚拟用户文档---virtusertable.
这个文档能够mail重名问题。
例如:您有两个域名,virt1.com and virt2.com,但是都有peng这个用户:
peng@virt1.com and peng@virt2.com,这是两个用户。但对于系统用户来说,他只认系统用户peng,只能通过一下改:
vi /etc/mail/virtusertable
peng@virt2.com r
这样就能够了。在新开一个用户r,但是peng@virt2.com在客户端的pop3 and smtp server的用户名和口令要用r的。
#makemap hask virtusertable.db
# /usr/sbin/sendmail -d0.1 -bv root |grep SASL
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
我的问题已找到了是/usr/lib/sasl/Sendmail.conf的文档名中的S没有大写,问题已解决
2024-12-27 13:47
2024-12-27 13:34
2024-12-27 13:30
2024-12-27 13:26
2024-12-27 13:02
2024-12-27 13:00
2024-12-27 12:34
2024-12-27 12:21