Linux学习:有哪些命令可以用于网络防火墙和系统安全设置?

摘要:指令:ufw、netstat、 top、lsof、htop、free、pstree、ifconfig、w3m、tcpdump、nmap 防火墙ufw sudo apt-get install ufw #安装ufw防火墙sudo ufw en
指令:ufw、netstat、 top、lsof、htop、free、pstree、ifconfig、w3m、tcpdump、nmap 防火墙ufw sudo apt-get install ufw #安装ufw防火墙 sudo ufw enable #启用 ufw防火墙,并在系统启动时自动开启 sudo ufwdisable     #关闭ufw防火墙 sudo ufw status     #查看防火墙状态 sudo ufw default deny    #关闭所有外部对本机的访问,但本机访问外部正常。 sudo ufw allow|deny [service] #开启/禁用 sudo ufw allow smtp      #允许所有的外部IP访问本机的25/tcp (smtp)端口 sudo ufw allow 22/tcp      #允许所有的外部IP访问本机的22/tcp (ssh)端口 sudo ufw allow 53        #允许外部访问53端口(tcp/udp) sudo ufw delete allow 53    #禁用 53 端口 sudo ufw allow from 192.168.1.12     #允许此IP访问所有的本机端口 sudo ufw delete allow from 192.168.1.12 #删除上一条的规则 sudo ufw deny smtp            #禁止外部访问smtp服务 sudo ufw delete allow smtp      #删除上面建立的某条规则 sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53 netstat参数解释: -a (all)显示所有选项,默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n (numeric) 直接显示ip地址以及端口,不解析为服务名或者主机名 -l(listen) 仅列出 Listen (监听) 的服务 -p(pid) 显示出socket所属的进程PID 以及进程名字 -r 显示路由信息,路由表 -e 显示扩展信息,例如uid等 -s 按各个协议进行统计 -c 每隔一个固定时间,执行该netstat命令。 --inet 显示ipv4相关协议的监听 netstat -i #查看网络接口表(网卡) netstat -ie #查看网卡信息 netstate -at #列出所有tcp端口,同理,列出所有udp端口:netstate -au netstat -l #只显示处于监听状态的端口,列出处于监听状态的tcp端口:netstat -lt netstat -ap | grep ssh #找出某个程序(ssh)运行的端口 netstat -an | grep ':80' #找出运行在80端口的进程 netstat -ntlp #查看本机开放了哪些端口,这些端口是什么程序在监听 netstat -ntlp | grep 9052 #查看哪些进程在监听9052端口 netstat -na|grep :80|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n    #统计80端口的连接并排序 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'    #查看网络连接状态 netstat -na | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -r -n    #统计当前IP连接的个数 netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c #查看有多少远程的 IP 在连接本机 netstat -anp | grep "php-fpm" | grep "tcp" | grep "pool" | wc -l #查看已经有多少个php-cgi进程用来处理tcp请求 netstat -atnp    #察看当前网络连接状况以及程序 netstat -lntp --inet #查看IPV4端口上的tcp的监听 netstat -lntp --inet | grep -v 127.0.0.1 #同上,同时过滤掉本地的监听 netstat -nat | grep "127.0.0.1:9000" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20 #查看连接本机9000端口最多的20个ip lsof file #查看哪个进程打开了文件file lsof -i :22 #查看22端口现在运行什么程序 lsof -c vim #查看vim进行现在打开的文件 lsof -p [进程ID] #根据进程id跟踪某个进程所使用的资源 网络: top    #查看内存,cpu,进程之间的状态。 htop #在top的基础上更好显示(执行sudo apt-get install htop安装) free    #查看当前的内存使用情况 free -m | grep Mem | awk '{print $2}' #查看物理内存大小 free -m | grep Mem | awk '{print $3}' #查看已经使用了的物理内存 cat /etc/resolv.conf #查看DNS echo nameserver 8.8.8.8 >> /etc/resolve.conf    #追加DNS:8.8.8.8到/etc/resolve.conf的DNS地址文件中。 host google.com    #列出域名所有的IP地址 nslookup google.com    #查询DNS相关的细节信息以及名字解析 route 或 netstat -rn 或 sudo route -n    #查看路由表信息 ping ADDRESS    #检查某个主机是否可以到达 ADDRESS可以是IP,域名和主机名 ping address -c 5 #选项-c 5表示限制发送的echo分组的数量为5,5次后自动停止发送 arping IP      #根据IP查网卡地址 nmblookup -A IP #根据IP查电脑名 arp -a #查看所有内网 arp -a | awk '{ print $4 }'    #查看当前网卡的物理地址 ifconfig eth0:0 1.2.3.4 netmask 255.255.255.0    #同一个网卡增加第二个IP地址 echo 'blacklist ipv6' | sudo tee /etc/modprobe.d/blacklist-ipv6    #屏蔽IPV6 whois test.com    #查看域名的注册备案情况 tracepath test.com #查看到某一个域名的路由情况: sudo apt-get install rkhunter; rkhunter –checkall    #检查本地是否存在安全隐患 grep "Invalid user" /var/log/auth.log | cut -d ' ' -f 10 | sort | uniq -c | sort -nr #查看各个ip尝试登陆但又失败的次数(可能是穷举攻击),执行的顺序:查找/var/log/auth.log文件中所有包含"Invalid user"的行,并按照空格拆分这些行,拆分完获取该行第10个字符串,并排序,然后uniq -c 去重并统计重复字符串的数量最后通过sort -nr对统计的数量进行排序。 grep -a "Accepted password" /var/log/auth.log | cut -d ' ' -f 9 | sort | uniq -c | sort -nr #查看通过密码登录的用户及登录次数 grep -a表示如果文件为2进制则按字符串读取 grep -a "Accepted publickey" /var/log/auth.log | cut -d ' ' -f 9 | sort | uniq -c | sort -nr #查看通过秘钥登录的用户及登录次数 ifconfig ens33 | egrep -o "inet addr:[^ ]*" | grep -o "[0-9.]*"    #提取本地ens33网卡的IP地址 ifconfig ens33 hw ether 00:cc:bf:5a:aa:dd    #设置MAC地址,在软件层面上进行硬件地址的欺骗 ifconfig ens33 192.168.0.12 netmask 255.255.252.0    #设置IP地址的子网掩码 ifconfig ens33 192.168.0.12    #设置网卡ens33的ip地址 tcpdump: sudo tcpdump -c 10000 -i eth0 -n dst port 80 #TCP抓包工具分析80端口数据流 sudo tcpdump -i any tcp port 9501 #参数-i 制定了网卡,any表示所有网卡,tcp 指定仅监听TCP协议,port 制定监听的端口 sudo tcpdump tcp port 23 host 192.27.48.1 #获取主机192.27.48.1接收或发出的telnet包 sudo tcpdump host 210.27.48.1 and / (210.27.48.2 or 210.27.48.3 /) #想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信(在命令行中适用括号时,一定要转义) sudotcpdump ip host 210.27.48.1 and ! 210.27.48.2 #获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 sudotcpdump -i eth0 src host hostname #系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机. sudotcpdump -i eth0 dst host hostname #监视所有送到主机hostname的数据包 sudotcpdump -i eth0 gateway Gatewayname #监视通过指定网关的数据包 w3m: w3m -dump_head http://www.xxx.com    #查看HTTP头 w3m -no-cookie -dump www.123cha.com|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'    #查看当前外网的IP地址 nmap: nmap -F -sT -v test.com #参数-F:扫描100个最有可能开放的端口 -v 获取扫描的信息 -sT:采用的是TCP扫描 不写也是可以的,默认采用的就是TCP扫描 nmap 10.12.123.161 -p1-65535 #扫描10.12.123.161机器的1到65535所有在监听的tcp端口。 nmap10.12.123.161 #扫描10.12.123.161机器的1到65535所有在监听的tcp端口。未知服务的端口无法扫描到 nmap www.test.com -p1-65535 #同上,扫描某个域名的端口 nmap10.12.123.161 -p20-200,7777,8888 #参数-p指定要扫描的端口为20到200和7777、8888端口 nmap -sU10.12.123.161-Pn #参数 -sU表示扫描UDP端口,参数-Pn表示不对目标机器进行ping探测,udp端口扫描速度很慢 nmap10.12.123.16110.12.123.162 #扫描多台主机 nmap10.12.123.161,162 #同上 nmap10.12.123.161-164 #同上,扫描连续的ip地址 nmap10.12.123.161-164 --exclude10.12.123.162 #扫描某个地址段但排序某个ip nmap10.12.123.161-164 --exclude10.12.123.162-163 #扫描某个地址段但排序多个连续ip,分散的ip可以用逗号分隔 nmap10.12.123.10/24 #同上,扫描一个子网网端所有ip nmap -iL ip.txt           #扫描文件里的ip,文件中每行一个ip nmap10.12.123.161-164 --excludefile ex.txt #扫描多个ip但排除文件中的ip地址 ---------------------------------------------------------------------- 入侵报告工具 以auth.log文件为输入 filename:check.sh #!/bin/bash AUTHLOG=/var/log/auth.log if [[ -n $1 ]]; then AUTHLOG=$1 echo Using Log file:$AUTHLOG fi LOG=/tmp/valid.$$.log grep -v "invalid" $AUTHLOG > $LOG users=$(grep "Failed password" $LOG | awk '{ print $(NF-5) }' | sort | uniq) printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "IP address" "Host_Mapping" "Time range" ucount=0; ip_list="$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" $LOG | sort | uniq)" for ip in $ip_list; do grep $ip $LOG > /tmp/temp.$$.log for user in $users; do grep $user /tmp/temp.$$.log > /tmp/$$.log cut -c-16 /tmp/$$.log > $$.time tstart=$(head -1 $$.time); start=$(date -d "$tstart" "+%s"); tend=$(tail -l $$.time); end=$(date -d "$tend" "+%s") limit=$(( $end - $start)) if [ $limit -gt 120 ]; then let ucount++; IP=$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/$$.log | head -1 ); TIME_RANGE="$start-->$tend" ATTEMPTS=$(cat /tmp/$$.log|wc -l); HOST=$(host $IP | awk '{ print $NF }' ) printf "%-5s|%-10s|%-10s|%-10s|%-33s|%-s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE"; fi done done rm /tmp/valid.$$.log /tmp/$$.log $$.time /tmp/temp.$$.log 2> /dev/null ------------------------------------------------------------------------------- 用户操作 1、强制使某个用户退出: 首先:使用w查看当前登录的用户,注意TTY所示登录进程终端号 其次:使用pkill –9 -t pts/1 结束pts/1进程所对应用户登录 2、查看所有登录用户的操作历史 不管是root用户还是其它的用户只有登陆系统后用进入操作我们都可以通过命令history来查看历史记录,但history只针对登录用户下执行有效,即使root用户也无法得到其它用户histotry历史。如果root用户要查看其它用户的操作记录,通过在/etc/profile里面加入以下代码就可以实现: PS1="`whoami`@`hostname`:"'[$PWD]' history USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` if [ "$USER_IP" = "" ] then USER_IP=`hostname` fi if [ ! -d /tmp/dbasky ] then mkdir /tmp/dbasky chmod 777 /tmp/dbasky fi if [ ! -d /tmp/dbasky/${LOGNAME} ] then mkdir /tmp/dbasky/${LOGNAME} chmod 300 /tmp/dbasky/${LOGNAME} fi export HISTSIZE=4096 DT=`date "+%Y-%m-%d_%H:%M:%S"` export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT" chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null 添加完后执行 source /etc/profile 使脚本生效