一个典型的iptables防火墙配置

news/2024/7/5 12:34:18
机房安全是必须考虑的事情。一些服务器设备必须暴露公网IP,很容易遭到攻击。配置硬件或软件防火墙,只开放可以访问的端口,拒绝其他不合法的IP的请求,包括端口扫描。甚至拒绝ping。将大大提升服务器的安全。
本脚本配置iptables,只允许北京和香港远程访问香港的服务器。但会开放web端口给任何IP访问。可以做出更严格的限制,只允许某几个IP访问。这样,规避大部分的随意的攻击。
本脚本缺省拒绝所有连接,这是必须小心的。如果用iptables -F来清空所有iptables的规则,可能导致远程无法访问服务器,必须先修改缺省规则为ACCEPT所有。所以有一种替代方法,在规则末尾增加一条drop任何包的规则。这样清除规则后,不会导致无法访问。 centos 5.2调试通过。

#!/bin/bash
# 2010.10.14 modified by zhouhh
### 1.允许内网192.168.0.0,通过内网卡的所有协议
### 2.允许北京电信、网通、电信通和香港26段共4个子网通过外网访问ssh端口,允许所有ping本机
### 3.允许任何地址,通过任何网口访问本机web端口
### 4.开放所有UDP端口
if [ $UID != 0 ]; then
echo "must be root to run this script!"
exit
fi

### 定义子网变量
BJ_DXT=218.249.75.128/26
BJ_DX=219.141.178.96/28
BJ_CNC=123.127.24.128/25
HK_26=210.211.26.0/24
NET_LAN=192.168.1.0/24
### 定义本地IP
IP_LAN=192.168.1.
IP_WAN=210.211.26.

### 定义服务端口
ssh_port=60000
web_port=80
sip_port=5060

### 定义网络接口
ETH_LAN=eth0
ETH_WAN=eth1

### 定义程序及路径变量
ipt=/sbin/iptables

### 具体规则
echo "[+]Flushing all rules..."
iptables --flush
service iptables stop

echo "[+]Set default policy..."
#缺省拒绝所有接入
$ipt -P INPUT DROP
$ipt -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

$ipt -N TCP_ERR
$ipt -I INPUT 2 -j TCP_ERR

echo "[+]Creating rules for web port..."
$ipt -A INPUT -p tcp --dport $web_port -m state --state NEW -j ACCEPT

echo "[+] accept all UDP ports..."
$ipt -A INPUT -p udp -j ACCEPT

### 允许北京和香港ping本机,其他拒绝
# ping 不限制,zhouhh comment
# echo "[+]Creating icmp rules..."
# $ipt -A INPUT -i $ETH_WAN -s $BJ-DXT -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -s $BJ-DX -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -s $BJ-CNC -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -s $HK-26 -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -p icmp -j DROP

$ipt -A INPUT -p icmp -j ACCEPT

### 允许内网所有IP通信
echo "[+]Permit lan all..."
$ipt -A INPUT -i $NET_LAN -s $NET_LAN -j ACCEPT
$ipt -A INPUT -i lo -j ACCEPT

### 其他规则start

### 其他规则end

### 拒绝错误的TCP包
echo "[+]Creating TCP rules for new chain TCP_ERR..."
$ipt -I TCP_ERR 1 -p tcp --tcp-flags ALL ALL -j DROP
$ipt -I TCP_ERR 2 -p tcp --tcp-flags ALL NONE -j DROP
$ipt -I TCP_ERR 3 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$ipt -I TCP_ERR 4 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$ipt -I TCP_ERR 5 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG -m limit --limit 1/s --log-prefix "bad package"
$ipt -I TCP_ERR 6 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$ipt -I TCP_ERR 7 -p tcp ! --syn -m state --state NEW -j DROP

### 允许北京和香港访问ssh端口
echo "[+]Creating ssh rules..."
$ipt -A INPUT -i $ETH_WAN -s $BJ_DXT -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
$ipt -A INPUT -i $ETH_WAN -s $BJ_DX -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
$ipt -A INPUT -i $ETH_WAN -s $BJ_CNC -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
$ipt -A INPUT -i $ETH_WAN -s $HK_25 -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT


### 保存配置让规则随系统启动
service iptables save

http://www.niftyadmin.cn/n/3662574.html

相关文章

.NET 连接Oracle数据库 OLE DB .NET 数据提供程序和 Visual C# .NET 访问 Oracle 数据库

この資料では、ADO.NET の OLE DB マネージ プロバイダを使用して Oracle データベースにアクセスする方法について、実例を基に説明します。 必要条件 必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。 • Mic…

mysql主键自增方案哪种好

在只使用单数据库时,使用自增主键ID无疑是最适合的。 但在集群、主从架构上时就会有一些问题,比如:主键的全局唯一这里介绍一下在集群环境下除了自增ID外的其它创建主键的方案 1、通过应用程序生成一个GUID,然后和数据一起插入切分…

MySQL系列(一)

一、简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点: MySQL是一种数据库管理系统。 MySQL是一种关联数据库管理系统。 MySQL软件是一种开放源码软件。 MySQL数据库服务器具有快速、可靠和易于使用的特…

logback日志模板与详解

<pattern>的转换符说明&#xff1a; &#xff08;这部分引用自http://aub.iteye.com/blog/1103685&#xff09;转换符 作用 c {length } lo {length } logger {length }输出日志的logger名&#xff0c;可有一个整形参数&#xff0c;功能是缩短logger名&#xff0c;设置为…

php curl 错误 cURL error 60

为什么80%的码农都做不了架构师&#xff1f;>>> cURL error 60 unable to get local issuer certificate 原因 curl 配置中开启了证书校验 解决此报错有2种处理方法 1、curl 关闭证书校验 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 2、php 配置中添加证书…

Python基础之Python语言类型

编程语言主要从以下几个角度进行分类&#xff1a;编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言编译和解释的区别是什么&#xff1f;编译器把源程序的每一条语句都编译成机器语言&#xff0c;并保存成二进制文件&#xff0c;这样运行时计算机可以直接以机器…

跨程序共享数据——Content Provider 之 创建自己的内容提供器 ...

本模块共有四篇文章&#xff0c;参考郭神的《第一行代码》&#xff0c;对Content Provider的学习做一个详细的笔记&#xff0c;大家可以一起交流一下&#xff1a; 跨程序共享数据——Content Provider 之 运行时权限解析以及申请的实现&#xff08;可完美解决java.lang.Securit…

Python常用模块之时间(datetime,time)

首先说一下datetime 时间戳转换为指定格式日期&#xff1a; 用strftime格式化时间的参数 python中时间日期格式化符号&#xff1a; %y 两位数的年份表示&#xff08;00-99&#xff09; %Y 四位数的年份表示&#xff08;000-9999&#xff09; %m 月份&#xff08;01-12&#xff…