Author: jpuyy

  • iptables的Destination NAT (DNAT)

    Destination NAT (DNAT) 将内网的特定服务暴露在外网,而不用直接把内网电脑连到外网。只要没有更多的服务同时使用那个端口,只需一个外网的连接即可。

    做为gateway把链接转向到特定端口到指定的内部电脑和端口,再回转到外部网络。

    因为DNAT涉及到修改封包的目标地址和/或端口是在它们交给本地程序和交给其他电脑之前的,所以在nat表中表现为PREROUTING链。

    例如,进入的连接从网关的80端口到内部网络的192.168.1.3的8080端口,可以使用这样一条规则:

    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:8080
  • iptables的Source NAT和Masquerading

    来自于

    Linux iptables Pocket Reference

    Source NAT(SNAT) 是用来在多台电脑之间分享上网的,充当gateway的电脑用SNAT(同时开启connection tracking)来重写内外网之间的包。向外去的包被打上gateway的IP地址。当外部响应后,会建立到网关IP的连接,网关接收到这些包后,网关截获到这些包后,把目标地址转到成正确的内部电脑上。

    因为SNAT 是在包离开内核之前接受修改了它的地址和/或端口,在NAT表中表现为POSTROUTING.

    在iptables中有两种实现SNAT的方式:

    目标操作为SNAT,在网关ip是固定的时候

    iptables -t nat -A POSTROUTING -o eth1 -j SNAT

    而使用MASQUERADE是防止掉线后再连接ip地址发生变化的出现。

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

    如果用ip的方式全部转发给192.168.1.16可用

    /sbin/iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.16

    forwarder 机器

    -A PREROUTING -p tcp -m tcp --dport 30101 -j DNAT --to-destination 74.12.20.82:443
    -A POSTROUTING -d 74.12.20.82/32 -p tcp -m tcp --dport 443 -j MASQUERADE
    
  • CentOS6.2的iptables基础

    来自于

    Linux iptables Pocket Reference

    CentOS的iptables规则保存在/etc/sysconfig/iptables

    查看iptables的启动级别

    [root@localhost ~]# chkconfig --list iptables
    iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off

    调整启动级别可以用如下命令

    chkconfig --levels 345 iptables on

    启动iptables

    service iptables start

    停用iptables

    service iptables stop

    一些伪文件:(存在于/proc)

    /etc/sysctl.conf在启动里创建了/proc/sys,如配置pptp-vpn的时候,在sysctl.conf里加入net.ipv4.ip_forward=1开机后,查看/proc/sys/net/ipv4/ip_forward,就会发现变为1.

    /proc/sys/net/ipv4/ip_conntrack_max,当出现“ip_conntrack: table full, dropping packet”错误时,你需要在/etc/sysctl.conf加值。

    用uname -r可查看内核版本信息

    uname -a查看全部信息,具体见(manpage of uname).

    几个状态的说明

    ESTABLISHED 已经监测到双向发送的包

    INVALID 什么都没有

    NEW 有新的连接或监测到一部分

    RELATED 有新的连接,且新连接是基于已有连接

    连接监测主要是连接的前三个比特。

    conntrack 参数,(–ststatus选项)有

    ASSURED TCP连接,说明TCP已经连接,UDP雷同

    EXPECTED 说明连接是已知的

    SEEN_REPLY 说明已经监测到双向发送的包,参见ESTABLISHED

    内核统计

    内核会自动统计通过iptables的每一条规则的包和字节。

    例如,eth0代表内网,eth1代表外网

    iptables -A FORWARD -i eth1
    iptables -A FORWARD -o eth1
    iptables -A INPUT -i eth1
    iptables -A OUTPUT -o eth1

    iptables记录了与外网的交换的包和流量数,通过iptables -L -v查看 INPUT和OUTPUT的包和流量如下

    Chain INPUT (policy ACCEPT 27 packets, 1728 bytes)
    pkts bytes target prot opt in out source destination
    3 192 all -- eth1 any anywhere anywhere
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 all -- eth1 any anywhere anywhere
    0 0 all -- any eth1 anywhere anywhere
    Chain OUTPUT (policy ACCEPT 21 packets, 2744 bytes)
    pkts bytes target prot opt in out source destination
    3 192 all -- any eth1 anywhere anywhere

    如查想指定哪些包通过NAT,把包-j(jump)到特殊目标ACCEPT.要早于其他NAT规则

    iptables -t nat -i eth1 ... -j ACCEPT

     

  • Centos6.2 x64 安装lamp环境

    参见:

    http://www.howtoforge.com/installing-apache2-with-php5-and-mysql-support-on-centos-6.2-lamp

    1、安装mysql:

    yum install mysql mysql-server

    设置开机启动,启动mysql

    chkconfig --levels 235 mysqld on
    /etc/init.d/mysqld start

    此时的mysql是没有root密码的,运行下面向导:

    mysql_secure_installation

    2、安装apache2

    yum install httpd

    设置apache开机启动,并启动apache,这里打开http://你的ip/可以看到apache的欢迎页面,记得把iptables的80端口打开

    chkconfig --levels 235 httpd on
    /etc/init.d/httpd start

    Apache在CentOS下默认程序路径为 /var/www/html ,默认配置文件 /etc/httpd/conf/httpd.conf. 扩展配置文件在 /etc/httpd/conf.d/

    3、安装php5和Apache PHP5模块

    yum install php

    安装好后必须重启apache服务

    /etc/init.d/httpd restart

    4、测试php是否可用

    vi /var/www/html/info.php

    写入如下内容,保存

    <?php
    phpinfo();
    ?>

    打开http://你的ip/info.php看到phpinfo页面

    5、让php5支持mysql

    在库里搜索php,找到支持mysql模块和组件

    yum search php

    按需选择安装

    yum install php-mysql php-gd php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-xmlrpc

    重启apache2

    /etc/init.d/httpd restart

    打开http://你的ip/info.php可以看到mysql的支持情况

    6、安装phpmyadmin

    在官方库里没有phpmyadmin,现在导入RPMforge GPG key:

    rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
    yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

    安装:

    yum install phpmyadmin

    改变apache中的phpmyadmin配置文件

    vi /etc/httpd/conf.d/phpmyadmin.conf

    注释掉<Directory “/usr/share/phpmyadmin”>…</Directory>这一节,这样做可以使phpmyadmin不限于本地打开

    接下来改变phpMyAdmin从cookie认证到http认证

    vi /usr/share/phpmyadmin/config.inc.php

    改后为

    $cfg['Servers'][$i]['auth_type'] = 'http';

    重启Apache:

    /etc/init.d/httpd restart

    此时CentOS 6.2 x86_64下的LAMP环境配置完成

    :)EOT

     

  • wc命令统计当前目录下指定文件

    查看当前目录下文件的个数

    ls -l | grep "^-" | wc -l

    查看当前目录下文件的个数,包括子目录下的文件

    ls -lR| grep "^-" | wc -l

    查看某目录下目录的个数,包括子目录

    ls -lR| grep "^d" | wc -l

    上面命令主要要素说明:

    ls -l

    长列表输出该目录下文件及目录信息

    grep “^-”

    把文件过滤出来;如果只保留目录就是 grep “^d”

    wc -l

    统计输出信息的行数,因一行信息对应一个文件,所以也是文件的个数

  • mysql备份和还原数据库

    备份服务器上所有数据库,加上–opt表示采用优化(Optimize)方式。

    mysqldump -uroot -ppasswd --opt --all-databases > allbackupfile.sql

    mysqldump -uroot -ppasswd -A > allbackupfile.sql

    备份指定数据库

    mysqldump -uroot -ppasswd databasename > /tmp/dbbackup.sql

    备份指定的表,写在要备份的库后面

    mysqldump -uroot -ppasswd databasename table1 table2 > /tmp/tables.sql

    还原MySQL数据库的命令(还原表就不用加表名了)

    mysql -hhostname -uusername -ppassword databasename < backup.sql

    还原为utf-8

    mysql -uusername -ppassword databasename --default-character-set=utf8 < backup.sql

    mysqldump 加 where

    mysqldump -uroot -ppasswd databasename table1 --where "table1.a=1" > /tmp/table.sql

    使用–tab方式备份和还原数据库

    首先将备份文件存在/home/jpuyy/blog,这时会生成以表名命名的.sql和.txt文件,.sql保存了表的创建语句,.txt保存了以默认分隔符的纯数据文本。

    mysqldump -u root -p --tab=/home/jpuyy/blog database

    接下来需要导入数据库时

    mysqladmin create newdatabase
    cat /home/jpuyy/blog/*.sql | mysql newdatabase
    mysqlimport newdatabase /home/jpuyy/blog/*.txt

     

    只导出表结构

    mysql -hhostname -uusername -ppassword -d databasename > backup.sql

    简单的每小时备份脚本

    #/bin/bash
    datetime=`date +%F-%H:%M`
    mysqldump -udba -p'passwd' --opt --all-databases > all-databases-$datetime.sql
    gzip all-databases-$datetime.sql