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用户在终端执行:

1
vim default_firewall.sh

下面是脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/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用户]进行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//设置权限
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上运行:

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

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

1
2
3
4
5
6
7
8
9
    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,可以修改表空间的大小:

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

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

黑线表情
image-1856

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

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

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

1
2
3
4
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是经过良好分区的]:

1
2
3
4
5
//类似下面这个样子:
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,在终端执行:
    1
    2
    3
    4
    5
    6
    7
    8
    reboot init 3
    //或者执行
    reboot
     //在启动完成之后(也就是看到登录界面的时候,同时按
    alt+ctrl+shirt+F3
    //,切换回图形化界面:
    alt+F7
    [不过貌似不需要这样操作])
  3. 进入命令行界面之后,输入命令[先挂载刚才添加的硬盘]:
    1
    mkdir /mnt/sdb

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

    1
    fdisk -l

    [一般显示在最下面的那个,注意看这样一行字:

    1
    (Disk /dev/sdb: 64.4 GB, 64424509440 bytes),记住/dev/sdb]

    ,执行挂载:

    1
    mount /dev/sdb /mnt/sdb

    ,执行格式化硬盘:

    1
    mkfs -t ext4 /dev/sdb

    接下来就可以开始复制数据了.

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

    然后就慢慢等把.

  5. 复制完成之后,进去看一下:
    1
    2
    3
     cd /mnt/sdb
    //然后执行
    ls

    命令.大致不缺文件[!!!此时暂时不要进行删除任何数据的操作,建议在当前硬盘使用到15天之后再删除原数据,以防不测]

  6. 执行:
    1
    2
    3
    4
    umount -l /home
    //卸载现有分区(!!!假如一开始就在图形化界面操作,会报错!!)
     umount -l /mnt/sdb
    //卸载已经有数据的分区
  7. 接着执行:
    1
    2
    3
    4
    mount /dev/sdb /home
    cd /home
    ls
    //(然后: 看一下是不是加载上了)
  8. 还有一个重要的步骤,接着往下看!!!

fstab出错了怎么处理??

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

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

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

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

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

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

1
2
3
4
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文件:

1
vi /etc/fstab

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

1
2
3
4
/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用户登录终端,执行以下命令:

1
[root@localhost Desktop]# cd /etc/yum.repos.d/

切换到yum源所在目录.

执行:

1
2
3
[root@localhost yum.repos.d]# ls
CentOS6-Base-163.repo  google.repo  rhel-source.repo
google-chrome.repo     redhat.repo

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

1
[root@localhost yum.repos.d]# mv redhat.repo redhat.repoOLD

//为避免错误,对所有源执行重命名.
*:也可以将其中的文件全部删除,但这样会对操作有风险.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#########################################################################
# 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
<strong>baseurl=http://mirrors.163.com/centos/6/os/$basearch/</strong>
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-6 - Updates - 163.com
<strong>baseurl=http://mirrors.163.com/centos/6/updates/$basearch/</strong>
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
<strong>baseurl=http://mirrors.163.com/centos/6/extras/$basearch/</strong>
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
<strong>baseurl=http://mirrors.163.com/centos/6/centosplus/$basearch/</strong>
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
<strong>baseurl=http://mirrors.163.com/centos/6/contrib/$basearch/</strong>
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/文件夹下面:

搜狐:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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

网易的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[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
就可以使用了,配置了两个国内源速度刷刷的啊。。。