分类 Linux 下的文章


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账号
在某些特殊用途想,我们需要用到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教程

之前介绍了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,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。
dropbox_uploader1
之后可以执行下面的命令测试上传,提示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

申请Dropbox访问API

允许API访问你的Dropbox

初始化完成以后,便可以立即执行一次backup.sh脚本进行备份了

/home/backup/backup.sh

定时任务
光弄好了脚本可不行,没添加定时任务怎么定时备份。

crontab -e

设置为每天执行一次备份,具体时间可以根据需要进行修改

30 1 * * * sh /home/backup/bbackup.sh

from


转载: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

小结

如果你希望监控多个进程程序,添加多个脚本即可,该方法非常实用,很多时候都能用到。


最近要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。

转载:Linux下让SSH/SOCKS成为全局代理 轻松冲浪


转载于: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的联系与区别


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 哪个好?

https://justhost.ru/hosting/

瓦工我走自己的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

http://iytc.net/bwg/index.php

续期
2021年4月10日
包年包月2021-02-05 10:10:51到期


转载于:使用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投毒攻击。