使用iptables配置防火墙后本机无法访问外部网络

2012年4月3日 没有评论

在一台centos和ubuntu的主机上使用配置了防火墙,就是添加几条简单规则。规则确实是生效了,因为很好的屏蔽掉外部的非法请求,但是本机却无法和外部通信,包括同一个局域网的其他机器和外部互联网上的机器,连最基本的ping都无法成功。在防火墙规则里面只是对INPUT做了限制,OUTPUT和FORWORD没有任何限制,这有点想不通,只好google一把,发现有人也是遇到这样的问题,解决的办法是添加如下规则:

/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

果然添加后就能正常和外部通信了。

为何在没有添加上述规则就不能通信?因为建立一个通信连接需要服务器端和客户端交互才能完成。举例来说,从本机使用ssh客户端去登陆外部的ssh服务器,假设使用端口为12345,那么本就使用tcp端口号12345向服务器22端口发送一个请求,这个属于OUTPUT,由于OUTPUT规则没有任何限制,所以可以顺利到达服务器,服务器收到请求后,服务器会回应本机的tcp 12345端口,此时回应属于INPUT,如果INPUT中配置放行此规则,那么连接就无法完成,也即是本机无法和外部通信。外部的网络那么多,总不能逐条去配置INPUT规则,所以为了能访问外部网络,必须要配置上述规则。

关于state的更多解释可以参考:iptables中state模块的连接状态

centos中设置hostname

2012年4月3日 没有评论

centos中可以通过命令:

hostname
或
uname -n

来查看当前的主机名,如果没有设置的话会默认设置成localhost,具体原因可以看启动脚本:/etc/rc.d/rc.sysinit。

如果要修改主机名,可以把文件:/etc/sysconfig/network 中的HOSTNAME修改成自己希望的名字即可。

分类: Linux 标签:

阿里云服务器硬盘挂载

2012年4月3日 没有评论

阿里云提供云服务器的硬盘由两块组成,一块是系统盘,一块是数据盘,默认数据盘是没有挂载的,如果要用到数据盘就需要自己手动挂载。通过命令fdisk -l,可以看到设备名为/dev/xvdb。另外在挂载前要对硬盘(/dev/xvdb)分区和格式化。分区使用命令fdisk,格式化命令为mkfs.ext3。

fdisk /dev/xvdb

(输入n)
Command (m for help): n 

Command action
   e   extended
   p   primary partition (1-4)
(输入p)
p

(输入1)
Partition number (1-4): 1

(输入p)
Command (m for help): p

(输入w)
Command (m for help): w

此时在使用fdisk -l查看应该可以看到类似下面的结果
Disk /dev/xvdb: 246.9 GB, 246960619520 bytes
255 heads, 63 sectors/track, 30024 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1               1       30024   241167748+  83  Linux

上述执行完分区了,最好在执行格式化前重启一下机器。

格式化分区
mkfs.ext3 /dev/xvdb1 

格式化根据硬盘的大小不同时间也不同,就等待吧。

假设把此硬盘挂在在 /data目录下,先创建data
mkdir -pv /data

挂载硬盘
mount /dev/xvdb1 /data 

写入分区表
echo "/dev/xvdb1		/data		ext3	defaults	1 1" > /etc/fstab

也可以直接写入分区表后使用 mount -a 来使之生效。

阿里云上安装gcc

2012年4月1日 没有评论

以前使用的aws和盛大的云主机,直接用yum来安装gcc,一条命令就搞定,命令为:

yum -y install gcc  gcc-c++

今天准备开始用阿里云,申请了一台centos 64位机器,使用上述命令安装gcc时出错,听说是阿里云处于安全考虑,生产环境不提供编译工具。想要安装不是不可能的,很简单,只有修改一下/etc/yum.conf文件即可,把文件中的

exclude=kernel*

行注释即可,注释符号为#。也可以使用如下命令来安装:

sed -i 's/^exclude/#exclude/'  /etc/yum.conf && yum -y install gcc gcc-c++ && sed -i 's/^#exclude/exclude/'  /etc/yum.conf
分类: Linux 标签:

linux 根据文件大小查找文件

2012年3月29日 没有评论

linux下的find命令用来查找文件,通过man find就知道它是无所不能的。所以按照文件大小来查找文件就不在话下。从man find搜索size,可以看到如下信息:

-size n[cwbkMG]
	  File uses n units of space.  The following suffixes can be used:

	  b    for 512-byte blocks (this is the default if no suffix is used)

	  c    for bytes

	  w    for two-byte words

	  k    for Kilobytes (units of 1024 bytes)

	  M    for Megabytes (units of 1048576 bytes)

	  G    for Gigabytes (units of 1073741824 bytes)

注意:默认单位是b,而它代表的是512字节,所以2表示1K,1M则是2048,如果不想自己转换,可以使用其他单位,如c、K、M等。

例子:查找当前目录下文件大小为2048(2k)字节的文件

find ./ -size 4
或
find ./ -size 2048c
或
find ./ -size 2K

上述查找文件是等于指定大小的,那能不能查询大于或小于某个指定值的文件呢,答案是肯定,例如:

查找大于2K的文件,+ 表示大于
find ./ -size +2048c

查找小于2K的文件,- 表示小于
find ./ -size +2048c -type f

一条命令列出当前网络连接状态分类汇总

2012年3月29日 没有评论
netstat -nt | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

nginx Too many open files

2012年3月29日 没有评论

默认情况下linux文件系统最大可打开文件数为1024,对于一个应用于生产环境下的服务器来说,这个设置太下,例如在用nginx做web服务器,当并发达到一定数量时,可以看到error.log里出现大量的“Nginx accept() failed (24: Too many open files)” 错误。解决这个问题的办法有两种:

方法一:使用ulimit -n 655350 把打开文件上限设置为655350,同时还需要修改nginx的配置文件,把worker_rlimit_nofile 值设置为一样。

注意:通过ulimit修改打开文件上限只会影响当前shell环境,所以这是一个临时解决方法,终极解决方法使用方法二。

方法二:在/etc/security/limits.conf文件中添加如下信息:

* soft nofile 655360
* hard nofile 655360

注意:这个方法修改后必须重启机器才能使之生效。

分类: Linux, nginx 标签:

如何查看linux版本

2012年3月29日 没有评论

查看linux内核版本:

cat /proc/version
或
uname -a

查看linux发行版(系统)名称和版本:

lsb_release -a

ubuntu 下
cat /etc/lsb-release
centos 下
cat /etc/redhat-release
或者
cat /etc/*release

从视频文件提取音频并存储为MP3格式文件

2012年3月29日 没有评论

在linux世界里,进行视频格式转化的软件有很多,其中大名鼎鼎的ffmpeg和mplayer下的mencoder。本文主要介绍如何从视频文件中提起音频,同时保存成mp3格式的文件。

格式转换其实就是经过解码和重新编码两个过程,如果系统不存在对应的解、编码器,就需要额外安装。ffmpeg自带了MP2格式的编码器,对于MP2格式的音频,普通电脑上的播放器似乎都能支持,但大部分手机的播放器不支持,所以为了通用,还是生成MP3格式的音频。MP3编码器可以使用lame。

在centos和ubuntu下,ffmpeg似乎不在标准的源中,不能使用yum或apt-get来安装,其实源码安装也是很容易的,这里就介绍的就是通过源码安装,安装前确保机器上有gcc,如果没有安装,先通过yum安装。

安装 lame

下载地址:http://sourceforge.net/projects/lame/files/lame/

使用wget下载到本机
wget http://nchc.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz

解压文件:
tar -xvf lame-3.99.5.tar.gz

编译安装:
cd lame-3.99.5
./configure && make && make install

检查本机是否有yasm(不知道是干什么用的),在ffmpeg执行configure时会用到它,不过可以disabled掉,也可以装上它
安装yasm:

下载地址:http://www.tortall.net/projects/yasm/releases/

下载文件:
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz

解压并编译安装:
tar -xvf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure && make && make install

安装ffmpeg

下载地址:http://www.ffmpeg.org/download.html

下载文件:
wget http://www.ffmpeg.org/releases/ffmpeg-0.10.2.tar.bz2
也可以使用svn、git下载最新版本

解压文件:
tar -xvf ffmpeg-0.10.2.tar.bz2

编译安装:
cd ffmpeg-0.10.2
./configure --prefix=/usr/local/ffmpeg --enable-libmp3lame
make && make install

--enable-libmp3lame 是让ffmpeg在编码时可以使用MP3编码器

至此,软件都安装好了。注意:如果使用ffmpeg出现如下错误信息:

ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory

其原因是lame编译好的库文件安装在/usr/local/lib/下,而ffmpeg是去/usr/lib/下找,解决的办法是做一个软链接即可:

ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0

假设视频文件名称为01.flv,下面详细介绍如何从里面提取去音频。

通过ffmpeg来查看视频文件信息:

ffmpeg -i 01.flv

输出大致为:
  Duration: 00:01:10.21, start: 0.000000, bitrate: 284 kb/s
    Stream #0.0: Video: h264, yuv420p, 512x288 [PAR 513:512 DAR 57:32], 252 kb/s, 15 tbr, 1k tbn, 30 tbc
    Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 32 kb/s

可以看到音频编码用的acc,所以需要看看ffmpeg是否支持acc的解码,命令为:

ffmpeg -codecs | grep aac

如果看到下面类似输出,表示支持
DEA    aac             Advanced Audio Coding

DEA中的D表示decoder,E表示encoder,A表示Audio Codec

由于要转换成MP3格式的音频,所以就需要查看是否存在MP3编码器,命令为:

ffmpeg -codecs | grep mp

如果输出中存在如下信息即表示支持
  EA    libmp3lame      libmp3lame MP3 (MPEG audio layer 3)

DEA    mp2             MP2 (MPEG audio layer 2)

注意:如果没有看到libmp3lame,就不能进行MP3格式的编码,但是可以使用MP2格式的编码,一个很奇怪的问题,我在一台机器上编译ffmpeg时候使用enable lame,安装ffmpeg还是不支持MP3编码,另外一台机器上就是好的。不过可以通过lame来把MP2格式的音频转换为MP3格式,所以就算ffmpeg在编译时候没有指定使用MP3编码器,也一样可以得到MP3格式的音频文件。

有了上面的知识,现在就来说怎么从视频中获取音频

1、先获取MP2编码的音频在使用lame来重新编码 
ffmpeg -i 01.flv -f mp2 -vn t.mp3
lame t.mp3 01.mp3

-i 输入文件, -f 输出使用的编码格式  -vn 禁止视频输出   t.mp3 输出的文件名
使用lame命令还可以在MP3文件中增加一些额外信息,更多信息可以使用 lame --help id3 查看

2、一步到位直接使用MP3编码器 
ffmpeg -i 01.flv -f mp3 -vn 01.mp3
或
ffmpeg -i 01.flv -acodec libmp3lame -vn 01.mp3

另外使用mplayer和mencoder获取音频命令为:

mencoder 01.flv -oac mp3lame -ovc lavc -o t.avi

mplayer -dumpaudio -dumpfile 01.mp3 t.avi

现在很多视频网站上的一个长视频都是分成很多小段的,如何把一个长视频音频提取到一个音频文件中,在linux中,借用cat命令就很容易实现。假设视频有三段,先使用上面提到的命令获取三个独立的音频文件01.mp3、02.mp3和03.mp3,合并的命令为:

cat 01.mp3 02.mp3 03.mp3 > comp.mp3

修改sshd服务器的默认端口

2012年3月26日 没有评论

一台放在公网上的web服务器,sshd服务使用默认端口,今天用lastb看了一下,发现非常多试图通过ssh来连接的用户,算好密码设置的比较强健,没有被攻破。为了服务器安全考虑,所以决定修改sshd服务的端口,修改端口很容易,只需要把配置文件中的默认端口设置成一个空闲端口即可,配置文件为 /etc/ssh/sshd_config,找到Port 22,把22修改成自己喜欢端口即可,如果配置文件这行前面有注释符号(#),需要去掉,重新sshd服务即可,重启命令为:

/etc/init.d/sshd restart
或
service sshd restart

修改配置容易,但是需要注意,如果使用iptables之类的防火墙,最好先确认新端口是开放的,防止重启sshd后无法连接上服务器。另外重启sshd服务对已有的连接不会重置,可以在重启前多开几个终端先连接上,然后再重启服务,这个时候新开终端使用修改后的端口来连接,确保可以正常连接再断了老的连接。

另外,如果使用了rsync通过ssh协议来进行远程数据备份,也需要做相应的修改,例如:

ssh使用默认端口情况下:
/usr/bin/rsync  -vzrtopg  --progress -e ssh root@192.168.1.211:/home/backups/ /data/backups

ssh不是默认端口,假设自定义sshd端口为3323
/usr/bin/rsync  -vzrtopg  --progress -e "ssh -p 3323" root@192.168.1.211:/home/backups/ /data/backups
分类: Linux 标签:

无觅相关文章插件,快速提升流量