使用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 ,而且我们知道Root的UID为零(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