防火墙IP地址及端口过滤
行 RHEL5 系统的服务器作为网关,分别连接三个网络,其中 LAN1 为普
通员工电脑所在的局域网,LAN2 为 DNS 缓存等服务器所在的局域网。eth0 通过 10M 光纤 接入 Internet(如下页图所示)。为了有效的管理网络环境及增强内部网络的安全性,需要配 置 iptables 防火墙规则实现基于 IP 地址和端口的过滤控制 需求描述 入站控制: 允许从 Internet 访问本机的 21、25、80、110、143 端口 允许从主机 201.12.13.14 访问本机的 22 端口(远程登录服务),每 15 分钟记录一次日志 允许从主机 192.168.1.5(MAC 地址为 00:0C:27:30:4E:5D)访问网关的 22 端口 允许局域网主机(LAN1:192.168.1.0/24)访问本机的 3128 端口(代理服务) 其他未经明确许可的入站数据包,均予以丢弃 转发控制: 允许 LAN1 的主机访问位于 LAN2 的 DNS 服务器(192.168.2.2) 本机出站的数据包均允许 将以上各条防火墙策略,整理为 Shell 脚本文件
实现思路 针对实验需求,分别编写 iptables 规则并进行测试(使用“-s”、“-d”选项指定源、目标 IP 地址,使用 “--dport”选项指定源、目标端口) 1. 允许从 Internet 访问网关服务器的指定端口
2. 允许来自外网指定主机的 SSH 访问,并记录日志 3. 允许来自内网制定主机的 SSH 访问 4. 允许指定局域网段使用代理服务器 5. 允许局域网主机访问 DNS 服务器 6. filter 表 INPUT、FORWARD 链的缺省策略设为 DROP 将上述各规则整理为防火墙脚本#!/bin/bash
### 1. 预定义变量. INET_IP="201.12.13.1" INET_IFACE="eth0" LAN_IP1="192.168.1.1" LAN_IF1="eth1" LAN_IP2="192.168.2.1" LAN_IF2="eth1" LAN1="192.168.1.0/24" LAN2="192.168.2.0/24" SSHC_INET="201.12.13.14" SSHC_LAN_IP="192.168.1.5" SSHC_LAN_MAC="00:0C:29:9F:D8:89" SVR_DNS="192.168.2.2"
$IPT -A FORWARD -s $LAN1 -d $SVR_DNS -p udp --dport 53 -j ACCEPT $IPT -A FORWARD -d $LAN1 -s $SVR_DNS -p udp --sport 53 -j ACCEPT && echo "iptables_Update: [ ########################################## ] Ok
IPT="/sbin/iptables" LOAD="/sbin/modprobe" ### 2. 预先加载模块(可选). /sbin/depmod -a $LOAD ip_tables $LOAD ip_conntrack $LOAD iptable_filter $LOAD iptable_nat $LOAD iptable_mangle $LOAD iptable_raw $LOAD ipt_REJECT $LOAD ipt_LOG $LOAD ipt_iprange $LOAD xt_tcpudp $LOAD xt_state $LOAD xt_multiport $LOAD xt_mac $LOAD xt_limit $LOAD ip_nat_ftp $LOAD ip_nat_irc $LOAD ip_conntrack_ftp $LOAD ip_conntrack_irc ### 3. 开启 nat. /sbin/sysctl -w net.ipv4.ip_forward=1 > /dev/null /sbin/sysctl -p > /dev/null ### 4. 定义 iptables. $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT $IPT -X $IPT -t nat -X $IPT -t mangle -X $IPT -t raw -X $IPT -F $IPT -t nat -F $IPT -t mangle -F $IPT -t raw -F $IPT -A INPUT -p tcp -m multiport --dport 21,25,80,110,143 -j ACCEPT $IPT -A INPUT -s $SSHC_INET -p tcp --dport 22 -j ACCEPT $IPT -A INPUT -s $SSHC_INET -p tcp --dport 22 -m limit --limit 4/hour -j LOG --log-prefix "SSH Access:" $IPT -A INPUT -i $LAN_IF1 -s $SSHC_LAN_IP -m mac --mac-source $SSHC_LAN_MAC -p tcp --dport 22 -j ACCEPT $IPT -A INPUT -s $LAN1 -p tcp --dport 3128 -j ACCEPT
欢迎来我的博客、我需要您的帮助!