分类 Linux 下的文章
Debian mourns the passing of Ian Murdock
ubuntu下/bin/sh的指向
ubuntu 下 /bin/sh 默认是dash,用ll /bin/sh就可以看出来sh是指向dash的链接,有时候会导致使用bash脚本的时候出问题。
如果遇到这个问题了,就要把sh指向bash。
可以用ln:ln -s /bin/bash /bin/sh
或者用sudo dpkg-reconfigure dash
选择否(no)
作者 yanjieee
Debian vps上开通最低权限的ssh账号
转载:Debian vps上开通最低权限的ssh账号
在某些特殊用途想,我们需要用到vps的ssh账号,但是直接使用root账户是不安全的,这时我们可以创建一个最低权限的ssh账户。
1,登陆VPS,创建一个登录脚本:
vi /bin/nologin.sh
文件中添加以下内容
#!/bin/sh
echo ""
echo " ***********************************************************"
echo " * Sorry,you can't Login by this way, press a key to exit. *"
echo " ***********************************************************"
echo ""
read x
exit
写完之后按esc,输入:wq回车保存。
2、为此文件添加执行权限:
chmod 755 /bin/nologin.sh
3、添加一个用户到nogroup组,并且指定它的启动脚本:
useradd username -g nogroup -s /bin/nologin.sh
其中username修改为你的用户名
修改密码
passwd username
根据提示输入两遍新密码即可创建成功。
4、删除该用户
userdel -r username
5、显示所有用户
awk -F: '{print $1}' /etc/passwd
定时备份VPS数据至Dropbox教程(三篇)
(一)转载:定时备份VPS数据至Dropbox教程
之前介绍了Debian vps上使用axel多线程下载百度网盘资源,对应的是想介绍下如何将VPS上的数据上传至百度网盘上。不过百度网盘现在貌似关闭了PCS的API接口申请,使用起来比较麻烦。退而求其次,这里介绍下如何定时备份VPS数据至Dropbox中。
客户端法备份数据
1、安装及配置dropbox linux客户端
在VPS上安装linux命令行版本的dropbox:
32-bit:
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf -
64-bit:
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
下载完成之后,运行dropbox
~/.dropbox-dist/dropboxd
第一次运行该命令,会提示访问URL,通过访问该URL就可以绑定VPS与dropbox账号。此时查看命令行,会提示绑定成功。
绑定之后,root目录下会自动创建名为Dropbox的文件夹,Dropbox会自动同步该文件夹内的文件。
2、使用dropbox linux客户端同步vps数据
我们一般备份网站数据及数据库数据,正常情况下网站WEB目录不在root文件夹下,我们可以通过软连接指向网站WEB目录,而数据库数据可以通过命令行导出,并通过软连接指向该文件。
为了方便区分目录,可以在Dropbox文件夹下新建backups文件夹,用于备份数据。
1)定时备份网站数据
将网站WEB目录连接到/Dropbox/backups文件夹下,假定/var/www/wordpress为网站web目录
cd ~/Dropbox/backups
ln -s /var/www/wordpress
2)定时备份数据库文件
新建一个定时备份数据库文件的脚本
vi ~/backup/mysqlbackup.sh
脚本内容如下:
echo "start mysql back up "${date} >> /root/backup/backup.log
mysqldump -uroot -p123456 wordpress >/root/backup/mysqlback.sql
其中,root为数据库的用户名,123456为数据库密码,wordpress为数据库名。
添加可执行权限
chmod a+x ~/backup/mysqlbackup.sh
将mysqlback.sql连接到/Dropbox/backups文件夹下
#!/bin/sh
cd ~/Dropbox/backups
ln -s ~/backup/mysqlback.sql
定时执行备份脚本文件,输入
crontab -e
添加以下内容
* 3 * * * /root/backup/mysqlbackup.sh
3)定时开闭dropbox linux客户端
dropbox一直开着会占用vps的内存资源,没有必要一直开着,可以利用脚本定时运行和关闭dropbox。
创建脚本 ~/backup/dropboxswitch.sh
vi ~/backup/dropboxswitch.sh
内容如下
#!/bin/sh
date=`date +%Y%m%d_%H:%M:%S`
start() {
echo "starting dropbox "${date} >> /root/backup/backup.log
/root/dropbox/.dropbox-dist/dropbox &
}
stop() {
echo "stoping dropbox "${date} >> /root/backup/backup.log
pkill dropbox
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
esac
添加可执行权限
chmod a+x ~/backup/dropboxswitch.sh
然后定时每天凌晨4点启动dropbox,6点关闭:
crontab -e
添加以下内容
* 4 * * * /root/backup/dropboxswitch.sh start
* 6 * * * /root/backup/dropboxswitc.sh stop
脚本法备份数据
1、创建Dropbox应用
首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create。
在这里,应用类型选择Dropbox API App,数据存储类型选择Files and datastores,权限选择Yes(应用只需要访问它创建的文件)。然后命名创建。
2、下载并执行dropbox_uploader.sh
dropbox_uploader 是一个第三方Dropbox备份脚本,首先下载脚本:
wget --no-check-certificate https://raw.githubusercontent.com/tennfy/Dropbox-Uploader/master/dropbox_uploader.sh
chmod a+x dropbox_uploader.sh
执行该脚本,绑定APP:
./dropbox_uploader.sh
根据提示输入Dropbox应用中的App key和App secret,许可类型选择a,确认y,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。
之后可以执行下面的命令测试上传,提示Done就是绑定成功了:
./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old
3、编写定时脚本
vi /root/backup.sh
内容如下:
#!/bin/bash
MYSQL_USER=root #mysql用户名
MYSQL_PASS=xxxxx #mysql密码
MYSQL_DATABASENAME=xxxxx #要备份的数据库名
WEB_DATA=/var/www/xxx #要备份的网站数据
#你要修改的地方从这里结束
# 定义备份存放目录
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录
LOCAL_BAK_DIR=/root/backup # 本地备份文件存放目录
#定义备份文件名字
DBBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +"%Y%m%d").tar.gz
# 定义旧数据名称
Old_DROPBOX_DIR=/$(date -d -3day +%Y-%m-%d)
OldDBBakName=Data_$(date -d -3day +"%Y%m%d").tar.gz
OldWebBakName=Web_$(date -d -3day +"%Y%m%d").tar.gz
#删除本地3天前的数据
rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/
#导出mysql数据库
mysqldump -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DATABASENAME > $LOCAL_BAK_DIR/wordpress.sql
#压缩数据库
tar zcvf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/wordpress.sql
rm -rf $LOCAL_BAK_DIR/wordpress.sql
#压缩网站数据
tar zcvf $LOCAL_BAK_DIR/$WebBakName $WEB_DATA
#开始上传
cd ~
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName
echo -e "Backup Done!"
其中,用户可以根据自己的需求改编需要备份的目录,以及保留旧数据的时长(我这里设置的是3天)
如果mysql是编译安装,需要指定mysql的路径。
增加执行权限:
chmod +x /root/backup.sh
测试该备份脚本:
./backup.sh
4.设置定时任务
执行:
crontab –e
添加以下内容:
30 3 * * * /root/backup.sh
这样,就可以每天凌晨3:30自动备份到Dropbox了。
5.最后重启Crontab
service cron restart
重启之后就设置完成了
如果你不知道服务器当前时间,可以使用下面的命令,查看当前时间:
date -R
修改为当前时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
即修改服务器时区为上海。
参考文章:
如何将VPS上的网站数据定时自动备份到Dropbox
利用dropbox备份vps数据
Dropbox用不了?
可以看看用快盘的:https://github.com/wujiwh/kuaipan_uploader
(二)如何将VPS上的网站数据定时自动备份到Dropbox
本文所讲内容为如何将网站上的文件以及数据库中的内容定时自动备份到Dropbox上。
1.创建Dropbox应用
首先,需要创建一个Dropbox应用(Dropbox目前需要翻墙),可以从该网址进行创建:https://www.dropbox.com/developers/apps/create。
在这里,应用类型选择Dropbox API App,数据存储类型选择Files and datastores,权限选择Yes(应用只需要访问它创建的文件)。然后命名创建。
2.下载并执行dropbox_uploader.sh
dropbox_uploader 是一个第三方Dropbox备份脚本,首先下载脚本:
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
然后,为该脚本添加执行权限:
chmod +x dropbox_uploader.sh
执行该脚本,绑定APP:
./dropbox_uploader.sh
根据提示输入Dropbox应用中的App key和App secret,许可类型选择a,确认y,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。
之后可以执行下面的命令测试上传,提示Done就是绑定成功了:
./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old
3.编写备份脚本
编写定时备份脚本,取名为backup.sh。其代码如下:
#!/bin/bash
# 定义需要备份的目录
WEB_DIR=/home/www # 网站数据存放目录
# 定义备份存放目录
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录
LOCAL_BAK_DIR=/home/backup # 本地备份文件存放目录
# 定义备份文件名称
DBBakName=DB_$(date +%Y%m%d).tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
# 定义旧数据名称
Old_DROPBOX_DIR=/$(date -d -7day +%Y-%m-%d)
OldDBBakName=DB_$(date -d -10day +%Y%m%d).tar.gz
OldWebBakName=Web_$(date -d -10day +%Y%m%d).tar.gz
cd $LOCAL_BAK_DIR
#使用命令导出数据库
mongodump --out $LOCAL_BAK_DIR/mongodb/ --db bastogne
#压缩数据库文件合并为一个压缩文件
tar zcf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/mongodb
rm -rf $LOCAL_BAK_DIR/mongodb
#压缩网站数据
cd $WEB_DIR
tar zcf $LOCAL_BAK_DIR/$WebBakName ./*
cd ~
#开始上传
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName
#删除旧数据
rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/
echo -e "Backup Done!"
其中,用户可以根据自己的需求改编需要备份的目录,以及保留旧数据的时长(比如我这里设置的是Dropbox保留7天,本地保留10天)。
接下来,为这个备份脚本增加执行权限:
chmod +x backup.sh
测试该备份脚本:
./backup.sh
4.设置定时任务
执行:
crontab –e
添加:
30 3 * * * /root/backup.sh
这样,就可以每天凌晨3:30自动备份到Dropbox了。
5.最后重启Crontab
service cron restart
重启之后就设置完成了
如果你不知道服务器当前时间,可以使用下面的命令,查看当前时间:
date -R
修改当前时区:
cp /usr/share/zoneinfo/主时区/次时区 /etc/localtime
例如:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
即修改服务器时区为上海。
6.Reference
本文部分内容参考自:
https://timeting.com/27/use-scripts-auto-backup-vps-to-dropbox/
http://www.pythoner.com/324.html
https://gist.github.com/tonek/5383455
3.全自动定时备份VPS数据到Dropbox
相关脚本
nano backup.sh
放到哪里无所谓,记得赋予执行权限就可以了chmod +x backup.sh
#!/bin/bash
# Settings
DROPBOX_DIR="/Backups" #Dropbox中的文件夹名称
BACKUP_SRC="/home/wwwroot/website /home/wwwroot/database" #需要备份的文件夹路径,可以同时指定多个,32MB.CN用了Sqlite数据库,Sqlite以文件形式存放,故也要备份
BACKUP_DST="/miniVPS" #用来存放备份的文件夹路径
MYSQL_SERVER="127.0.0.1" #连接本地MySQL
MYSQL_USER="root" #本地MySQL的用户
MYSQL_PASS="123456" #本地MySQL的密码
# Stop editing here
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"
LAST=$(date -d "2 months ago" +"%Y.%m.%d") #这里的时间可以根据需要进行修改,如"3 months ago"
# Backup files
ps -e | grep -c mysql
if [ $? -eq 0 ]; then
echo "Dumping databases..."
/web/mysql/bin/mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$BACKUP_DST/$NOW-Databases.sql" #这里的命令路径可以根据需要进行修改
else
echo "ERROR. Now exiting..."
exit 1
fi
if [ $? -eq 0 ]; then
echo "Packing files..."
tar -czf "$DESTFILE" $BACKUP_SRC "$BACKUP_DST/$NOW-Databases.sql"
else
echo "ERROR. Now exiting..."
exit 1
fi
if [ $? -eq 0 ]; then
/home/backup/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tgz" #这里的脚本路径可以根据需要进行修改
else
echo "ERROR. Now exiting..."
exit 1
fi
# Delete old files
if [ $? -eq 0 ]; then
/home/backup/dropbox_uploader.sh delete "$DROPBOX_DIR/$LAST.tgz" #这里的脚本路径可以根据需要进行修改
else
echo "ERROR. Now exiting..."
exit 1
fi
if [ $? -eq 0 ]; then
echo "Cleaning the backups..."
rm -f "$BACKUP_DST/$NOW-Databases.sql"
rm -f "$BACKUP_DST/$LAST.tgz"
else
echo "ERROR. Now exiting..."
exit 1
fi
其中的dropbox_uploader.sh
是Dropbox上传下载脚本,
主页:http://www.andreafabrizi.it/?dropbox_uploader
apt-get install git
git clone http://github.com/andreafabrizi/Dropbox-Uploader.git
cd Dropbox-Uploader
chmod +x dropbox_uploader.sh
mv dropbox_uploader.sh /home/backup/
初始化脚本,并按照脚本中的提示到对应的Dropbox的网页中创建API,在脚本的交互界面中输入生成的Key
./dropbox_uploader.sh
初始化完成以后,便可以立即执行一次backup.sh脚本进行备份了
/home/backup/backup.sh
定时任务
光弄好了脚本可不行,没添加定时任务怎么定时备份。
crontab -e
设置为每天执行一次备份,具体时间可以根据需要进行修改
30 1 * * * sh /home/backup/bbackup.sh
from
Debian vps进程监控并自动重启
转载:Debian vps进程监控并自动重启
使用过lnmp一键包的同学可能很多都遇到502错误,解决502错误比较好的一个方法是定时重启php进程。由于linux的机制,进程占用过多内存时会被kill掉,此时也需要重启该进程。今天tennfy来介绍下如何对debian vps中进程进行监控并自动重启。
进程监控脚本
1、确定进程名
运行想要监控的程序之后,执行以下命令:
ps -ef
会列出系统中所有的进程,在CMD一列里找到该程序对应的进程名。
2、进程监控脚本
在root目录下新建monitor脚本
vi /root/monitor.sh
添加以下内容,注意将procname替换为待监控的进程名,/etc/init.d/procname restart替换为该进程的重启命令
#! /bin/sh
proc_name="procname" # 待监控进程名
number=`ps -ef | grep $proc_name | grep -v grep | wc -l`
if [ $number -eq 0 ] # 判断进程是否存在
then
/etc/init.d/procname restart # 重启进程的命令,请相应修改
fi
添加完成后,输入:wq保存修改。
设置可执行权限
chmod a+x /root/monitor.sh
添加到crontab定时任务
设置好脚本之后,添加到crontab定时任务中,每分钟执行一次脚本
echo "* * * * * root /root/monitor.sh >/dev/null 2>&1" >>/etc/crontab
/etc/init.d/cron restart
小结
如果你希望监控多个进程程序,添加多个脚本即可,该方法非常实用,很多时候都能用到。
Linux下让SSH/SOCKS成为全局代理 轻松冲浪
最近要apt-add-repository 个 ppa装个东西,发现电信下那速度实在太慢了,无法,只能代理下了。LINUX下可以实现SSH全局代理的软件有tsocks和proxychains两种,但是个人感觉proxychains要更加稳定简单。
假设代理为127.0.0.1,端口为7000。我在Ubuntu下安装。
安装很简单:
sudo apt-get install proxychains
配置:
sudo vi /etc/proxychains.conf
要选 dynamic_chain,而不是random_chain和strict_chain。即注释掉strict_chain和random_chain那两行。
然后在最后的[ProxyList]下面添加: socks5 127.0.0.1 7000
使用方法:
proxychains <程序名>
即可让程序使用代理。
PS:7000端口是我本地的SSH端口,因为我用的是ssh -D 7000。
iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链
转载于:http://lesca.me/archives/iptables-examples.html
详情看:http://lesca.me/topics/network/iptables
看了那么多iptables的教程,这篇教程还是比较全面易懂的
其他:Debian VPS下使用iptables防火墙
iptables防火墙的实例教程
本文介绍25个常用的iptables用法。如果你对iptables还不甚了解,可以参考上一篇iptables详细教程:基础、架构、清空规则、追加规则、应用实例,看完这篇文章,你就能明白iptables的用法和本文提到的基本术语。
一、iptables:从这里开始
删除现有规则
iptables -F (OR) iptables --flush
设置默认链策略
iptables的filter表中有三种链:INPUT, FORWARD和OUTPUT。默认的链策略是ACCEPT,你可以将它们设置成DROP。
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
你需要明白,这样做会屏蔽所有输入、输出网卡的数据包,除非你明确指定哪些数据包可以通过网卡。
屏蔽指定的IP地址
以下规则将屏蔽BLOCK_THIS_IP所指定的IP地址访问本地主机:
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP (或者仅屏蔽来自该IP的TCP数据包) iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
允许来自外部的ping测试
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
允许从本机ping外部主机
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
允许环回(loopback)访问
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
二、iptables:协议与端口设定
允许所有SSH连接请求
本规则允许所有来自外部的SSH连接请求,也就是说,只允许进入eth0接口,并且目的端口为22的数据包
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
允许从本地发起的SSH连接
本规则和上述规则有所不同,本规则意在允许本机发起SSH连接,上面的规则与此正好相反。
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
仅允许来自指定网络的SSH连接请求
以下规则仅允许来自192.168.100.0/24的网络:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
上例中,你也可以使用-s 192.168.100.0/255.255.255.0作为网络地址。当然使用上面的CIDR地址更容易让人明白。
仅允许从本地发起到指定网络的SSH连接请求
以下规则仅允许从本地主机连接到192.168.100.0/24的网络:
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
允许HTTP/HTTPS连接请求
# 1.允许HTTP连接:80端口 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # 2.允许HTTPS连接:443端口 iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
允许从本地发起HTTPS连接
本规则可以允许用户从本地主机发起HTTPS连接,从而访问Internet。
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
类似的,你可以设置允许HTTP协议(80端口)。
-m multiport:指定多个端口
通过指定-m multiport选项,可以在一条规则中同时允许SSH、HTTP、HTTPS连接:
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
允许出站DNS连接
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
允许NIS连接
如果你在使用NIS管理你的用户账户,你需要允许NIS连接。即使你已允许SSH连接,你仍需允许NIS相关的ypbind连接,否则用户将无法登陆。NIS端口是动态的,当ypbind启动的时候,它会自动分配端口。因此,首先我们需要获取端口号,本例中使用的端口是853和850:
rpcinfo -p | grep ypbind
然后,允许连接到111端口的请求数据包,以及ypbind使用到的端口:
iptables -A INPUT -p tcp --dport 111 -j ACCEPT iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT iptables -A INPUT -p udp --dport 853 -j ACCEPT iptables -A INPUT -p tcp --dport 850 -j ACCEPT iptables -A INPUT -p udp --dport 850 -j ACCEPT
以上做法在你重启系统后将失效,因为ypbind会重新指派端口。我们有两种解决方法:
1.为NIS使用静态IP地址
2.每次系统启动时调用脚本获得NIS相关端口,并根据上述iptables规则添加到filter表中去。
允许来自指定网络的rsync连接请求
你可能启用了rsync服务,但是又不想让rsync暴露在外,只希望能够从内部网络(192.168.101.0/24)访问即可:
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
允许来自指定网络的MySQL连接请求
你可能启用了MySQL服务,但只希望DBA与相关开发人员能够从内部网络(192.168.100.0/24)直接登录数据库:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
允许Sendmail, Postfix邮件服务
邮件服务都使用了25端口,我们只需要允许来自25端口的连接请求即可。
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
允许IMAP与IMAPS
# IMAP:143 iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT # IMAPS:993 iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
允许POP3与POP3S
# POP3:110 iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT # POP3S:995 iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
防止DoS攻击
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
- -m limit: 启用limit扩展
- –limit 25/minute: 允许最多每分钟25个连接
- –limit-burst 100: 当达到100个连接后,才启用上述25/minute限制
三、转发与NAT
允许路由
如果本地主机有两块网卡,一块连接内网(eth0),一块连接外网(eth1),那么可以使用下面的规则将eth0的数据路由到eht1:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
DNAT与端口转发
以下规则将会把来自422端口的流量转发到22端口。这意味着来自422端口的SSH连接请求与来自22端口的请求等效。
# 1.启用DNAT转发 iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to-destination 192.168.102.37:22 # 2.允许连接到422端口的请求 iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
假设现在外网网关是xxx.xxx.xxx.xxx,那么如果我们希望把HTTP请求转发到内部的某一台计算机,应该怎么做呢?
iptables -t nat -A PREROUTING -p tcp -i eth0 -d xxx.xxx.xxx.xxx --dport 8888 -j DNAT --to 192.168.0.2:80 iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.2 --dport 80 -j ACCEPT
当该数据包到达xxx.xxx.xxx.xxx后,需要将该数据包转发给192.168.0.2的80端口,事实上NAT所做的是修改该数据包的目的地址和目的端口号。然后再将该数据包路由给对应的主机。
但是iptables会接受这样的需要路由的包么?这就由FORWARD链决定。我们通过第二条命令告诉iptables可以转发目的地址为192.168.0.2:80的数据包。再看一下上例中422端口转22端口,这是同一IP,因此不需要设置FORWARD链。
SNAT与MASQUERADE
如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j snat --to-source 192.168.5.3
对于snat,不管是几个地址,必须明确的指定要snat的IP。假如我们的计算机使用ADSL拨号方式上网,那么外网IP是动态的,这时候我们可以考虑使用MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
负载平衡
可以利用iptables的-m nth扩展,及其参数(–counter 0 –every 3 –packet x),进行DNAT路由设置(-A PREROUTING -j DNAT –to-destination),从而将负载平均分配给3台服务器:
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
自定义的链
记录丢弃的数据包
# 1.新建名为LOGGING的链 iptables -N LOGGING # 2.将所有来自INPUT链中的数据包跳转到LOGGING链中 iptables -A INPUT -j LOGGING # 3.指定自定义的日志前缀"IPTables Packet Dropped: " iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7 # 4.丢弃这些数据包 iptables -A LOGGING -j DROP
References:
[1] 25 Most Frequently Used Linux IPTables Rules Examples
[2] iptables: SNAT, DNAT, MASQUERADE的联系与区别
vps
https://bandwagonhost.com/index.php
https://virmach.com/
vps安全设置:
ssh 登陆:
ssh root@127.0.0.1 -p 1234
改 root 密码
passwd root
输入两次密码<密码无显示>
如何知道自己的VPS账号正在遭受坏人的扫描和暴力破解呢?
简单的方法就是查看日志:cat /var/log/auth.log
改sshd端口
vi /etc/ssh/sshd_config
/etc/ssh/sshd_config
重启sshd服务:
/etc/init.d/sshd restart #CentOS 6
systemctl restart sshd.service #CentOS 7
参考https://blog.csdn.net/doubleface999/article/details/73358003
检查端口
netstat -nlpt | grep ssh
安装Centos7下安装netstat
yum install net-tools
root是Linux下权限最大的一个用户,
而也是黑客最喜欢的一个用户,
若获取到了root权限,则代表了您的VPS完全陷落,
所以,将root用户禁止登录SSH,
使用另外一个用户来管理您的VPS将是一个很不错的主意。
首先添加一个用户
添加用户:
useradd 123
给新用户设置密码:
passwd 123
更改SSH
vi /etc/ssh/sshd_config
添加配置AllowUsers root 123 #设置刚才创建的 123 可以登录
先把root也加上,不然登陆不了
重启下SSH
service sshd restart (/etc/init.d/sshd restart)
systemctl restart sshd.service #CentOS 7
限制su命令
vi /etc/pam.d/su
添加如下两行
centos 6
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd
执行
usermod -G10 123
这样就只有 123 用户可以使用su命令了
centos 7
centos7用户权限设置 https://blog.csdn.net/qooer_tech/article/details/41802717
auth required /usr/lib64/security/pam_wheel.so use_uid
auth sufficient /usr/lib64/security/pam_rootok.so debug
auth required /usr/lib64/security/pam_wheel.so group=wheel
修改/etc/login.defs
文件,在最后添加SU_WHEEL_ONLY yes
将新添加的普通用户添加的wheel组中,命令usermod -G wheel 用户名
123切换到root
su - root
然后输入 root 密码
禁止ping
防止别人Ping通自己的服务器是一个很不错的安全设置,运行命令
此文件开始为空
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
这样别人Ping自己的服务器时就根本无法Ping通了
systemctl restart iptables.service
使用密匙登陆SSH
在VPS上 输入指纹登陆
生成4096位密钥
ssh-keygen -t rsa -b 4096
将公钥拷贝至服务器对应用户的.ssh
下,重命名为authorized_keys
cat id_rsa.pub >> authorized_keys
或
scp -P xxxxx ~/.ssh/id_rsa.pub server:/root/.ssh/authorized_keys
如果已经存在authorized_keys
,需要将公钥追加至authorized_keys
scp -P xxxxx ~/.ssh/id_rsa.pub server:/root/.ssh/tmp.pub
# 在服务器端执行
cat /root/.ssh/tmp.pub >> /root/.ssh/authorized_keys
ssh 登陆 设置Putty SSH使用密钥登录Linux VPS主机
禁止使用密码登陆
vim /etc/ssh/sshd_config
PasswordAuthentication no
若报错
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
删除~/.ssh/known_hosts
文件
rm ~/.ssh/known_hosts
检查登录日志
如果你的服务器一直很正常,那也可能不正常的表现,
最好的办法就是定期查询ssh的登录日志,手动发现系统的异常!
vim /etc/ssh/sshd_config
add LogLevel DEBUG
查看最近100条登录日志
tail -100 /var/log/secure
登录成功日志
who /var/log/wtmp
last
参考:
CentOS(5.8/6.4)linux生产环境若干优化实战
基于CentOS系统的VPS安全设置与优化
ubuntu
sudo apt-get update
apt-get install htop
apt-get install unzip
apt-get -y install wget screen
centos
yum install -y unzip zip
cp -Rf /home/user1/* /root/temp/
将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
即格式为:cp -Rf 原路径/ 目的路径/
1024以下端口需要管理员权限
增强VPS 安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击
洛杉矶MC
目前阿里新加坡的性价比最高
说实在的vultr牌子虽然比瓦工大,稳定性还是瓦工靠谱
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
自己测一测就知道了,不管超兽多少,是否正在搞促销,瓦工的io根本不崩
BandwagonHost搬瓦工
原官方网页隐藏优惠码(F12)(现在找不到了)
目前,BandwagonHost最新优惠码如下:
1、IAMSMART5K717Q
(4%)
2、IAMSMART5EM2BR
(4.28%)
3、IAMSMART5C48JJ
(4.7%)
4、IAMSMART5SS6ML
(4.72%)
5、IAMSMART5GRNII
(4.82%)
6、IAMSMART5EL5BM
(4.96%)
7、IAMSMART5FQ956
(5%)
8、BWH1ZBPVK
(6%)
9、BWH26FXH3HIQ
(6.25%)
10、BWH34QMFYT2R
(6.38%)
SPECIAL PROMOCODE: IAMSMART5FQ956 - 5% Recurring Discount(5% Recurring Discount)
Bandwagonhost Promotional Code BWH1ZBPVK - 6% Recurring Discount
点我购买KVM 512M 500M/Month $18.99/Year 6 Locations
搬瓦工 CN2 两个机房的选择:DC3 和 DC8 哪个好?
瓦工我走自己的AFF没效果。
购买IP和你的账号Ip 要不一样,付款PP和收款PP也不一样
搬瓦工怎么选CN2?
dc3和dc8
SPECIAL为固定机房套餐,分CN2、CN2 GIA、香港三种线路
VZ - PROMO为OpenVZ可换机房套餐、 KVM - PROMO为KVM可换机房套餐,可切换到CN2,但流量变为1/3
Other VPS
https://virmach.com/special-offers
https://billing.virmach.com/cart.php?gid=22
https://bwh1.net/aff.php?aff=1830&pid=43 bwh1
https://bwh8.net/aff.php?aff=1830&pid=43 bwh8
https://miao.hu/2017/04/15/fuck-gfw
续期
2021年4月10日
包年包月2021-02-05 10:10:51到期
使用Linux VPS(Centos)搭建公共DNS解析服务器
转载于:使用Linux VPS(Centos)搭建公共DNS解析服务器
inux安装dnsmasq搭建dns公共解析服务器
安装环境Centos 6 x86
首先,我们需要安装dnsmasq。安装指令如下:
yum install dnsmasq
下面我们就需要配置DNSMASQ了,配置文件一般位于路径/etc/dnsmasq.conf。
基本上配置文件内容如下所示:
# /etc/dnsmasq.conf
# Set up your local domain here
domain=raspberry.local
resolv-file=/etc/resolv.dnsmasq
min-port=4096
server=8.8.8.8
server=8.8.4.4
# Max cache size dnsmasq can give us, and we want all of it!
cache-size=10000
# Below are settings for dhcp. Comment them out if you dont want
# dnsmasq to serve up dhcpd requests.
# dhcp-range=192.168.0.100,192.168.0.149,255.255.255.0,1440m
# dhcp-option=3,192.168.0.1
# dhcp-authoritative
这里的server所指示的就是上级DNS服务器的地址,这里用的是Google的8.8.8.8和8.8.4.4,
也就是说本地缓存查不到的域名将会发送给上级DNS服务器然后本地再缓存结果,
可以改成你所需要的,一般就用谷歌的,我就不改了:-)
如果你改动过设置,请重启服务:
sudo service dnsmasq restart
到这里基本上就配置完成了,你可以在VPS上nslookup或者dig一下看看结果,当然如果找不到这些命令是因为你没有安装dnsutils,直接通过下面的命令安装即可:
sudo apt-get install dnsutils
这里再讲解一个小技巧,大家电脑上的hosts文件一般不陌生,在DNS被投毒污染或者我们需要配置测试Web服务器时会要改这里的域名和IP对应关系,这里我们可以让dnsmasq替我们代劳。切换到/etc/dnsmasq.d/路径下,新建一个test.conf文件,内容如下:
address=/appspot.com/74.125.155.141
别忘了重启一下服务:
sudo service dnsmasq restart
这样当查询appspot.com的时候,dnsmasq将直接返回这里设定的IP地址,轻松避免了DNS投毒攻击。
使用VPS 架设Http代理服务器
转载于:https://b.lxd.cc/squid.html
测试环境是Centos 6 x86
第一步:安装squid
yum install squid
第二步
编辑/etc/squid/squid.conf
将http_access deny all 中deny 改为allow
http_port后面的是端口号,默认为3128。可改可不改。
第三步编辑 完成后
service squid restart
即可
大功告成了。