The method of setting security policy using iptables on aliyun linux server

  • 2020-05-10 23:23:48
  • OfStack

The company's product 1 is shipped directly on the cloud server, so I have had the opportunity to contact ec2 of aws, shanda's cloud server, and recently prepared to use aliyun's elastic computing (cloud server). Security strategies in the first two cloud server to do better, provide a simple and clear the configuration of the interface, and gave it to the default security policy, in contrast, ali cloud server, security policies need to configure, even centos machines are not preinstalled iptables (at least we apply two stage), good can use yum to install, install command is as follows:


yum install -y iptables

Once iptables is installed, you can configure the rules. Because as web server to use, so foreign to open port 80, the other must be through the ssh server management, 22 port will open to the public, of course, it is best to change the ssh service of the default port, the public will have a lot of people trying to crack the password, if you change port, remember to put the port development, or even not on tragedy. A detailed description of the configuration rules is provided below:


 The first 1 Step: clear all rules 

 when Chain INPUT (policy DROP) When performing /sbin/iptables -F After that, you will disconnect from the server 
 All before emptying all rules policy DROP The for INPUT In case of tragedy be careful be careful 
/sbin/iptables -P INPUT ACCEPT
 Clear all rules 
/sbin/iptables -F
/sbin/iptables -X
 Counter set 0
/sbin/iptables -Z

 The first 2 Step: set the rules 

 Permission comes from lo Interface to packets, if you do not have this rule, you will not be able to pass 127.0.0.1 Access local services, for example ping 127.0.0.1
/sbin/iptables -A INPUT -i lo -j ACCEPT 

 open TCP agreement 22 Port so that can ssh If you are in a fix ip Can be used  -s  To qualify the client ip
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

 open TCP agreement 80 Port for web service 
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

10.241.121.15 Is another 1 The Intranet of a server ip , as there is communication between all received from 10.241.121.15 the TCP request 
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT

 accept ping
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

 See this rule: http://www.netingcn.com/iptables-localhost-not-access-internet.html
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

 The above rules for blocking all requests, indispensable, or the firewall does not have any filtering function 
/sbin/iptables -P INPUT DROP

 You can use  iptables -L -n  Check to see if the rule is in effect 

At this point the firewall is even configured, but this is temporary, when you restart iptables or restart the machine, the above configuration will be cleared, in order to take effect permanently, you need to do the following:


/etc/init.d/iptables save 
 or 
service iptables save

 The above command can be executed in a file  /etc/sysconfig/iptables  See the configuration in 

A clean configuration script is provided below:


/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z

/sbin/iptables -A INPUT -i lo -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -P INPUT DROP

Finally, we will execute service iptables save, and make sure that there is no problem with the connection of ssh, so as to prevent the failure of connecting to the server due to the rule error. Without save, the server restart rule will be invalid. Otherwise, we will have to go to the machine room to modify the rule. You can also refer to the ubuntu iptables configuration script to write a script.

Finally, before emptying the rule 1 must be careful to make sure Chain INPUT (policy ACCEPT).

This site complements aliyun's linux_drop_port.sh


#!/bin/bash
#########################################
#Function: linux drop port
#Usage:  bash linux_drop_port.sh
#Author:  Customer Service Department
#Company:  Alibaba Cloud Computing
#Version:  2.0
#########################################
 
check_os_release()
{
 while true
 do
 os_release=$(grep "Red Hat Enterprise Linux Server release"/etc/issue 2>/dev/null)
 os_release_2=$(grep "Red Hat Enterprise Linux Server release"/etc/redhat-release 2>/dev/null)
 if [ "$os_release" ] && [ "$os_release_2" ]
 then
  if echo "$os_release"|grep "release 5" >/dev/null2>&1
  then
  os_release=redhat5
  echo "$os_release"
  elif echo "$os_release"|grep "release 6">/dev/null 2>&1
  then
  os_release=redhat6
  echo "$os_release"
  else
  os_release=""
  echo "$os_release"
  fi
  break
 fi
 os_release=$(grep "Aliyun Linux release" /etc/issue2>/dev/null)
 os_release_2=$(grep "Aliyun Linux release" /etc/aliyun-release2>/dev/null)
 if [ "$os_release" ] && [ "$os_release_2" ]
 then
  if echo "$os_release"|grep "release 5" >/dev/null2>&1
  then
  os_release=aliyun5
  echo "$os_release"
  elif echo "$os_release"|grep "release 6">/dev/null 2>&1
  then
  os_release=aliyun6
  echo "$os_release"
  else
  os_release=""
  echo "$os_release"
  fi
  break
 fi
 os_release=$(grep "CentOS release" /etc/issue 2>/dev/null)
 os_release_2=$(grep "CentOS release" /etc/*release2>/dev/null)
 if [ "$os_release" ] && [ "$os_release_2" ]
 then
  if echo "$os_release"|grep "release 5" >/dev/null2>&1
  then
  os_release=centos5
  echo "$os_release"
  elif echo "$os_release"|grep "release 6">/dev/null 2>&1
  then
  os_release=centos6
  echo "$os_release"
  else
  os_release=""
  echo "$os_release"
  fi
  break
 fi
 os_release=$(grep -i "ubuntu" /etc/issue 2>/dev/null)
 os_release_2=$(grep -i "ubuntu" /etc/lsb-release2>/dev/null)
 if [ "$os_release" ] && [ "$os_release_2" ]
 then
  if echo "$os_release"|grep "Ubuntu 10" >/dev/null2>&1
  then
  os_release=ubuntu10
  echo "$os_release"
  elif echo "$os_release"|grep "Ubuntu 12.04">/dev/null 2>&1
  then
  os_release=ubuntu1204
  echo "$os_release"
  elif echo "$os_release"|grep "Ubuntu 12.10">/dev/null 2>&1
  then
  os_release=ubuntu1210
  echo "$os_release"
  else
  os_release=""
  echo "$os_release"
  fi
  break
 fi
 os_release=$(grep -i "debian" /etc/issue 2>/dev/null)
 os_release_2=$(grep -i "debian" /proc/version 2>/dev/null)
 if [ "$os_release" ] && [ "$os_release_2" ]
 then
  if echo "$os_release"|grep "Linux 6" >/dev/null2>&1
  then
  os_release=debian6
  echo "$os_release"
  else
  os_release=""
  echo "$os_release"
  fi
  break
 fi
 os_release=$(grep "openSUSE" /etc/issue 2>/dev/null)
 os_release_2=$(grep "openSUSE" /etc/*release 2>/dev/null)
 if [ "$os_release" ] && [ "$os_release_2" ]
 then
  if echo "$os_release"|grep"13.1" >/dev/null 2>&1
  then
  os_release=opensuse131
  echo "$os_release"
  else
  os_release=""
  echo "$os_release"
  fi
  break
 fi
 break
 done
}
 
exit_script()
{
 echo -e "\033[1;40;31mInstall $1 error,will exit.\n\033[0m"
 rm-f $LOCKfile
 exit 1
}
 
config_iptables()
{
 iptables -I OUTPUT 1 -p tcp -m multiport --dport21,22,23,25,53,80,135,139,443,445 -j DROP
 iptables -I OUTPUT 2 -p tcp -m multiport --dport 1433,1314,1521,2222,3306,3433,3389,4899,8080,18186-j DROP
 iptables -I OUTPUT 3 -p udp -j DROP
 iptables -nvL
}
 
ubuntu_config_ufw()
{
 ufwdeny out proto tcp to any port 21,22,23,25,53,80,135,139,443,445
 ufwdeny out proto tcp to any port 1433,1314,1521,2222,3306,3433,3389,4899,8080,18186
 ufwdeny out proto udp to any
 ufwstatus
}
 
####################Start###################
#check lock file ,one time only let thescript run one time
LOCKfile=/tmp/.$(basename $0)
if [ -f "$LOCKfile" ]
then
 echo -e "\033[1;40;31mThe script is already exist,please next timeto run this script.\n\033[0m"
 exit
else
 echo -e "\033[40;32mStep 1.No lock file,begin to create lock fileand continue.\n\033[40;37m"
 touch $LOCKfile
fi
 
#check user
if [ $(id -u) != "0" ]
then
 echo -e "\033[1;40;31mError: You must be root to run this script,please use root to execute this script.\n\033[0m"
 rm-f $LOCKfile
 exit 1
fi
 
echo -e "\033[40;32mStep 2.Begen tocheck the OS issue.\n\033[40;37m"
os_release=$(check_os_release)
if [ "X$os_release" =="X" ]
then
 echo -e "\033[1;40;31mThe OS does not identify,So this script isnot executede.\n\033[0m"
 rm-f $LOCKfile
 exit 0
else
 echo -e "\033[40;32mThis OS is $os_release.\n\033[40;37m"
fi
 
echo -e "\033[40;32mStep 3.Begen toconfig firewall.\n\033[40;37m"
case "$os_release" in
redhat5|centos5|redhat6|centos6|aliyun5|aliyun6)
 service iptables start
 config_iptables
 ;;
debian6)
 config_iptables
 ;;
ubuntu10|ubuntu1204|ubuntu1210)
 ufwenable <<EOF
y
EOF
 ubuntu_config_ufw
 ;;
opensuse131)
 config_iptables
 ;;
esac
 
echo -e "\033[40;32mConfig firewallsuccess,this script now exit!\n\033[40;37m"
rm -f $LOCKfile

The above files can be downloaded and executed directly inside the machine.


Related articles: