Bash脚本使用IPTABLES配置防火墙

关于脚本: 这个脚本即将在Linux操作系统通过使用iptables构建一个防火墙,用户只需要遵循和回答简单和e ...

使用IPTABLES配置防火墙的Bash脚本

关于脚本:

该脚本即将使用iptables在Linux操作系统中构建一个防火墙,用户只需要遵循并回答简单而简单的步骤,脚本将以原始形式生成用户指定的iptables规则。

我已经在PCLINUXOS,FEDORA-9,DREAM_LINUX,UBUNTU-8上测试了脚本。

这是我的iptables版本1.0(USMAN AKRAM - 幸运)

关于iptables:

网络安全是任何决定托管网站的主要考虑因素,因为威胁每天都变得越来越广泛和持续。 提供额外保护的一种手段是投资防火墙。 虽然价格总是下降,但在某些情况下,您可能可以使用现有服务器上的Linux iptables软件包创建一个可比较的单元,甚至没有额外的支出。

最初,在Linux上运行的最流行的防火墙/ NAT包是ipchains,但它有一些缺点。 为了纠正这一点,Netfilter组织决定创建一个名为iptables的产品。


:-) !!!脚本完全用户友好! :-)

脚本开始

菜单将显示如下:

*****Main Menu*****
1. Check Iptables Package
2. Iptables Services
3. Build Your Firewall with Iptables
4. Exit

1.检查Iptables包

现在让用户选择选项1.从键盘上按“1”,从菜单中选择iptable Package

现在脚本确认用户必须是Root ,而且我们知道RootUID为零(0)。 所以首先我必须比较当前用户的UID为零(0),如果UID与root的UID不匹配,那么它将显示以下消息:

****You must be the root user to run this script!****

并且如果UID与root的UID匹配,则它显示以下消息并运行该脚本:

***Identity Verified_You are the Root***

我们可以通过在终端中键入以下命令来检查当前用户的UID:

echo $UID

如果用户的身份被验证为root用户,则脚本将使用以下命令检查Linux操作系统中的iptables软件包。

rpm -q iptables

*****Main Menu*****
1. Check Iptables Package
2. Iptables Services
3. Build Your Firewall with Iptables
4. Exit

现在如果用户选择选项2.Iptables Services,那么checkstatus函数将被调用。 在此功能中,用户可以选择一些选项:

*****Note: Save your Iptables before stop/Restart the iptables Services*****
1. Save the iptables
2. Status of Iptables
3. Start iptables Services
4. Stop iptables Services
5. Restart iptable Services
6. Flush iptables (**Use Carefully_it will remove all the rules from iptables**)
7. Go back to Main Menu

如果用户选择1.保存iptables ,iptables规则将通过以下命令保存在Linux操作系统中:

/etc/init.d/iptables save

如果用户选择2. iptables的状态,将显示iptables的当前状态,使用以下命令:

/etc/init.d/iptables status

Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.168.1.45 172.16.4.8 reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.1.1 192.168.1.25
LOG icmp -- anywhere anywhere LOG level warning

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP udp -- 192.168.6.3 10.6.3.7

如果用户选择3.启动iptables服务,则会启动iptables ,使用以下命令:

/etc/init.d/iptables start

如果用户选择4.停止iptables服务,则iptables将被停止,使用以下命令:

/etc/init.d/iptables stop

如果用户选择5.重新启动iptable服务,则iptables将重新启动 ,使用以下命令,它将加载保存的iptables规则:

/etc/init.d/iptables restart

如果用户选择6. Flush iptables,那么iptables将被刷新,(**使用Carefully_it将从iptables **中删除所有规则),使用以下命令,它将刷新保存的iptables规则:

iptables -F

要返回主菜单,用户必须选择选项7.返回主菜单。

*****Main Menu*****
1. Check Iptables Package
2. Iptables Services
3. Build Your Firewall with Iptables
4. Exit

选项3.使用Iptables构建您的防火墙是此脚本的核心,通过使用此选项,用户可以使用简单的步骤使用iptables创建防火墙,当用户选择选项3.使用Iptables构建防火墙时 ,脚本将询问用户创建防火墙。

Using Which Chain of Filter Table?
1. INPUT
2. OUTPUT
3. Forward"

上述菜单将要求用户选择他/她想要放置规则的链条。

现在脚本会要求用户从源端获取IP信息...

1. Firewall using Single Source IP
2. Firewall using Source Subnet
3. Firewall using for All Source Networks

然后上述菜单询问用户上述三个问题,如果用户选择选项1.使用单源IP的防火墙,则脚本将要求用户输入IP地址。

如果用户选择选项2.防火墙使用源子网,则脚本将要求用户以“192.168.1.0/24”的形式进入子网。

如果用户选择选项3.防火墙使用所有源网络,那么该脚本将在脚本中将0/0置于名为“ip_source”的变量中。

现在脚本会要求用户从目的地端获取IP信息...

1. Firewall using Single Destination IP
2. Firewall using Destination Subnet
3. Firewall using for All Destination Networks

然后上述菜单向用户询问上述三个问题,如果用户选择选项1.防火墙使用单一目的地IP,则脚本将要求用户输入IP地址。

如果用户选择选项2.防火墙使用目的地子网,则脚本将要求用户以“192.168.1.0/24”的形式进入子网,

如果用户选择选项3.防火墙使用所有目标网络,则脚本将在脚本中将0/0置于名为“ip_dest”的变量中。

现在脚本要求用户选择PROTOCOL:

1. Block All Traffic of TCP
2. Block Specific TCP Service
3. Block Specific Port
4. Using no Protocol

现在从上述显示的菜单中,如果用户选择1.阻止TCP的所有流量,则脚本将阻止所有TCP流量。

如果用户选择2.块特定TCP服务 ,则脚本将要求用户输入他/她选择的TCP服务(例如ICMP)。

注意:TCP服务名称应该在CAPITAL LETTERS !!!

如果用户选择3.块特定端口 ,脚本将要求用户输入端口号

现在脚本提示用户使用以上创建的规则怎么办?

What to do with Rule?
1. Accept the Packet
2. Reject the Packet
3. Drop the Packet
4. Create Log

如果用户选择1.接受数据包,则数据包将被接受。

如果用户选择2.拒绝数据包,则数据包将被拒绝。

如果用户选择3.丢弃数据包,则数据包将被丢弃。

如果用户选择4.创建日志,则只会创建日志

现在将向用户显示以下消息:

Press Enter key to Generate the Complete Rule!!!

当用户按Enter键时,脚本会以正确的语法生成原始规则,并将其显示给用户,在我的情况下:

The Generated Rule is
iptables -A INPUT -s 192.168.0.0/24 -d 172.16.0.0/16 -p TCP -j ACCEPT

现在脚本向用户显示以下消息:

Do you want to Enter the Above rule to the IPTABLES? Yes=1 , No=2

如果上面的规则是正确的,那么用户按1键为是并将规则添加到iptables
否则为2 ,否则脚本将返回以让用户编辑规则。

这是整个脚本:

#!/bin/bash
##############USMAN AKRAM "FA05-BTN-005" (~*Lucky*~) BTN-6########
######COMSATS INSTITUTE OF INFORMATION TECHNOLOGY - ABBOTTABAD#### echo -e "****************Welcome*************" ###############################IPTABLE SERVICES PROGRAM BEGINS HERE############################### checkstatus() { opt_checkstatus=1 while [ $opt_checkstatus != 7 ] do clear #echo -e "\nChoose the Option Bellow!!!\n echo -e "\n\t*****Note: Save your Iptables before stop/Restart the iptables Services*****\n" echo -e " 1. Save the iptables\n 2. Status of Iptables\n 3. Start iptables Services\n 4. Stop iptables Services\n 5. Restart iptable Services\n 6. Flush iptables (**Use Carefully_it will remove all the rules from iptables**)\n 7. Go back to Main Menu" read opt_checkstatus case $opt_checkstatus in 1) echo -e "*******************************************************\n" /etc/init.d/iptables save echo -e "\n*******************************************************\n" echo -e "Press Enter key to Continue..." read temp;; 2) echo -e "*******************************************************\n" /etc/init.d/iptables status echo -e "*******************************************************" echo -e "Press Enter key to Continue..." read temp;; 3) echo -e "*******************************************************\n" /etc/init.d/iptables start echo -e "*******************************************************\n" echo -e "Press Enter key to Continue..." read temp;; 4) echo -e "*******************************************************\n" /etc/init.d/iptables stop echo -e "*******************************************************\n" echo -e "Press Enter key to Continue..." read temp;; 5) echo -e "*******************************************************\n" /etc/init.d/iptables restart echo -e "*******************************************************\n" echo -e "Press Enter key to Continue..." read temp;; 6) iptables -F echo -e "*******************************************************" echo -e "All the Rules from the Iptables are Flushed!!!" echo -e "*******************************************************\n" echo -e "Press Enter key to Continue..." read temp;; 7) main;; *) echo -e "Wrong Option Selected!!!" esac done } ###############################BUILD FIREWALL PROGRAM BEGINS FROM HERE############################### buildfirewall() { ###############Getting the Chain############ echo -e "Using Which Chain of Filter Table?\n 1. INPUT 2. OUTPUT 3. Forward" read opt_ch case $opt_ch in 1) chain="INPUT" ;; 2) chain="OUTPUT" ;; 3) chain="FORWARD" ;; *) echo -e "Wrong Option Selected!!!" esac #########Getting Source IP Address########## #Label echo -e " 1. Firewall using Single Source IP\n 2. Firewall using Source Subnet\n 3. Firewall using for All Source Networks\n" read opt_ip case $opt_ip in 1) echo -e "\nPlease Enter the IP Address of the Source" read ip_source ;; 2) echo -e "\nPlease Enter the Source Subnet (e.g 192.168.10.0/24)" read ip_source ;; 3) ip_source="0/0" ;; #4) ip_source = "NULL" ;; *) echo -e "Wrong Option Selected" esac #########Getting Destination IP Address########## echo -e " 1. Firewall using Single Destination IP\n 2. Firewall using Destination Subnet\n 3. Firewall using for All Destination Networks\n" read opt_ip case $opt_ip in 1) echo -e "\nPlease Enter the IP Address of the Destination" read ip_dest ;; 2) echo -e "\nPlease Enter the Destination Subnet (e.g 192.168.10.0/24)" read ip_dest ;; 3) ip_dest="0/0" ;; #4) ip_dest = "NULL" ;; *) echo -e "Wrong Option Selected" esac ###############Getting the Protocol############# echo -e " 1. Block All Traffic of TCP 2. Block Specific TCP Service 3. Block Specific Port 4. Using no Protocol" read proto_ch case $proto_ch in 1) proto=TCP ;; 2) echo -e "Enter the TCP Service Name: (CAPITAL LETTERS!!!)" read proto ;; 3) echo -e "Enter the Port Name: (CAPITAL LETTERS!!!)" read proto ;; 4) proto="NULL" ;; *) echo -e "Wrong option Selected!!!" esac #############What to do With Rule############# echo -e "What to do with Rule? 1. Accept the Packet 2. Reject the Packet 3. Drop the Packet 4. Create Log" read rule_ch case $rule_ch in 1) rule="ACCEPT" ;; 2) rule="REJECT" ;; 3) rule="DROP" ;; 4) rule="LOG" ;; esac ###################Generating the Rule#################### echo -e "\n\tPress Enter key to Generate the Complete Rule!!!" read temp echo -e "The Generated Rule is \n" if [ $proto == "NULL" ]; then echo -e "\niptables -A $chain -s $ip_source -d $ip_dest -j $rule\n" gen=1 else echo -e "\niptables -A $chain -s $ip_source -d $ip_dest -p $proto -j $rule\n" gen=2 fi echo -e "\n\tDo you want to Enter the Above rule to the IPTABLES? Yes=1 , No=2" read yesno if [ $yesno == 1 ] && [ $gen == 1 ]; then iptables -A $chain -s $ip_source -d $ip_dest -j $rule else if [ $yesno == 1 ] && [ $gen == 2 ]; then iptables -A $chain -s $ip_source -d $ip_dest -p $proto -j $rule else if [ $yesno == 2 ]; then main fi fi fi } main() { ROOT_UID=0 if [ $UID == $ROOT_UID ]; then clear opt_main=1 while [ $opt_main != 4 ] do echo -e "/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n" #############Check Whether the iptables installed or not############ echo -e "\t*****Main Menu*****\n 1. Check Iptables Package\n 2. Iptables Services\n 3. Build Your Firewall with Iptables\n 4. Exit" read opt_main case $opt_main in 1) echo -e "******************************" rpm -q iptables echo -e "******************************" ;; 2) checkstatus ;; 3) buildfirewall ;; 4) exit 0 ;; *) echo -e "Wrong option Selected!!!" esac done else echo -e "You Must be the ROOT to Perfom this Task!!!" fi } main exit 0

以上所有内容受版权所有USMAN AKRAM _ FA05-BTN-005(〜* Lucky *〜)COMSATS IIT ABBOTTABAD