在使用了Mikrotik的RouterOS作为出口路由使用了相当一段时间之后,我彻底成为了ROS的粉丝,现在手里有一个x86的小机和一直RB750Gr3分别在家里和出租屋做出口路由。

虽然设备不多,管理员也就我一个,根本没有3A什么的出场的机会,只不过嘛,生命在于折腾,研究研究不是也很好嘛。

安装NAPS服务器并配置

首先,安装网络访问策略服务器(NAPS),这可以用来作为Radius服务器。通过服务器管理器添加角色与功能,一路下一步,在角色一页勾选上“网络策略与访问服务”,然后继续下一步直至安装完毕为止。我因为懒得卸掉重装,后面的就没继续截图了。

安装完NPS之后,就可以开始配置。当然,首先,是添加用户组,并将用户添加到组,顺便确认一下用户的拨入属性由NAPS控制。

然后,去网络策略服务器,添加radius客户端。允许ROS使用NPS作为radius服务器。IP地址写ROS使用的源地址,机密随意只要和ROS设备上一样即可。

下一步是新建网络策略,填写策略名称之后,服务类型选择未指定。

然后下一步里面,指定匹配那个Mikrotik管理员组;这时候可以限定NAS标识符或者限定被叫站ID(前者默认是ROS的system identity,后者默认是radius客户端的IP地址)。

选择匹配策略的授权访问。至于身份验证方法,暂时知道ROS使用的mschapv2,以后会不会改就不知道了。至于约束,默认下一步。

到了配置设置的一步,把默认的两个标准删掉,手动添加Service-Type,值为Login,虽然默认的似乎也能用。

然后就是精华所在:在“供应商特定”一项里面,手动添加一个属性,属性是Vendor-Specific,添加。添加一个属性,供应商为“14988”,符合RFC规格,然后配置属性。供应商分配的属性号为3,属性格式为字符串,属性值就是用户组的名字。系统默认最高权限的组的名字是full,我这里填的就是full。

然后禁用BAP(因为感觉没什么乱用,似乎不禁用也行),下一步,完成。Windows Server这边就OK了。

配置ROS

首先,选好ROS的系统名称,保证能够匹配到NAPS上的那个过滤策略。

然后,在ROS上配置Radius客户端。Service选择login就行,address填NAPS的地址,Secret就是刚才在NAPS添加Radius客户端的机密,同时,建议指定一下源地址,特别是ROS有多个接口IP地址的时候。

下一步,在system-users中启用AAA登录,Default Group选择最低权限的一个,那就行了。

最后验证一下,大功告成!

最近在部署一个大型的zabbix监控,遭遇了mysql连接数不足的情况,在增加mysql的最大连接数的过程中,发现还是有点繁琐的,于是在这里记录下来。

参考:https://pjstrnad.com/mariadb-raise-number-of-connections/

首先,去编辑/etc/my.cnf,或者相应的mysql服务器配置文件。

在[mysqld]一节下方增加以下内容:

open_files_limit=12000
max_connections=10000

对应的两个参数可以根据实际需要修改。此时重启mysql服务器,发现设置并未生效,或者说生效了一半,只增加到了214,原因是systemd本身存在限制导致的。
接下来修改/etc/security/limits.conf,如果没有,就新建一个,插入以下内容。

mysql soft nofile 4096
mysql hard nofile 10240

然后创建systemd启动文件的配置

mkdir -p /etc/systemd/system/mariadb.service.d
vi /etc/systemd/system/mariadb.service.d/limits.conf

然后插入以下内容

[Service]
LimitNOFILE=infinity

完成后就可以重启MySQL服务器了

systemctl daemon-reload
systemctl restart mariadb

主页在这里:http://radicale.org/

显着无聊,在LEDE的软件源里面到处找有什么有趣的服务,结果发现了一个叫做radicale的个人CalDAV/CardDAV服务器,直接装了跑起来之后总有点问题,于是稍微研究了一下,大概是由缺失了htpasswd的原因导致的,抓log也没报任何错误,但就是没法正常工作。最后还是去官网直接看部署过程才终于搞起来。

软件使用python编写,最新的版本使用python3,目前就我所知,软件包的需求最少也有python3、pip、htpasswd,及其所有所需软件包。功能上非常简陋,但核心的功能一个不漏,源码包不到100K,还自带一个简陋的web控制页面,可以用来新增文件夹。

安装过程就和官网所说,非常简单,最少只需要2条命令就能跑起来,不过想要用得好一点就还是需要进行一些配置。

先安装radicale

python3 -m pip install --upgrade radicale

然后pip就会搞定全部的需求,官方同时推荐对密码使用bcrypt进行加密,如果使用bcrypt加密,同时使用pip安装bcrypt。同时,根据不同的发行版,把htpasswd装上,LEDE由于没有将htpasswd从apache中拆出来,所以我就把apache装上就可以用了。

好了,服务器已经安装完,进入配置环节,radicale会自动尝试从“/etc/radicale/config~/.config/radicale/config或者是尝试从系统变量中读取RADICALE_CONFIG来找到配置文件,所以直接放在/etc/radicale/config就好,当然,可以直接加参数来运行,不过我觉得没有多少人会每次都加上一堆参数来运行的吧(笑)。

创建好配置文件,就向里面填入以下内容:

[auth]
type = htpasswd
htpasswd_filename = /path/to/users
htpasswd_encryption = plain
delay = 1

[server]
hosts = 0.0.0.0:5232
max_connections = 20
max_content_length = 10000000
timeout = 10
daemon = True
pid = /var/run/radicale.pid
ssl = True
certificate = /path/to/cert
key = /path/to/key
realm = Radicale - Password Required

[storage]
filesystem_folder = /path/to/storage

[rights]
type = authenticated

根据个人需求,可以酌情修改,比如说想要规模大一点,可以对权限进行更加详细的设定,比如说哪些人能读哪些人能写,参考这里
同时可以根据需要,抓取更加详尽的log,可以参考这里
在这个例子里面,我就参考LEDE默认的那个,直接用plain存储用户名和密码,同时使用SSL对通信进行加密,证书的做法有太多,这里就不详述。
users文件可以使用htpasswd来创建,大概的格式就是用户名:密码,如果用明文的话可以直接编辑users文件来修改密码。

创建好用户名和密码之后,可以尝试使用浏览器来访问https://your.domain:5232/,会自动跳转到一个非常简陋的web控制页面能够创建、编辑、删除包括地址簿、日历、todo清单等文件夹,根据我的测试来说暂时是没法在客户端创建这些文件夹的,所以现在web控制页面建好,然后就可以到客户端添加详细的条目了。

不得不承认,不愧是服务器血统,这权限管理真的严格的,搭建好的owncloud报告没法发邮件,经过一番bing之后,找到了答案。

参考:http://stackoverflow.com/questions/25517281/swiftmailer-connection-could-not-be-established-with-host-smtp-gmail-com-conne

解决办法如下:

  1.  检查httpd_can_sendmail 是否设置为on
    getsebool httpd_can_sendmail
    • 如果返回的输出是 httpd_can_sendmail –> off , 运行
      setsebool -P httpd_can_sendmail 1
    • 如果你看到 httpd_can_sendmail –> on 那么跳到下一步
  2.  检查 httpd_can_network_connect 是否为on
    getsebool httpd_can_network_connect
    • 如果返回的输出是 httpd_can_network_connect –> off ,运行
      setsebool -P httpd_can_network_connect 1
    • 如果你看到 httpd_can_network_connect –> on 那么就跳到下一步
  3. 在服务器地址直接填ip而不是域名。

第三步感觉是另外的问题,而不是SELinux的权限阻止了邮件发送。

参考:https://wiki.openwrt.org/doc/howto/tftp.pxe-server

http://ftp.nl.debian.org/debian/dists/jessie/main/installer-i386/current/images/netboot/pxelinux.cfg/default

在家里做了个PXE服务器

刚才把那台10年历史的老电脑翻了出来,着磨着这烂XP也该换掉了,想了想,打算换成debian,由于懒得做安装盘于是果断选择走PXE,大概是因为后来主板换过了,居然支持PXE启动,好了。着手安装。

看了一下debian的安装wiki,教程里面自带一份pxelinux.cfg/default的配置文件,但是我不想覆盖掉之前的版本,于是展开了看一下

debian-installer/i386/boot-screens/menu.cfg

这个文件,里面指向了四个文件

include debian-installer/i386/boot-screens/adtxt.cfg
include debian-installer/i386/boot-screens/amdadtxt.cfg
include debian-installer/i386/boot-screens/adgtk.cfg
include debian-installer/i386/boot-screens/amdadgtk.cfg

于是在adtxt.cfg里面找到了kernel和append字段

kernel debian-installer/i386/linux
append priority=low vga=788 initrd=debian-installer/i386/initrd.gz ---
include debian-installer/i386/boot-screens/rqtxt.cfg

果断的选择将这俩字段添加到之前的default里面,然后net installer就跑起来了。没有nfs服务器出场的机会呢。

SMB自从openwrt的barrier_breaker对ipv6的支持变得非常好之后,开始对自己房间的网络更新到ipv6。

不得不说,ipv6的本地地址是个好东西,这个fe80开头的地址,由于继承了MAC地址的唯一性,所以可以直接使用而不会产生冲突。这时候,使用ipv6就不需要考虑ipv4地址是否已经配置这种问题,真正的即插即用,无需配置。

这种情况下,只要开机之后网卡起来了,SSH就能连通,过去把机器的网络配置弄错导致连不上的问题就再也没有了。

于是渐渐的将链接迁移到ipv6上。而骨干路由用的是石像鬼的固件,很遗憾,石像鬼对ipv6基本上没有支持,于是只能用在我的房间里面了。

既然SSH换过去了,Samba也自然得升上去,切换成ipv6。

经过了一番google,找到一个方法:

使用一个特别的dns服务器,将域名解析成ipv6地址,由于smb能够在ipv6上工作,这就能通过一个折中的办法,来达到访问ipv6的SMB服务器。

然而,这种办法相当的不便,因为该服务器为整个互联网服务,这意味着你必须连接到外部网络才能使用他们的服务,为毛我用自家的服务还非得跑出去一趟不可?网络延迟不说还要经一次GFW。

 

也考虑过在OptenWrt上自行设置 DNS解释记录,但是dnsmasq似乎不能处理ipv6的本地 hosts记录,于是最后还是放弃了使用ipv6。

参考:http://www.cianmcgovern.com/serving-live-arch-linux-environment-pxe/

另外参照之前关于建立pxe服务器的文章:https://ferrets.space/2014/04/07/%e5%9c%a8%e5%ae%b6%e9%87%8c%e5%81%9a%e4%ba%86%e4%b8%aapxe%e6%9c%8d%e5%8a%a1%e5%99%a8/

其中,pxelinux.cfg/default中关于archlinux启动字段是这样的

LABEL archlinuxlive
menu label Arch Linux Live 64bit
kernel archlinuxlive/arch/boot/x86_64/vmlinuz
append initrd=archlinuxlive/arch/boot/x86_64/archiso.img archisobasedir=arch archiso_nfs_srv=NFS_SERVER_IP:/home/pxeroot/archlinuxlive ip=:::::eth0:dhcp -

不同的linux的append字段都不一样呢

参考:http://wiki.openwrt.org/doc/howto/tftp.pxe-server

https://wiki.archlinux.org/index.php/NFS_(简体中文)

http://archlinuxarm.org/forum/viewtopic.php?f=31&t=3854

https://wiki.archlinux.org/index.php/Tftpd_server

新到手了只pogoplug,只用来做samba的话感觉稍微有点浪费,偶尔看到了网络启动系统这种东西,于是也想做一个来玩。

材料:一个dhcp服务器,一个tftp服务器,一个nfs服务器。

网上很多教程都是让pxe服务器自己包揽全部工作,这让我不高兴,dhcp这东西就该由openwrt做,文件服务就该让pogo来做,但是网上相关的教程都没有分工的内容,于是看着很多教程,自己研究了一下,终于成功了。

pxe网络拓扑

 

首先,在openwrt上改动一下dnsmasq的配置

/etc/config/dhcp

在末尾加上一段

config boot linux
        option filename 'pxelinux.0'
        option serveraddress 'tftp服务器地址'
        option servername '服务器名称'

至于服务器名称有没有要求……这个没试过,就照着本地的DNS名称填好了。

好了之后,重启dnsmasq,openwrt端的服务就算完成了。

接下来是pogoplug这边:

首先,是tftp服务器。安装tftp-hpa软件包,然后修改

/usr/lib/systemd/system/tftpd.service

中的tftpd根目录

[Unit]
Description=hpa's original TFTP daemon

[Service]
ExecStart=/usr/sbin/in.tftpd -s /srv/tftp/
StandardInput=socket
StandardOutput=inherit
StandardError=journal

先用/srv/tftp/做例子,先去下载https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.02.tar.gz,然后解压。这里只需要里面的部分文件,包括这些:

syslinux-6.02/bios/core/pxelinux.0
syslinux-6.02/bios/com32/elflink/ldlinux/ldlinux.c32
syslinux-6.02/bios/com32/menu/vesamenu.c32
syslinux-6.02/bios/com32/lib/libcom32.c32
syslinux-6.02/bios/com32/libutil/libutil.c32

讲这几个文件拷贝到/srv/tftp/,然后在/srv/tftp/里面新建一个文件夹,来存放kernel和initrd。例如/srv/tftp/ubuntu,或者直接将ubuntu的镜像文件挂载到/srv/tftp/disks/ubuntu,可以让tftp客户端直接访问到。

然后,新建一个文件夹/srv/tftpd/pxelinux.cfg,在里面新建一个default的配置文件,内容如下:

DEFAULT vesamenu.c32
PROMPT 0
MENU TITLE OpenWRT PXE-Boot Menu

label Ubuntu
        MENU LABEL Ubuntu Live 13.10 64-Bit
        KERNEL disks/ubuntu/casper/vmlinuz.efi
        APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/extstorage/tftp/disks/ubuntu1310-64/ initrd=disks/ubuntu/casper/initrd.lz
        TEXT HELP
                Starts the Ubuntu Live-CD - Version 13.10 64-Bit
        ENDTEXT

说明文字可以自行更改,kernel和initrd会通过tftp获取,在获取到kernel和initrd之后,会通过nfs加载系统。

然后启动服务器

systemctl start tftpd.socket tftpd.service

如果需要自启动tftp服务器,则使用

systemctl enable tftpd.socket

至此,tftp服务器配置完成。

然后,是配置nfs服务器:

archlinux的nfs帮助似乎出了点问题,教程不是很完整,在网友的帮助下,发现原来服务没启动完成。

要安装nfs服务,需要安装nfs-utils。

然后,修改/etc/exports,这将会控制那些目录可以被访问,例如新增这段(根据上面pxelinnux的配置):

/mnt/extstorage/tftp/disks/ubuntu1310-64/ 192.168.1.0/24(ro,fsid=0,no_subtree_check)

将会允许192.168.1.*的客户端访问/mnt/extstorage/tftp/disks/ubuntu1310-64/。完成之后,用

systemctl enable nfsd.service rpc-idmapd.service rpc-mountd.service rpcbind.service
systemctl start nfsd.service rpc-idmapd.service rpc-mountd.service rpcbind.service

启动并自启动nfs服务器(吐槽:没密码真的大丈夫?)

配置过程中发生了许多问题,这里给后人稍微提供一下解决的思路:

1:openwrt的dnsmasq配置,有没有指向正确的tftp服务器,tftp服务器能不能访问;

2:nfs服务器的挂载有没有问题。

基本上都是权限或者配置文件出错……折腾了快2天……

最近在折腾自家的树莓派,需要一个不能登录的账户来访问ftp,于是稍微查询了一些相关资料。

参考:

http://desert3.iteye.com/blog/1685734

http://www.wincold.com/archives/108.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

首先是创建一个系统用户,设置密码,并且将其shell设置为/bin/false,这将禁用其账户的shell登录功能。

再稍微进行两下Google,很快就找到所需的操作:修改/etc/shells文件,加上一行/bin/false。

然后自己尝试登录,看到filezilla的信息滚动,成功登录,但是却卡在了列出目录的那一步,没有任何返回结果,这究竟是为什么呢?

再进行了一番Google之后,发现了问题所在,原来是因为ftp的PASV模式的问题,而vsftp服务器由于没有对PASV端口范围及相应的iptables防火墙做设置,数据传输的连接被阻塞导致命令执行超时。虽然调整ftp客户端,不使用PASV模式也能够操作,但是并不是什么时候都会有ftp客户端在手的,还是弄一下好了。

使用下面的设置来启用vsftpd的PASV模式

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100

然后再设置iptables,开放PASV的端口

iptables -A INPUT -p tcp --dport 30000:30100 -j ACCEPT

然后就可以顺利的使用普通的浏览器或者windows的文件管理器进行登录了。

嗯,前几天已经强制了对博客使用https访问……感觉很好很强大,博客的等级突然就高起来了。

今天偶尔发现一个网站(https://www.ssllabs.com/ssltest/index.html),可以检查网站的安全性,于是兴冲冲的去测试了一下,结果发现了几个小问题(主要的,更零碎的就没管了)。

  • 启用了一种长度较短的加密算法;
  • 没有提供完整的证书链;
  • 可能受到BEAST攻击;

前面两个的话好说,稍微查了一下网络就ok,而且startssl也提供了完整的安装教程(lighttpd Apache nginx),略后悔没有仔细看。

问题是最后一个,BEAST攻击究竟是什么啊……

上网做了很多很多的Google,还打错字了,打成了beats,于是魔声总是出来捣乱。

最后,在一个网站(http://permalink.gmane.org/gmane.linux.debian.devel.security/16698)找到了一份方案,看起来像是一份邮件的备份。

里面提到了lighttpd的解决办法,就是在配置文件里面指定一下加密的算法,并且让服务器优先使用某些算法,就可以组织这种攻击了。

ssl.cipher-list =  "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
ssl.honor-cipher-order = "enable"

应用了之后,再去做测试,果然BEAST攻击的提示没有了。

 

SSLLab测试结果
SSLLab测试结果