技术博客

Iptables 对服务器的简单防护策略

作者:莫问前程 发布于:2013-9-18 11:15 Wednesday 分类:网络攻防战

有的时候我们的对外提供服务的机器即使在最外层有了硬件防火墙也要自身做一些简单的防护,硬件防火墙也难免被攻破,系统自身有了防护功能,也能拖延全部被黑的时间,相信一个合格的SA应该能够在这段时间及时发现了入侵痕迹了。
  很好很强大!
  在最后给大家个好东西,这个是 Daniel Robbins (drobbins@gentoo.org), 总裁兼 CEO, Gentoo Technologies, Inc. 写的动态iptables防火墙,添加和删除被阻止的IP都很方便,使用说明都在里面了,哈哈
  下面简单的介绍linux自带的IPTABES的防护规则
  防火墙安全的配置原则是:全部拒绝,在允许相应的包进入,即:没有明确允许的全部拒绝!
  ----------------------------------------
  基本配置举例:
  # iptables -A INPUT -s [!] 192.168.2.110 [指定匹配的主机] [!]:匹配指定主机之外的主机
  # iptables -A INPUT -s [!] 192.168.2.0/24[指定匹配的网络] [!]:匹配指定网络之外的网络
  # iptables -A INPUT -p tcp -m  mutilport --source-port 22,53,80,110 [匹配多个源端口]
  # iptables -A INPUT -p tcp -m  mutilport --destination-port 22,53,80,110 [匹配多个目的端口]
  # iptables -p tcp --syn [--syn 等于 “--tcp-fiags SYN,RST,ACK SYN”的简写]
  # iptables -A INPUT -p tcp -m state --state ESTABLISHED RELATED -j ACCEPT [对于已经建立的连接允许进入]
  # iptables -A INPUT -P TCP !SYN -M STATE --STATE NEW -j LOG --log-prefix "日志的标志字符"
  [记录日志]
  -----------------------------------------
  NAT防火墙发布服务器配置: [ 拨号上网]
  # iptables -t nat -A [PREROUTING] -i [ppp0]  -p [tcp/udp] -d [公网接口地址]  --dport[发布服务的端口号]
  -j  DNAT --to-destination  [IP]
  NAT上网配置:
  # iptables -t nat -A POSTROUTING -O [PPP0]   -j MASQUERADE
  转换内部网络地址IP为公有IP地址:
  # iptables -t nat -A POSTROUTING -s [ 内部IP地址范围] -o [出站接口]  -j SNAT --to [ 外部接口地址]
  -------------------------------------------
  拒绝黑客攻击:
  # iptables -A [FORWARD / INPUUT] -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
  [对碎片进行限制,防止碎片攻击]
  # iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
  [限制ICMP数据包允许一秒通过一个包 限制触发条件是 10 个包 ]
  # iptables -A INPUT -m limit --limit 3/minute --limit-burst 3
  -j LOG --log-level INFO --log-prefix "IP INPUT packaget died:"
  # iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3
  -j LOG --log-level DEBUG --log-prefix "IP INPUT packaget died:"
  # iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3
  -j LOG --log-level DEBUG --log-prefix "IP INPUT packaget died:"
  --------------------------------------------
  拒绝 ping 回应:
  # iptables -A -INPUT -p icmp -i eth0 -j DROP
  打开内核的路由转发功能:
  # echo "1" > /proc/sys/net/ipv4/ip_forward
  [注意:重启机器后失效,建议写在启动脚本里:/etc/rc.d/rc.local/ 中]
  ----------------------------------------------
  透明代理重定向配置:
  # iptables -t nat PREROUTING -i eth0 -p tcp -s 192.168.2.0/24 --dport 80 -j REDIRECT --to-port 3128
  保存配置与恢复配置:
  # iptables-save > /etc/sysconfig/iptables[保存路径]
  # iptables-restore  <  /etc/sysconfig/iptables [保存路径]

标签: IP tables

评论(0) 引用(95) 浏览(33033)

linux 阻挡CC攻击

作者:莫问前程 发布于:2013-9-18 11:14 Wednesday 分类:网络攻防战

 什么是CC攻击?CC攻击就是利用大量代理服务器对目标计算机发起大量连接,导致目标服务器资源枯竭造成拒绝服务。那么如何判断查询CC攻击呢?本文主要介绍了一些Linux下判断CC攻击的命令。
  #查看所有80端口的连接数
  netstat -nat|grep -i "80"|wc -l
  #对连接的IP按连接数量进行排序
  netstat -anp | grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
  netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
  netstat -ntu | awk '{print $5}' | egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | sort | uniq -c | sort -nr
  #查看TCP连接状态
  netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
  netstat -n | awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
  netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'
  netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
  netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
  netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
  #查看80端口连接数最多的20个IP
  cat /www/web_logs/waitalone.cn_access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -100
  tail -n 10000 /www/web_logs/waitalone.cn_access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -100
  cat /www/web_logs/waitalone.cn_access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -100
  netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
  netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A,i}' |sort -rn|head -n20
  #用tcpdump嗅探80端口的访问看看谁最高
  tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
  #查找较多time_wait连接
  netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
  #查找较多的SYN连接
  netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
  #linux下实用iptables封ip段的一些常见命令:
  #封单个IP的命令是:
  iptables -I INPUT -s 211.1.0.0 -j DROP
  #封IP段的命令是:
  iptables -I INPUT -s 211.1.0.0/16 -j DROP
  iptables -I INPUT -s 211.2.0.0/16 -j DROP
  iptables -I INPUT -s 211.3.0.0/16 -j DROP
  #封整个段的命令是:
  iptables -I INPUT -s 211.0.0.0/8 -j DROP
  #封几个段的命令是:
  iptables -I INPUT -s 61.37.80.0/24 -j DROP
  iptables -I INPUT -s 61.37.81.0/24 -j DROP
  #想在服务器启动自运行的话有三个方法:
  #1、把它加到/etc/rc.local中
  #2、iptables-save >/etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中,系统启动iptables时自动执行。
  #3、service iptables save 也可以把你当前的iptables规则放/etc/sysconfig/iptables中,系统启动iptables时#自动执行。
  #后两种更好此,一般iptables服务会在network服务之前启来,更安全。
  #解封的话:
  iptables -D INPUT -s IP地址 -j REJECT
  iptables -F #全清掉了

标签: CC攻击

评论(0) 引用(94) 浏览(32661)

常见mysql的错误以及解决方法

作者:莫问前程 发布于:2013-9-17 23:56 Tuesday 分类:数据库

MYSQL启动错误
  Can't open the mysql.plugin table...2009-06-01 00:52Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
  mysql是已经被编译好的mysql-5.1.28-rc-linux-i686-glibc23.tar.gz
  shell>mkdir /usr/local/mysql
  shell> groupadd mysql
  shell> useradd -g mysql mysql
  shell> tar zxf /path/to/mysql-VERSION-OS.tar.gz
  shell> cp -r * full-path-to-mysql-VERSION-OS/* /usr/local/mysql/
  shell> cd /usr/local/mysql
  shell> chown -R mysql .
  shell> chgrp -R mysql .
  shell> scripts/mysql_install_db --user=mysql
  shell> chown -R root .
  shell> chown -R mysql data
  shell> bin/mysqld_safe --user=mysql &
  这是执行scripts/mysql_install_db --user=mysql没有成功的原因,没有一个初始化数据库,不能启动mysql守护进程,重新执行:
  shell> scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/date --user=mysql
  由于安装方法不同mysql的安装目录也不相同,mysql_install_db文件的位置也不一样
  可以使用find / -name mysql_install_db来查找
  实例:
  /usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql  --basedir=/usr/local/mysql
  --------------------------------------------------------------------------------
  在MYSQL启动老失败即:Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
  查看错误日志显示:mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
  /usr/local/mysql/bin/mysqld: Table 'mysql.plugin' doesn't exist
  Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
  InnoDB: The first specified data file ./ibdata1 did not exist:
  [root@centos var]# service mysqld stop
  MySQL manager or server PID file could not be found!       [FAILED]
  解决办法:
  首先查看一下进程
  [root@centos mysql]# ps aux |grep mysq*
  root      2643  0.0  0.2   4536  1224 ?        S    01:09   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/centos.pid
  mysql     2757  0.0  1.2  36976  6608 ?        Sl   01:09   0:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --log-error=/usr/local/mysql/var/centos.err --pid-file=/usr/local/mysql/var/centos.pid --socket=/tmp/mysql.sock --port=3306
  root      4788  0.0  0.1   3920   684 pts/2    R+   11:11   0:00 grep mysq*
  如果看到上面的内容,那说明,Mysql的进程卡死了,这时用就要把这些卡死的进程都关闭
  [root@centos mysql]# kill 2643
  [root@centos mysql]# kill 2757
  启动Mysql 就ok了
  [root@centos mysql]# service mysqld start
  Starting MySQL.                                            [  OK  ]
  --------------------------------------------------------------------------------
  mysql数据库忘记密码
  现在终于被我找到了解决方法,如下(请先测试方法三,谢谢!):
  方法一:
  # /etc/init.d/mysql stop
  # mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
  # mysql -u root mysql
  mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
  mysql> FLUSH PRIVILEGES;
  mysql> quit
  # /etc/init.d/mysql restart
  # mysql -uroot -p
  Enter password: <输入新设的密码newpassword>
  方法二:
  直接使用/etc/mysql/debian.cnf文件中[client]节提供的用户名和密码:
  # mysql -udebian-sys-maint -p
  Enter password: <输入[client]节的密码>
  mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
  mysql> FLUSH PRIVILEGES;
  mysql> quit
  # mysql -uroot -p
  Enter password: <输入新设的密码newpassword>
  mysql>
  --------------------------------------------------------------------------------
  遇到了 SQLException: access denied for  @'localhost' (using password: no)
  解决办法   grant all privileges on *.* to py@localhost identified by '1';
  flush privileges;
  拿  py    1 登陆
  附:
  mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
  权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
  当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
  当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
  用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。
  ‘连接口令’不能为空,否则创建失败。
  mysql>grant select,insert,update,delete,create,drop on vtdc.employee to py@192.168.1.1 identified by ‘123′;
  给来自192.168.1.1的用户py分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。
  mysql>grant all privileges on 51cto.* to py@192.168.1.1 identified by ‘123′;
  给来自192.168.1.1的用户py分配可对数据库51cto所有表进行所有操作的权限,并设定口令为123。
  mysql>grant all privileges on *.* to py@192.168.1.1 identified by ‘123′;
  给来自192.168.1.1的用户py分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
  mysql>grant all privileges on *.* to joe@localhost identified by ‘123′;
  给本机用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

标签: MYSQL

评论(0) 引用(86) 浏览(24989)

centos-yum update问题

作者:莫问前程 发布于:2013-9-17 23:55 Tuesday 分类:Linux

刚安装完的centos 6.2系统发现yum仓库更新不了。提示报错信息:

[root@hbase01-222 ~]# yum update

Loaded plugins: aliases, changelog,downloadonly, fastestmirror, kabi, presto, security, tmprepo, verify,versionlock

Loading support for CentOS kernel ABI

Determining fastest mirrors

Could not retrieve mirrorlisthttp://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was

14: PYCURL ERROR 6 - "Couldn't resolvehost 'mirrorlist.centos.org'"

Could not retrieve mirrorlisthttp://mirrorlist.centos.org/?release=6&arch=x86_64&repo=extras errorwas

14: PYCURL ERROR 6 - "Couldn't resolvehost 'mirrorlist.centos.org'"

Could not retrieve mirrorlisthttp://mirrorlist.centos.org/?release=6&arch=x86_64&repo=updates errorwas

14: PYCURL ERROR 6 - "Couldn't resolvehost 'mirrorlist.centos.org'"

http://mirrors.163.com/centos/6.2/os/x86_64/repodata/repomd.xml:[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.163.com'"

Trying other mirror.

Error: Cannot retrieve repository metadata(repomd.xml) for repository: base. Please verify its path and try again

[root@hbase01-222 ~]# service iptables stop

[root@hbase01-222 ~]# nslookup  mirrorlist.centos.org

;; connection timed out; no servers couldbe reached

到这里发现问题了,我的域名解析不了,yum的配置文件里指向的域名就识别不了了。重新设置下dns指向。

[root@hbase01-222 ~]# vim /etc/resolv.conf

# Generated by NetworkManager

search 38forsbm

nameserver 8.8.8.8

[root@hbase01-222 ~]# yum update –y   --更新可以使用。

标签: LINUX

评论(0) 引用(92) 浏览(26081)

Powered by 木匠 鲁ICP备88888888号