iptables默认安全规则脚本

什么是iptables

iptables或netfilter(网络过滤器) 是一个用户态的防火墙应用软件,允许系统管理员可以调整设定X表(Xtables)提供相关的系统表格(目前主要是在 iptables/netfilter 底下)以及相关的“链”与“规则”来管理网络封包的流动与转送的动作。因为相关动作上的需要,所以 iptables 的操作需要用到系统管理员的权限,不然就无法运作下去。在大部份的 Linux 系统上面, iptables 是使用/usr/sbin/iptables 来操作,文件则放置在手册页(Man page)(参考: [1])底下,也可以透过 man iptables 的方式来取得这份文件。通常 iptables 都需要核心层级(kernel)的模组来配合运作,Xtables 是主要在核心层级里面 iptables API 运作功能的模组。

目前 iptables 系在 2.4 及 2.6 的核心底下运作,旧版的 Linux 核心 (2.2) 使用 ipchains 及 ipwadm (linux 2.0) 来达成类似的功能。[来自:维基百科]

保存在这的目的

上次把iptables弄坏了,然后就内网都无法连接了.把这个脚本保存在这里,备用.

14
image-1888

具体操作[转载自网络]

下面的命令以root用户在终端执行:

vim default_firewall.sh

下面是脚本内容:

#!/bin/bash
#########################################################################
#
# File: default_firewall.sh
# Description:
# Language: GNU Bourne-Again SHell
# Version: 1.0
# Date: 2010-6-23
# Corp.: c1gstudio.com
# Author: c1g
# WWW: http://blog.c1gstudio.com
### END INIT INFO
###############################################################################

IPTABLES=/sbin/iptables

# start by flushing the rules
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -t nat -Z

## allow packets coming from the machine
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# allow outgoing traffic
$IPTABLES -A OUTPUT -o eth0 -j ACCEPT

# block spoofing
$IPTABLES -A INPUT -s 127.0.0.0/8 -i ! lo -j DROP

$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p icmp -j ACCEPT

# stop bad packets
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# NMAP FIN/URG/PSH
$IPTABLES -A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
# stop Xmas Tree type scanning
$IPTABLES -A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT -i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
# stop null scanning
$IPTABLES -A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP
# SYN/RST
$IPTABLES -A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# SYN/FIN
$IPTABLES -A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# stop sync flood
$IPTABLES -N SYNFLOOD
$IPTABLES -A SYNFLOOD -p tcp --syn -m limit --limit 1/s -j RETURN
$IPTABLES -A SYNFLOOD -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A INPUT -p tcp -m state --state NEW -j SYNFLOOD
# stop ping flood attack
$IPTABLES -N PING
$IPTABLES -A PING -p icmp --icmp-type echo-request -m limit --limit 1/second -j RETURN
$IPTABLES -A PING -p icmp -j REJECT
$IPTABLES -I INPUT -p icmp --icmp-type echo-request -m state --state NEW -j PING

#################################
## What we allow
#################################

# tcp ports

# smtp
$IPTABLES -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# http
$IPTABLES -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# pop3
$IPTABLES -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# imap
$IPTABLES -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# ldap
$IPTABLES -A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
# https
$IPTABLES -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# smtp over SSL
$IPTABLES -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# line printer spooler
$IPTABLES -A INPUT -p tcp -m tcp --dport 515 -j ACCEPT
# cups
$IPTABLES -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
# mysql
$IPTABLES -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
# tomcat
$IPTABLES -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
# squid
$IPTABLES -A INPUT -p tcp -m tcp --dport 81 -j ACCEPT
# nrpe
$IPTABLES -A INPUT -p tcp -m tcp --dport 15666 -j ACCEPT

## restrict some tcp things ##

# ssh
$IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m tcp --dport 6022 -j ACCEPT
# samba (netbios)
$IPTABLES -A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 137:139 -j ACCEPT
# ntop
$IPTABLES -A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 3000 -j ACCEPT
# Hylafax
$IPTABLES -A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 4558:4559 -j ACCEPT
# webmin
$IPTABLES -A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 10000 -j ACCEPT

# udp ports
# DNS
$IPTABLES -A INPUT -p udp -m udp --dport 53 -j ACCEPT
# DHCP
$IPTABLES -A INPUT -p udp -m udp --dport 67:68 -j ACCEPT
# NTP
$IPTABLES -A INPUT -p udp -m udp --dport 123 -j ACCEPT
# SNMP
$IPTABLES -A INPUT -p udp -m udp --dport 161:162 -j ACCEPT

## restrict some udp things ##

# Samba (Netbios)

$IPTABLES -A INPUT -p udp -m udp -s 192.168.0.0/16 --dport 137:139 -j ACCEPT
$IPTABLES -A INPUT -p udp -m udp --sport 137:138 -j ACCEPT

# finally - drop the rest

$IPTABLES -A INPUT -p tcp --syn -j DROP

//-end
//:wq! 保存退出


下面在Linux终端[使用root用户]进行操作

//设置权限
chmod u+x ./default_firewall.sh

//运行脚本
./default_firewall.sh

//查看iptables
/sbin/iptables -nL

//保存iptables
/sbin/iptables-save > /etc/sysconfig/iptables

//重启iptables
/etc/init.d/iptables restart

完美为Linux增加硬盘并且给Oracle扩展表空间

事情是这样起因的

不久之前(到底多久之前我也不记得了),我向Oracle数据库中插入数据的时候,提示表空间已经满了.果断进行了很多命令(此处不记得了.主要用了很多命令和乱七八糟的参数.),但是你依然可以在你的Linux上运行:


df -l //查看硬盘分配情况,以及使用情况

刚才试验了一下,下面的命令是可以查询Oracle表空间使用情况的:


select a.file_id "FileNo",a.tablespace_name
"Tablespace_name",
a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used",
sum(nvl(b.bytes,0)) "Free",
sum(nvl(b.bytes,0))/a.bytes*100 "%free"
from dba_data_files a, dba_free_space b
where a.file_id=b.file_id(+)
group by a.tablespace_name ,
a.file_id,a.bytes order by a.tablespace_name;

然后,然后呢,下面这条SQL,可以修改表空间的大小:


ALTER DATABASE DATAFILE '/ora11gr2/oradata/ORA/ORA/users01.dbf' RESIZE 30G; //这个30G必须是比你的当前分区小

上面这些语句,先留着,接着看把.

黑线表情
image-1856

字符界面无法登录怎么办[64位系统专属]

我前不久遇到这个问题,觉得甚是郁闷,后来在网上看到了解决方案:

最好是在图形化界面下面登录系统,然后用root执行:


vi /etc/pam.d/login
// 在lib后面加上64 session required /lib/security/pam_limits.so
session required /lib64/security/pam_limits.so
session required pam_limits.so

保存退出,重启.

各种修改文件

在得知Oracle表空间不够之后,我对rhel系统的硬盘进行了各种操作,但都无际于事,包括对硬盘直接进行添加(VM虚拟机里面的rhel)!

最后我的做法是[此处假设你的Linux是经过良好分区的]:


//类似下面这个样子:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 20642428 4950920 14642932 26% /
/dev/sda1 198337 32770 155327 18% /boot
/dev/sdb 61927420 30151108 28630584 52% /home

然后可以这样进行操作[操作前记得先备份一下数据]:

  1. 先分配一个硬盘[区别于现有硬盘,大小自定]
  2. 关机,然后重启至命令行界面[假设你的是虚拟机里面的Linux,因为你可能要查询],进入命令行:1,在终端执行:

    reboot init 3
    //或者执行
    reboot
    //在启动完成之后(也就是看到登录界面的时候,同时按
    alt+ctrl+shirt+F3
    //,切换回图形化界面:
    alt+F7
    [不过貌似不需要这样操作])
  3. 进入命令行界面之后,输入命令[先挂载刚才添加的硬盘]:

    mkdir /mnt/sdb

    接着查看哪个硬盘还没有被挂载:
    fdisk -l

    [一般显示在最下面的那个,注意看这样一行字:
    (Disk /dev/sdb: 64.4 GB, 64424509440 bytes),记住/dev/sdb]

    ,执行挂载:
    mount /dev/sdb /mnt/sdb

    ,执行格式化硬盘:
    mkfs -t ext4 /dev/sdb

    接下来就可以开始复制数据了.
  4. 我的数据文件比较大,复制花了大概10多分钟,比较慢,请耐心等待.使用命令即可复制:
    cp -aP /home/ /mnt/sdb

    然后就慢慢等把.
  5. 复制完成之后,进去看一下:
    cd /mnt/sdb
    //然后执行
    ls

    命令.大致不缺文件[!!!此时暂时不要进行删除任何数据的操作,建议在当前硬盘使用到15天之后再删除原数据,以防不测]
  6. 执行:
    umount -l /home
    //卸载现有分区(!!!假如一开始就在图形化界面操作,会报错!!)
    umount -l /mnt/sdb
    //卸载已经有数据的分区
  7. 接着执行:

    mount /dev/sdb /home
    cd /home
    ls
    //(然后: 看一下是不是加载上了)

  8. 还有一个重要的步骤,接着往下看!!!

fstab出错了怎么处理??

接上面,/etc/fstab是一个在启动系统的时候,自动加载相应分区的配置文件非常重要!!

我们目前是把分区挂载到系统了,想要自动加载,请往下看:


mv fstab fstab.bak //备份数据
vi fstab
//然后在最后一行添加如下数据,注意空格
/dev/sdb /home ext4 defaults 0 0
//然后:ESC -> :wq! 回车退出

接着执行: reboot 重启进入图形化界面.

假如fstab文件丢了,进不了系统怎么办

首先进入字符界面,执行: df -l 命令,输出如下:

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 20642428 4950936 14642916 26% /
/dev/sda1 198337 32770 155327 18% /boot
/dev/sdb 61927420 45433432 13348260 78% /home

然后手动自己写fstab文件:
vi /etc/fstab

里面添加如下内容{参照你自己的系统配置}:

/dev/sda1 /boot ext4 defaults 0 0
/dev/sda2 / ext4 defaults 1 1
/dev/sdb /home ext4 defaults 0 0
/dev/sda5 swap swap defaults 0 0

然后保存退出.
最基本的,然后执行 reboot 就可以了.[光盘修复是行不通的,我搞了一晚上!!结果……………都不行,于是我苦逼的手写了fstab文件]….

修改Oracle数据文件大小

接着,开启服务,打开数据库,其余的…
不好意思,开头都已经写了.

为Linux更换yum源

*:此方法与大部分Linux桌面系统兼容,不兼容方面请在评论中指明。

1.Redhat使用CentOS国内源

首先以root用户登录终端,执行以下命令:
[root@localhost Desktop]# cd /etc/yum.repos.d/
切换到yum源所在目录.

执行:
[root@localhost yum.repos.d]# ls
CentOS6-Base-163.repo google.repo rhel-source.repo
google-chrome.repo redhat.repo

//执行ls命令,即可查看所有内容
对于这些原本存在的文件,为了避免出现错误,我们可以对其进行重命名:

[root@localhost yum.repos.d]# mv redhat.repo redhat.repoOLD
//为避免错误,对所有源执行重命名.
*:也可以将其中的文件全部删除,但这样会对操作有风险.

下面就可以进行新创建的源文件了:
使用命令: vim 163.repo
然后将下面的内容粘贴到里面,请确认粗体部分的链接可以访问!!!(如:http://mirrors.163.com/centos/6/os/)

#########################################################################
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-6 - Base - 163.com
baseurl=http://mirrors.163.com/centos/6/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-6 - Updates - 163.com
baseurl=http://mirrors.163.com/centos/6/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-6 - Extras - 163.com
baseurl=http://mirrors.163.com/centos/6/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-6 - Plus - 163.com
baseurl=http://mirrors.163.com/centos/6/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-6 - Contrib - 163.com
baseurl=http://mirrors.163.com/centos/6/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#########################################################################
然后执行命令: yum clean
yum makecache

就可以用了,配置完成后可以使用 : yum install mysql* 测试.

2.Fedora使用国内源

虽然Fedora自身提供了软件源,但速度还是不如人意,最近我就对Fedora的软件源进行了改造,将其原本的国外的源换成了网易和搜狐的源。

其方法基本与上面相同,下面这两个repo的文件是:Fedora 17 /32 的,可以直接放到/etc/yum.repos.d/文件夹下面:

搜狐:
[releases-mirror.sohu.com]
name=fedora-sohu-releases
baseurl=http://mirrors.sohu.com/fedora/releases/17/Fedora/i386/os/
enabled=1
gpgcheck=0

[everything-mirror.sohu.com]
name=fedora-sohu-Everything
baseurl=http://mirrors.sohu.com/fedora/releases/17/Everything/i386/os/
enabled=1
gpgcheck=0

[updates-mirror.sohu.com]
name=Fedora-sohu-updates
baseurl=http://mirrors.sohu.com/fedora/updates/17/i386/
enabled=1
gpgcheck=0

网易的:
[Fedora-mirrors.163.com]
name=Fedora 17 – i386
baseurl=http://mirrors.163.com/fedora/updates/17/i386/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
[Everything-mirrors.163.com]
name=Everything 17 – i386
baseurl=http://mirrors.163.com/fedora/updates/17/i386/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
[updates-mirrors.163.com]
name=Fedora updates
baseurl=http://mirrors.163.com/fedora/updates/17/i386/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY

然后执行命令: yum clean
yum makecache
就可以使用了,配置了两个国内源速度刷刷的啊。。。