防火墙脚本设计

    xiaoxiao2025-05-18  42

    4.防火墙脚本设计 问题 本案例要求熟悉防火墙脚本的典型构成,完成以下任务: 1)针对Linux网关编写脚本,提供SNAT共享上网策略、DNAT发布Web、FTP服务的策略 2)编写网络型、主机型防护规则 3)使用IP地址黑/白名单 方案 Linux防火墙脚本的典型构成: 1)定义基本环境变量 2)必要的内核模块和 /proc 参数调整 3)具体的防火墙策略设计,包括各链的默认规则,按表、链组织的规则 沿用练习三,采用三台RHEL6虚拟机svr5、gw1、pc120,如图-4所示。其中,虚拟机svr5作为局域网络的Web服务器,接入NAT网络(virbr0);虚拟机pc120作为Internet的测试机,接入隔离网络(virbr1);虚拟机gw1作为网关/路由器,配置eth0、eth1两块网卡,分别接入两个网络virbr0、virbr1。 图-4 编写网络型脚本时,在网关gw1上来做; 编写主机型脚本时,在内网机svr5上来做。 步骤 实现此案例需要按照如下步骤进行。 步骤一:编写典型的Linux网关防火墙脚本 1)编写脚本文件/opt/ipfw-gw.sh [root@gw1 ~]# vim /opt/ipfw-gw.sh #!/bin/bash

    2015.05.20 TsengYia.

    1. 定义方便移植的环境变量

    INET_IF=“eth1” INET_IP=“174.16.16.1” LAN_NET=“192.168.4.0/24” LAN_WWW_IP=“192.168.4.5” IPT="/sbin/iptables"

    2. 内核参数、相关模块调整

    /sbin/modprobe nf_nat_ftp /sbin/sysctl -w net.ipv4.ip_forward=1 /sbin/sysctl -w net.ipv4.ip_default_ttl=128 /sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=1 /sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts /sbin/sysctl -w net.ipv4.tcp_syncookies=1 /sbin/sysctl -w net.ipv4.tcp_syn_retries=3 /sbin/sysctl -w net.ipv4.tcp_synack_retries=3 /sbin/sysctl -w net.ipv4.tcp_fin_timeout=60 /sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=3200

    3. 清空旧规则,并设置各链的默认规则

    #/etc/init.d/iptables stop $IPT -t filter -X $IPT -t nat -X $IPT -t mangle -X $IPT -t raw -X $IPT -t filter -F $IPT -t nat -F $IPT -t mangle -F $IPT -t raw -F $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT

    4. 自定义规则 …

    4.1 nat表的详细策略

    $IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP $IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --t o-destination $LAN_WWW_IP

    4.2 filter表的详细策略

    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -p tcp --dport 22 -j ACCEPT $IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT $IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp -m multiport --dport 20:22,25,80 ,110,143,443,993,995 -j ACCEPT $IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -d $LAN_WWW_IP -p tcp --dport 80 -j ACCEPT $IPT -A FORWARD -s $LAN_WWW_IP -p tcp --sport 80 -j ACCEPT

    [root@gw1 ~]# chmod +x /opt/ipfw-gw.sh 2)根据需要将ipfw-gw.sh脚本设置为开机自动运行 [root@gw1 ~]# vim /etc/rc.local #!/bin/sh … … touch /var/lock/subsys/local /opt/ipfw-gw.sh 步骤二:编写网络型、主机型防护规则 1)主机型脚本 控制的数据包侧重于本机与其他主机之间的访问,因此iptables防火墙规则以 filter 表的 INPUT 链为主,OUTPUT 链其次。 比如为网站服务器svr5编写防火墙脚本: [root@svr5 ~]# vim /opt/ipfw-host.sh #!/bin/bash

    2015.05.20 TsengYia.

    1. 定义方便移植的环境变量

    INET_IF=“eth0” INET_IP=“192.168.4.5” IPT="/sbin/iptables"

    2. 内核参数、相关模块调整

    /sbin/sysctl -w net.ipv4.ip_forward=0 /sbin/sysctl -w net.ipv4.ip_default_ttl=128 /sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=1 /sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts /sbin/sysctl -w net.ipv4.tcp_syncookies=1 /sbin/sysctl -w net.ipv4.tcp_syn_retries=3 /sbin/sysctl -w net.ipv4.tcp_synack_retries=3 /sbin/sysctl -w net.ipv4.tcp_fin_timeout=60 /sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=3200

    3. 清空旧规则,并设置各链的默认规则

    #/etc/init.d/iptables stop $IPT -t filter -X $IPT -t nat -X $IPT -t mangle -X $IPT -t raw -X $IPT -t filter -F $IPT -t nat -F $IPT -t mangle -F $IPT -t raw -F $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT

    4. 自定义规则 …

    $IPT -A INPUT -p tcp -m multiport --dport 22,25,80,110,143,443,993,995,2150:2750 -j ACCEPT $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    [root@svr5 ~]# chmod +x /opt/ipfw-host.sh //添加执行权限 [root@svr5 ~]# vim /etc/rc.local //设置开机自运行 #!/bin/sh … … touch /var/lock/subsys/local /opt/ipfw-host.sh 2)网络型脚本 控制的数据包侧重于内网、外网之间的访问,因此iptables防火墙规则以 filter 表的 FORWRD 链为主,需要地址转换时还会用到nat表。 比如步骤一中的网关防火墙脚本ipfw-gw.sh: [root@gw1 ~]# cat /opt/ipfw-gw.sh … … $IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP $IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP … … $IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state --state ESTABLISHED,RELATED -j ACCEPT … … 步骤三:使用IP地址黑/白名单 1)编写IP地址黑名单、白名单 定义白名单,来自这些地址(比如远程管理机)的数据包将会无条件放行: [root@gw1 ~]# vim /opt/ipfw.wlist

    the SSH-Station for administrators

    192.168.4.110 220.121.72.85 定义黑名单,来自这些地址的数据包将会无条件丢弃: [root@gw1 ~]# cat /opt/ipfw.blist 61.45.135.29 121.113.79.81 2)修改ipfw-gw.sh网关防火墙脚本,启用黑、白名单 [root@gw1 ~]# vim /opt/ipfw-gw.sh … …

    5. White & Black List …

    WHITE_LIST="/opt/ipfw.wlist" for i in $(grep -v “^#” $WHITE_LIST) //遍历设置白名单规则 do $IPT -I INPUT -s $i -j ACCEPT $IPT -I OUTPUT -d $i -j ACCEPT $IPT -I FORWARD -s $i -j ACCEPT $IPT -I FORWARD -d $i -j ACCEPT done BLACK_LIST="/opt/ipfw.blist" for i in $(grep -v “^#” $BLACK_LIST) //遍历设置黑名单规则 do $IPT -I INPUT -s $i -j DROP $IPT -I OUTPUT -d $i -j DROP $IPT -I FORWARD -s $i -j DROP $IPT -I FORWARD -d $i -j DROP done 3)执行ipfw-gw.sh脚本,确认防火墙规则 [root@gw1 ~]# iptables -nL Chain INPUT (policy DROP) target prot opt source destination DROP all – 218.29.30.131 0.0.0.0/0 DROP all – 121.113.79.81 0.0.0.0/0 DROP all – 61.45.135.29 0.0.0.0/0 ACCEPT all – 220.121.72.85 0.0.0.0/0 ACCEPT all – 192.168.4.110 0.0.0.0/0 ACCEPT all – 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

    Chain FORWARD (policy DROP) target prot opt source destination DROP all – 0.0.0.0/0 218.29.30.131 DROP all – 218.29.30.131 0.0.0.0/0 DROP all – 0.0.0.0/0 121.113.79.81 DROP all – 121.113.79.81 0.0.0.0/0 DROP all – 0.0.0.0/0 61.45.135.29 DROP all – 61.45.135.29 0.0.0.0/0 ACCEPT all – 0.0.0.0/0 220.121.72.85 ACCEPT all – 220.121.72.85 0.0.0.0/0 ACCEPT all – 0.0.0.0/0 192.168.4.110 ACCEPT all – 192.168.4.110 0.0.0.0/0 ACCEPT udp – 192.168.4.0/24 0.0.0.0/0 udp dpt:53 ACCEPT tcp – 192.168.4.0/24 0.0.0.0/0 multiport dports 20:22,25,80,110,143,443,993,995 ACCEPT all – 0.0.0.0/0 192.168.4.0/24 state RELATED,ESTABLISHED ACCEPT tcp – 0.0.0.0/0 192.168.4.5 tcp dpt:80 ACCEPT tcp – 192.168.4.5 0.0.0.0/0 tcp spt:80

    Chain OUTPUT (policy ACCEPT) target prot opt source destination DROP all – 0.0.0.0/0 218.29.30.131 DROP all – 0.0.0.0/0 121.113.79.81 DROP all – 0.0.0.0/0 61.45.135.29 ACCEPT all – 0.0.0.0/0 220.121.72.85 ACCEPT all – 0.0.0.0/0 192.168.4.110

    最新回复(0)