Linux Iptables:使用Shell脚本远程添加/删除IP地址

时间:2020-01-09 10:41:40  来源:igfitidea点击:

我有 root ssh访问,需要通过本地shell脚本使用IPtables命令动态添加/删除一些IP地址。
如何在CentOS/Redhat/RHEL/Debian/Ubuntu Linux下通过SSH会话远程添加或删除IP地址?

SSH客户端是用于登录到远程计算机并在远程计算机上执行命令的程序。

iptables命令用于在Linux内核中设置,维护和检查IP数据包过滤器规则表。
您可以使用Iptables命令本身添加或删除匹配规则。
您可以使用ssh客户端轻松添加或删除iptables规则

语法:添加IP地址

ssh [email protected] /sbin/iptables -I INPUT -i  eth0 -s 1.2.3.4 -j ACCEPT
ssh [email protected] /sbin/iptables -I INPUT -i  eth0 -s 1.2.3.4 -d 192.54.1.2  -j ACCEPT
ssh [email protected] /sbin/iptables -I INPUT -i  eth0 -s 1.2.3.4 -d 192.54.1.2 -p tcp --destination-port 443 -j ACCEPT

语法:删除IP地址

ssh [email protected] /sbin/iptables -D INPUT -i  eth0 -s 1.2.3.4 -j ACCEPT
ssh [email protected] /sbin/iptables -D INPUT -i  eth0 -s 1.2.3.4 -d 192.54.1.2  -j ACCEPT
ssh [email protected] /sbin/iptables -D INPUT -i  eth0 -s 1.2.3.4 -d 192.54.1.2 -p tcp --destination-port 443 -j ACCEPT

其中:

  • -I INPUT将IP地址插入INPUT表。
  • -i eth0:接口名称。
  • -s 1.2.3.4:允许1.2.3.4 IP地址访问服务器。
  • -d 192.54.1.2:服务器IP地址
  • -p tcp destination-port 443:仅允许TCP端口443。
  • -j ACCEPT操作设置为允许从1.2.3.4客户端IP到服务器IP 192.54.1.2的连接。

一个示例Shell脚本

#!/bin/bash 
# A sample shell script to add or delete an IP over remove ssh session in bulk or a single IP at a time
# Written by , under GPL
# Usage:
# ./script.sh open  "1.2.3.4:443:eth0:192.54.1.5:root:www03.example.com"
# ./script.sh close  "1.2.3.4:443:eth0:192.54.1.5:root:www03.example.com"
# ------------------------------------------------------------------------
# note cut can be replaced with internal tring manipulation but, I prefer to use cut
# Purpose: add an IP over ssh
remoteipadd(){
	local client=$(cut -d':' -f1<<<"")
	local port=$(cut -d':' -f2<<<"")
	local wallif=$(cut -d':' -f3<<<"")
	local ip=$(cut -d':' -f4<<<"")
	local vuser=$(cut -d':' -f5<<<"")
	local vserver=$(cut -d':' -f6<<<"")
    cmd="ssh ${vuser}@${vserver} /sbin/iptables -I INPUT -i ${wallif} -s ${client} -d ${ip} -p tcp --destination-port ${port} -j ACCEPT"
    #echo "$cmd"
	$cmd
}
# Purpose: Delete an IP over ssh
remoteipdelete(){
	local client=$(cut -d':' -f1<<<"")
	local port=$(cut -d':' -f2<<<"")
	local wallif=$(cut -d':' -f3<<<"")
	local ip=$(cut -d':' -f4<<<"")
	local vuser=$(cut -d':' -f5<<<"")
	local vserver=$(cut -d':' -f6<<<"")
    cmd="ssh ${vuser}@${vserver} /sbin/iptables -D INPUT -i ${wallif} -s ${client} -d ${ip} -p tcp --destination-port ${port} -j ACCEPT"
    #echo "$cmd"
    $cmd
}
 
usage(){
	echo "Usage: 
1.2.3.4:443:eth0:192.54.11.5:root:vpn.example.com
1.2.3.5:443:eth0:192.54.3.5:root:mysql.example.com
1.2.3.65:22:eth1:192.54.2.5:root:www08.example.com
22.12.33.5:80:eth1:192.54.12.5:root:www04.example.com
{open|close} \"clientIP:serverPort:SeverInterface:serverIP:sshUser:sshServer\"" echo echo -e "\t
while IFS= read -r line; do  echo /path/to/script open "$line"; done <"/path/to/data.txt"
open \"1.2.3.4:443:eth0:192.54.1.5:root:www03.example.com\"" echo -e "\t
while IFS= read -r line; do  echo /path/to/script close "$line"; done <"/path/to/data.txt"
close \"1.2.3.4:443:eth0:192.54.1.5:root:www03.example.com\"" echo exit 1 }   line=""   [ $# -ne 2 ] && usage   case in open) remoteipadd "$line";; close) remoteipdelete "$line";; *) usage esac

您可以创建一个称为脚本的文本文件。
示例data.txt:

##代码##

如下运行:

##代码##

或者

##代码##