编写iptables脚本实现IP地址、端口过滤

 

案例需求

Benet公司使用一台运行RHEL5系统的服务器作为网关,分别连接三个网络,其中LAN1为普通员工电脑所在的局域网,LAN2DNS缓存等服务器所在的局域网。eth0通过10M光纤接入Internet。为了有效地管理网络环境及加强内部网络的安全性,需要配置iptables防火墙规则实现基于IP地址和端口的过滤控制。

 

拓扑环境

使用VM Workstation Linux三台(一台做iptables网关服务器,一台做LAN1计算机,一台虚拟机做DNS缓存服务器)真实机模拟Internet远程管理工作站,网关服务器三张网卡,依次设置网卡为vmnet0wmnet1vmnet2LAN1接入vmnet1LAN2接入vmnet2.Internet使用vmnet0模拟

 

需求描述

入站控制:

允许从Internet访问本机的212580110143端口

允许从主机 192.168.1.106访问本机的22端口(远程登录服务),每15分钟记录一次日志

允许从主机 192.168.10.2MAC地址为00:0C:27:30:4E:5D)访问网关的22端口

允许局域网主机(LAN1192.168.10.0/24)访问本机的3128端口(代理服务)

转发控制:

允许LAN1的主机访问位于LAN2DNS服务器(192.168.20.2

本机出站的数据包均允许

其他未经明确许可的入站数据包,均予以丢弃;

将以上各条防火墙策略,整理为Shell脚本文件;注意如下内容:

开启路由转发;预先定义网卡、局域网、各接口IP地址等变量;注意各条规则的顺序关系

注意:在网关服务器上设置SNAT转换和FORWARD允许转发才可以访问互联网

如果设置默认丢弃的话,需要手动添加相应网段,才可以访问互联网

实现思路

一、针对实验需求,分别编写iptables规则并进行测试

1.入站控制

允许从Internet访问本机的212580110143端口

[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 21,25,80,110,143 -j ACCEPT

允许从主机 192.168.1.106 访问本机的22端口,每15分钟记录一次日志

[root@localhost ~]# iptables -A INPUT -s 192.168.1.106 -p tcp --dport 22 -j ACCEPT

[root@localhost ~]# iptables -I INPUT -s 192.168.1.106 -p tcp --dport 22 -m limit --limit 4/hour -j LOG

允许从主机 192.168.10.2MAC地址为00:0C:27:30:4E:5D)访问网关的22端口

[root@localhost ~]# iptables -I INPUT -i eth1 -s 192.168.10.2 -m mac --mac-source 00:0C:27:30:4E:5D -p tcp --dport 22 -j ACCEPT

允许局域网主机(LAN1192.168.10.0/24)访问本机的3128端口(代理服务)

[root@localhost ~]# iptables -A INPUT -s 192.168.10.0/24 -p tcp --dport 3128 -j ACCEPT

2.转发控制

允许LAN1的主机访问位于LAN2DNS服务器(192.168.20.2

[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.20.2 -p udp --dport 53 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -s 192.168.20.2 -d 192.168.10.0/24 -p udp --sport 53 -j ACCEPT

二、filterINPUTFORWARD链的缺省策略设为DROPOUTPUT链设为允许

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -P FORWARD ACCEPT

[root@localhost ~]# iptables -P OUTPUT ACCEPT

三、将上述各规则整理为防火墙脚本

[root@localhost ~]# vim /opt/iptables.sh

#!/bin/bash

#IPTABLES

#----------------定义网段、网卡、IP地址等变量---------------#

INET_IP="192.168.1.254"

INET_IF="eth0"

LAN1_IP="192.168.10.1"

LAN1_IF="eth1"

LAN2_IP="192.168.20.1"

LAN2_IF="eth2"

LAN1_NW="192.168.10.0/24"

LAN2_NW="192.168.20.0/24"

SSH_INET="192.168.1.106"

SSH_LAN1_IP="192.168.10.2"

SSH_LAN1_MAC="00:0C:27:30:4E:5D"

DNS_CS="192.168.20.2"

#----------------加载包过滤相关的内核模块-------------------#

/sbin/depmod -a

/sbin/modprobe ip_tables

/sbin/modprobe ip_conntrack

/sbin/modprobe iptable_filter

/sbin/modprobe iptable_nat

/sbin/modprobe iptable_mangle

/sbin/modprobe iptable_raw

/sbin/modprobe ipt_REJECT

/sbin/modprobe ipt_LOG

/sbin/modprobe ipt_iprange

/sbin/modprobe xt_tcpudp

/sbin/modprobe xt_state

/sbin/modprobe xt_multiport

/sbin/modprobe xt_mac

/sbin/modprobe xt_limit

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_nat_irc

/sbin/modprobe ip_conntrack_ftp

/sbin/modprobe ip_conntrack_irc

#----------------开启路由转发功能---------------------------#

/sbin/sysctl -w net.ipv4.ip_forward=1 &> /dev/null

/sbin/sysctl -p &> /dev/null

#----------------设置iptables规则---------------------------#

/sbin/iptables -X

/sbin/iptables -t nat -X

/sbin/iptables -t mangle -X

/sbin/iptables -t raw -X

/sbin/iptables –F

/sbin/iptables -t nat -F

/sbin/iptables -t mangle -F

/sbin/iptables -t raw -F

/sbin/iptables -P INPUT DROP

/sbin/iptables -P FORWARD ACCEPT

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -A INPUT -p tcp -m multiport --dport 21,25,80,110,143 -j ACCEPT

/sbin/iptables -A INPUT -s $SSH_INET -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -s $SSH_INET -p tcp --dport 22 -m limit --limit 4/hour -j LOG

/sbin/iptables -A INPUT -i $LAN1_IF -s $SSH_LAN1_IP -m mac --mac-source $SSH_LAN1_MAC -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -s $LAN1_NW -p tcp --dport 3128 -j ACCEPT

/sbin/iptables -A FORWARD -s $LAN1_NW -d $DNS_CS -p udp --dport 53 -j ACCEPT

/sbin/iptables -A FORWARD -s $DNS_CS -d $LAN1_NW -p udp --sport 53 -j ACCEPT

[root@localhost ~]# chmod +x /opt/iptables.sh

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables     //将规则导入配置文件

[root@localhost ~]# service iptables restart

[root@localhost ~]# chkconfig iptables on

四、测试

1允许从主机 192.168.1.106 访问本机的22端口

2允许从主机 192.168.10.2MAC地址为00:0C:27:30:4E:5D)访问网关的22端口


3.允许LAN1的主机通过缓存服务器192.168.20.2 访问互联网