防火墙脚本设计
作者:互联网
步骤
实现此案例需要按照如下步骤进行。
步骤一:编写典型的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
标签:脚本,sbin,0.0,DROP,防火墙,ACCEPT,tcp,IPT,设计 来源: https://blog.csdn.net/LIGANG0704/article/details/90380948