常用防火墙指南

iptables

运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的处理和转发。iptables 支持内核2.4以上版本,旧版内核环境下则使用ipchains(于2.2版内核)或 ipwadm(于2.0版内核)完成类似的功能。2014年1月19日起发行的Linux内核3.13版则使用nftables取而代之,但仍然提供 iptables 命令做为兼容接口

CentOS 7.0默认使用的是firewall作为防火墙,启用iptable,

iptable需要先关闭firewall并禁止开启自启
service firewalld stop
systemctl disable firewalld.service #禁止firewall开机启动

#安装iptable
yum install iptables-services 
service iptables start #开启
systemctl enable iptables.service #设置防火墙开机启动




开放指定端口

删除已添加规则

查看已添加规则

应用场景


指令选项
iptables -L -F -A -D # list flush append delete

场景一
开放 tcp 10-22/80 端口 开放 icmp 其他未被允许的端口禁止访问
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口
iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允许 tcp 10-22 端口
iptables -I INPUT -p icmp -j ACCEPT # 允许 icmp
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有

场景二
ftp: 默认被动模式(服务器产生随机端口告诉客户端, 客户端主动连接这个端口拉取数据) vsftpd: 使 ftp 支持主动模式(客户端产生随机端口通知服务器, 服务器主动连接这个端口发送数据)
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允许固定ip访问80

场景三
允许外网访问: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问
iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有
iptables-save # 保存设置到配置文件

场景四
nat 转发
iptables -t nat -L # 查看 nat 配置
iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT
vi /etc/sysconfig/network # 配置网关
iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT

场景五
防CC攻击
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并发连接访问数
iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5

相关文章

维基百科

iptables 详解

iptables命令

firewall

官方网站 维基百科

众所周知,在RHEL7系统中,firewalld防火墙取代了iptables防火墙。我们都知道iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。

下面一张图,让大家明确的了解防火墙 Firewall 与 iptables 之间的关系与区别。

相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

firewalld跟iptables比起来至少有两大好处:

  1. firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
  2. firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。

相关文章

firewalld防火墙详解
firewall-cmd

ufw

相关文章

UFW – Uncomplicated Firewall

簡易的防火牆 – UFW & GUFW

ubuntu简单美化

首先更新系统

sudo apt update && sudo apt upgrade

软件中心安装显卡驱动

Software && updates => Additional Drivers 一般N

如果没有合适的去官网下载,出现卡顿等问题也可以装一下显卡驱动试试

AMD Linux驱动 官方地址

NVIDIA官方驱动 NVIDIA安装驱动英文教程

sudo apt install nvidia-utils-530

安装N卡显示设置

sudo apt install nvidia-settings

切换显卡

更新驱动后可能会丢失这个选项 解决参考

可以通过指令切换 nvidia|intel|on-demand|query

sudo prime-select nvidia # select nvidia gpu
sudo prime-select intel  # select intel gpu
sudo prime-select on-demand  # on-demand 按需

安装tweaks

sudo apt install gnome-tweak-tool
#ubuntu22.04
sudo apt install gnome-tweaks
sudo apt install chrome-gnome-shell #需要安装chrome浏览器
sudo apt install gnome-shell-extensions

开启关闭gnome-shell-extensions

安装chrome-gnome-shell成功后

ubuntu20.04+ 已更新版本

安装dash to dock 和 TopIcons Plus 和 Drop Down Terminal

版本未更新时替代品

Dash to Dock for COSMIC (替代 dash to dock ) ddterm (替代Drop Down Terminal ) TopIconsFix (替代 TopIcons Plus)

https://extensions.gnome.org/

打开上述网站,搜索并安装扩展

设置为打开即可,如上图

dash to dock 配置截图

启用Dash To Dock 后 禁用ubuntu dock,否则会导致indicator-sysmonitor插件报错

dock尺寸

图标尺寸

isloate workspace 隔离工作空间 isloate monitors 隔离显示器

ddterm

Panel Icon : none 隐藏顶部栏图标

TopiconsFix

Tray horizontal alignment (托盘图标水平对齐) right

Ubuntu AppIndicators

Tray horizontal alignment left (托盘水平左对齐)可以解决一些应用菜单无法推出的情况

Ubuntu24.04

Input method Panel 输入法面板扩展

https://extensions.gnome.org/extension/261/kimpanel/

系统监控,顶部栏

https://extensions.gnome.org/extension/6807/system-monitor

终端工具

https://extensions.gnome.org/extension/6307/quake-terminal

FAQ

gnome出现问题,可以尝试重新安装

sudo apt-get install --reinstall ubuntu-desktop

gnome控制中心设置失效可以重新安装

sudo apt install gnome-control-center 

Linux系统优化

系统参数

Linux内核调优

内核参数调整

打开文件 /etc/sysctl.conf,增加以下设置

#该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除
net.ipv4.tcp_max_tw_buckets = 20000
#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数
net.core.somaxconn = 65535
#对于还未获得对方确认的连接请求,可保存在队列中的最大数目
net.ipv4.tcp_max_syn_backlog = 262144
#在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 30000
#能够更快地回收TIME-WAIT套接字。此选项会导致处于NAT网络的客户端超时,建议为0
net.ipv4.tcp_tw_recycle = 0
#系统所有进程一共可以打开的文件数量
fs.file-max = 6815744
#防火墙跟踪表的大小。注意:如果防火墙没开则会提示error: "net.netfilter.nf_conntrack_max" is an unknown key,忽略即可
net.netfilter.nf_conntrack_max = 2621440

运行 sysctl -p即可生效。

打开文件数

设置系统打开文件数设置,解决高并发下 too many open files 问题。此选项直接影响单个进程容纳的客户端连接数。

Soft open files 是Linux系统参数,影响系统单个进程能够打开最大的文件句柄数量,这个值会影响到长连接应用如聊天中单个进程能够维持的用户连接数, 运行ulimit -n能看到这个参数值,如果是1024,就是代表单个进程只能同时最多只能维持1024甚至更少(因为有其它文件的句柄被打开)。如果开启4个进程维持用户连接,那么整个应用能够同时维持的连接数不会超过4*1024个,也就是说最多只能支持4×1024个用户在线可以增大这个设置以便服务能够维持更多的TCP连接。

Soft open files 修改三种方法:

第一种:在终端直接运行 ulimit -HSn 102400,然后重启workerman。

这只是在当前终端有效,退出之后,open files 又变为默认值。

第二种:在/etc/profile文件末尾添加一行 ulimit -HSn 102400,这样每次登录终端时,都会自动执行。更改后需要重启workerman。

第三种:令修改open files的数值永久生效,则必须修改配置文件:/etc/security/limits.conf. 在这个文件后加上:

* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000

这种方法需要重启机器才能生效。

开启BBR算法

参考

何时使用和不使用BBR

Google BBR 优化算法,实现TCP加速

GOOGLE 2016年出的TCP拥塞控制算法,解决问题提高网络吞吐量,案例Google在YouTube上应用该算法,将全球平均的YouTube网络吞吐量提高了4%,在一些国家超过了14%

BBR不会将丢包视为拥塞信号,这会导致高重传率的保持,如果传递的内容对丢包敏感,那么BBR可能不是一个好选择,这种情况下,内容提供商需要仔细检查吞吐量和体验质量之间的权衡

BBR的公平性存在问题,它会抢占Cubic算法的带宽(取决于瓶颈缓冲区的大小)

如何开启BBR

服务器挖矿木马[kthreaddi]处理记录

参考

[kthreaddi]挖矿病毒处理,终于解决了!

Linux – kthreaddi 进程导致CPU超高问题 处理记录

处理服务器恶意程序 kthreaddi挖矿

记服务器被入侵挖矿病毒kthreaddi处理解决过程思路

第一次处理

使用参考链接2方式,清除了定时任务,kill -s 9 进程之后正常了。由于同事离职没有收到反馈并继续观察。

第二次处理

后续接手项目,发现又有了继续按原方法清理定时任务,发现一条特别的定时任务,路径在/data/wwwroot/default/phpmyadmin 下,[kthreaddi]进程用户是www可能是通过php web方式注入的。看了一下使用oneinstack脚本后没有删除默认工具目录,于是删除default目录。然后禁用nginx默认虚拟主机使其无法通过ip访问,使用安全组关闭其他端口只开放常用端口。

kill 进程,发现没有用还是会自动重启,看了参考链接1的方式,得到灵感猜想可能有另一个进程负责重启[kthreaddi]进程。使用netstat -ltnp命令发现了一个非法进程监听 52281端口

于是kill 掉 非法进程,然后kill 掉 [kthreaddi] 进程,top命令观察发现正常了。

总结

此类木马通过定时任务重启,也可能结合systemd 或init脚本开机自启, 也可能使用其它伪装的正常进程来重启

延展阅读,更复杂案例top查看不到进程

应急响应:记一次花样贼多的挖矿病毒

Linux挖矿木马的技术演进探讨

linux开发环境 软件多版本共存方案

原理很简单,linux一切都是文件,多安装几个版本,软件名称和相关的配置用名字区分开即可。另一种方案是使用docker本文不做介绍

composer

运行composer 表示1版本 composer2表示2版本

PHP

多版本php共存,php是基于oneinstack安装的,通过软链接创建php默认版本,写个shell脚本方便切换。图中 php就是软链接。另一种现有php多版本解决方案是宝塔linux,是使用python写的运维工具

物理机安装Linux系统采坑记录

此处物理机指普通的PC电脑和笔记本非服务器

基础知识

boot是可引导bai光盘,iso是国际标du准光盘格式(全世界zhi能读DVD的设备都支持),udf是统一光盘dao格式(Universal Disc Format,全世界能读DVD的设备绝大多数都支持)

通常电脑主板支持两种模式 UEFI和BIOS

UEFI

百科

BIOS

百科

UEFI Bios支持两种启动模式

Legacy+UEFI启动模式和UEFI启动模式,其中Legacy+UEFI启动模指的是UEFI和传统BIOS共存模式,可以兼容传统BIOS引导模式启动操作系统;UEFI启动模式只是在UEFI引导模式启动操作系统。

  选定启动模式并安装操作系统,安装后只能使用设定的模式,用于启动操作系统;
  操作系统安装时使用Legacy+UEFI模式,兼容在传统BIOS引导模式启动操作系统;
  操作系统安装时使用UEFI引导模式,只能在UEFI引导模式启动操作系统。

Legacy+UEFI模式与UEFI模式的区别

    1、Legacy+UEFI启动模式是基于某些电脑硬件设备和操作系统(如WinXP/7)还不支持基于UEFI BIOS的情况,考虑从传统BIOS引导模式启动。传统BIOS引导模式允许Hba,模块设备使用Rom选项。

    2、UEFI启动模式用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而使开机程序化繁为简,节省时间。并且支持2T以上硬盘,加强对硬件的支持

boot.iso为网络安装版,dvd1为完整安装版

linux刻录

dd bs=4M if=ubuntu-19.10-desktop-amd64.iso of=/dev/sdc status=progress
2463842304字节(2.5 GB)已复制, 587.050253 s, 4.2 MB/s
记录了587+1 的读入
记录了587+1 的写出
2463842304字节(2.5 GB)已复制,587.361 秒,4.2 MB/秒

bs代表字节为单位的块大小 if镜像文件 of输出设备 status=progress 显示进度

刻录centos8时无法启动,iso文件正常是阿里云下载的使用file命令查看包含MBR分区信息,最后发现问题是文件系统问题,用linux刻录linux系统时推荐是ext4文件系统,也可能只有centos8的镜像有这个问题,其它版本和系统没有验证

file CentOS-8.2.2004-x86_64-dvd1.iso

CentOS-8.2.2004-x86_64-dvd1.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 23800, 20380 sectors

在dd后,需要把优盘再次格式化为fat32文件系统,参考

出现isolinux.bin missing or corrupt错误

参考

linux下制作u盘启动盘

是因为磁盘目录 of=/dev/sdc 末尾有数字需要去掉

Device     Boot Start       End   Sectors  Size Id Type
/dev/sdd4  *      256 125033618 125033363 59.6G  c W95 FAT32 (LBA)

fdisk -l 显示的磁盘末尾有4 刻录时选择输出路径则为 of=/dev/sdd

windows使用软碟通刻录

启动时汇报启动脚本超时无法发现/dev/root,原因是软碟通会把U盘的标签就是驱动器名称会截断比如centos-8-2-2004-x86_64 截断成centos8-2与启动项的不一致,解决方法百度有很多。个人推荐刻录windows启动盘就用windows支持的文件系统使用windows系统刻录,同理linux就用linux支持的文件系统使用dd刻录

Centos7 升级openssh8.3

参考

通过虚拟机下载提取安装包(有的机房禁止访问外网)

yum install --downloadonly --downloaddir=rpm gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel  pam-devel krb5-devel
cd rpm

rpm -ivh autoconf-2.69-11.el7.noarch.rpm cpp-4.8.5-39.el7.x86_64.rpm gcc-4.8.5-39.el7.x86_64.rpm gcc-c++-4.8.5-39.el7.x86_64.rpm glibc-devel-2.17-307.el7.1.x86_64.rpm glibc-headers-2.17-307.el7.1.x86_64.rpm kernel-headers-3.10.0-1127.18.2.el7.x86_64.rpm keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm libcom_err-devel-1.42.9-17.el7.x86_64.rpm libkadm5-1.15.1-46.el7.x86_64.rpm libselinux-devel-2.5-15.el7.x86_64.rpm libsepol-devel-2.5-10.el7.x86_64.rpm libstdc++-devel-4.8.5-39.el7.x86_64.rpm libverto-devel-0.2.5-4.el7.x86_64.rpm m4-1.4.16-10.el7.x86_64.rpm openssl-devel-1.0.2k-19.el7.x86_64.rpm pam-devel-1.1.8-23.el7.x86_64.rpm pcre-devel-8.32-17.el7.x86_64.rpm zlib-devel-1.2.7-18.el7.x86_64.rpm krb5-devel-1.15.1-46.el7.x86_64.rpm

下载openssh8.3p1 和 openssl-1.1.9.tar.gz

wget -c https://ftp.openssl.org/source/openssl-1.1.1g.tar.gz

wget -c https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/openssh-8.3.tar.gz

解压并编译安装openssl

openssl version #查看当前版本,等升级完对比
OpenSSL 1.0.2k-fips  26 Jan 2017

mv /usr/bin/openssl /usr/bin/openssl_bak #备份
mv /usr/include/openssl /usr/include/openssl_bak #备份

tar -zxvf openssl-1.1.1g.tar.g
cd openssl-1.1.1g/
./config --prefix=/usr/local/ssl -d shared && make && make install

echo $?  #echo $?查看下最后的make install是否有报错,0表示没有问题
0

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl  #生成软链接
ln -s /usr/local/ssl/include/openssl /usr/include/openssl  #生成软链接

ll /usr/bin/openssl #查看是否生成成功
/usr/bin/openssl -> /usr/local/ssl/bin/openssl

ll /usr/include/openssl -ld #查看是否生成成功
/usr/include/openssl -> /usr/local/ssl/include/openssl

#执行下面命令加载配置
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
/sbin/ldconfig

openssl version #查看确认版本

如果出现openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

#查找libssl.so.1.1的目录 然后生成软链接
find / -name "libssl.so.1.1"
/usr/local/lib64/libssl.so.1.1

ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1  /usr/lib64/libcrypto.so.1.1

解压并安装openssh

ssh -V #查看ssh版本
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

tar -zxvf openssh-8.3p1.tar.gz
cd openssh-8.3p1
chown -R root.root /root/openssh/openssh-8.3p1 #更改当前目录所属用户和用户组为root

rm -rf /etc/ssh/* #删除原先ssh的配置文件和目录
./configure --prefix=/usr/ --sysconfdir=/etc/ssh  --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl   --with-zlib   --with-md5-passwords   --with-pam  && make && make install #配置编译安装

#如果遇到权限问题 permission 0640 for xxxx 将报权限问题的目录都设为600
chmod -R 0600 /etc/ssh/ssh_host_ecdsa_key

echo $? #同上
0

#修改sshd配置
vim /etc/sshd_config
PermitRootLogin yes
UseDNS no

#从安装目录cp文件到目标位置
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
#设置执行权限
chmod +x /etc/init.d/sshd

#添加启动项
chkconfig --add sshd
systemctl enable sshd
#把原先的systemd管理的sshd文件删除或者移走或者删除,不移走的话影响我们重启sshd服务
mv /usr/lib/systemd/system/sshd.service  /tmp/
#设置开机启动
chkconfig sshd on

#重启sshd
systemctl restart sshd.service

#查看sshd是否启动
netstat -lntp

#测试版本
ssh -V
OpenSSH_8.3p1, OpenSSL 1.1.1g  21 Apr 2020

Linux 安装 FFmpeg

参考

Ubuntu

sudo apt install ffmpeg apt包

sudo snap install ffmpeg snap包

ffmpeg -version

Centos8

安装sdl软件包

SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,

适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件

没有sdl包的情况下安装ffmpeg时,dnf会提示缺少libSDL2-2.0.so.0()

https://mirrors.aliyun.com/centos/8/PowerTools/x86_64/os/Packages/SDL2-2.0.10-2.el8.x86_64.rpm

安装rpmfusion仓库

dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm 

如果没有rpmfusion这个仓库,安装ffmpeg时dnf会提示找不到匹配

dnf包管理工具安装ffmpeg

dnf install ffmpeg

ffmpeg -version

Centos7

RPM Fusion存储库

参考 How to Install and Use FFmpeg on CentOS 7

#依赖epel存储库,安装epel存储库
sudo yum install epel-release -y
sudo yum update -y

#安装启用RPM Fusion
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm

#安装ffmpeg 
sudo yum install ffmpeg ffmpeg-devel

#查看版本
ffmpeg -version
ffmpeg version 3.4.8 Copyright (c) 2000-2019 the FFmpeg developers

经测试这个仓库速度很慢

Nux Dextop YUM 存储库

参考 How to Install FFmpeg on CentOS

#依赖epel存储库,安装epel存储库
sudo yum install epel-release -y
sudo yum update -y

#安装Nux Dextop存储库
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

#安装ffmpeg
sudo yum install ffmpeg ffmpeg-devel -y

#查看版本
ffmpeg -version
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers

经测试这个仓库速度有时候也很慢

源码编译安装ffmpeg

Ubuntu 卸载多余的内核版本

参考

安装包安装卸载方式

  • 1.sudo dpkg –get-selections | grep ‘linux’
  • 2.sudo apt purge + image/headers名称

手动安装卸载方式

  • 1.删除/lib/modules/目录中以内核版本号为名称的目录
  • 2.删除/usr/src/linux/目录中并不需要的内核源码
  • 3.删除/boot目录中启动内核的和内核的映像文件
  • 4.sudo update-grub,更新内核启动列表