Rootop 服务器运维与web架构

2024-06-18
发表者 Venus
反向路径检查rp_filter已关闭评论

反向路径检查rp_filter

# ip为自动获取时的路由表
[root@localhost ~]# ip route show
default via 192.168.11.1 dev ens33 proto dhcp src 192.168.11.68 metric 100 
default via 192.168.12.1 dev ens36 proto dhcp src 192.168.12.28 metric 101 
192.168.11.0/24 dev ens33 proto kernel scope link src 192.168.11.68 metric 100 
192.168.12.0/24 dev ens36 proto kernel scope link src 192.168.12.28 metric 101 

# ip为固定时的路由表
[root@localhost ~]# nmcli connection modify Wired\ connection\ 1 ipv4.method manual ipv4.addresses 192.168.11.68/24 ipv4.gateway 192.168.11.1 ipv4.dns 114.114.114.114 connection.autoconnect yes
[root@localhost ~]# nmcli connection modify Wired\ connection\ 2 ipv4.method manual ipv4.addresses 192.168.12.28/24 ipv4.gateway 192.168.12.1 ipv4.dns 114.114.114.114 connection.autoconnect yes
把网卡down再up查看
[root@localhost ~]# ip route show
default via 192.168.11.1 dev ens33 proto static metric 100 
default via 192.168.12.1 dev ens36 proto static metric 101 
192.168.11.0/24 dev ens33 proto kernel scope link src 192.168.11.68 metric 100 
192.168.12.0/24 dev ens36 proto kernel scope link src 192.168.12.28 metric 101 

可以看到不管自动还是手动指定ip默认路由是从192.168.11.1网关走。

本机电脑ip为 192.168.6.100,本机和目标机器通过三层交换机连接。

本机ping 192.168.11.68是通的,但是ping 192.168.12.28不通。
原因就是因为almalinux(ID_LIKE=”rhel centos fedora”)默认开启反向路径检查 – Reverse Path Filtering(rp_filter)

# 查看内核参数
[root@localhost ~]# sysctl -a |grep -w rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.ens33.rp_filter = 1
net.ipv4.conf.ens36.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1

rp_filter是Linux Kernel以及众多网络设备采用的一种保护机制,以用来检查收到的数据包的原地址是否可路由。
开启rp_filter功能时,当服务器收到一个数据包之后,将此数据包的源地址和目的地址对调后也就是构建的响应数据包,
通过查找路由表之后发现响应包依然从收到数据包的网卡发送回去,则表示此消息通过了rp_filter的检测。

此内核参数有3个值:
0 关闭反向路由校验
1 严格模式,对每一个进来的数据包,如果反向路由不是通过收到数据的包接口,校验失败后收到的数据包丢弃
2 宽松模式,对每个进来的数据包,校验源地址是否可达,如果反向路由可以通过任何接口到达,那么校验成功,否则校验失败后数据包丢失

# 测试开关脚本
[root@localhost ~]# cat rp.sh
if [ "$1" == "stop" ]; then
	sysctl -w net.ipv4.conf.all.rp_filter=0
	sysctl -w net.ipv4.conf.default.rp_filter=0
	sysctl -w net.ipv4.conf.ens33.rp_filter=0
	sysctl -w net.ipv4.conf.ens36.rp_filter=0
	sysctl -w net.ipv4.conf.lo.rp_filter=0
else
	sysctl -w net.ipv4.conf.all.rp_filter=1
	sysctl -w net.ipv4.conf.default.rp_filter=1
	sysctl -w net.ipv4.conf.ens33.rp_filter=1
	sysctl -w net.ipv4.conf.ens36.rp_filter=1
	sysctl -w net.ipv4.conf.lo.rp_filter=1
fi
[root@localhost ~]# bash rp.sh stop

当关闭检查时(设置为0),2个ip都可以ping通了,也可以通过这2个ip连接ssh服务。

在不同的linux发行版中,此值可能不同。在ubuntu系统中,此值默认为2,即宽松模式。

https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
目前RFC3704推荐启用严格模式以防止DDos攻击对IP欺骗的攻击。
如果使用非对称路由或其他复杂的路由,则推荐使用宽松模式。

非对称路由
非对称路由是指发送和接收数据包时,分别使用了主机和目的地设备之间两条不同的路径。
参考:https://blog.csdn.net/chiyuwei1766/article/details/50706306

2024-06-12
发表者 Venus
sftp非交互式自动上传文件已关闭评论

sftp非交互式自动上传文件

通过秘钥认证,上传文件到sftp服务器。
比如sftp登录后有4个根目录 nj on pa wv,把同一个文件传到4个目录中可以用如下命令:

echo "put /data/rsi/mi/void.2024-06-11.csv /NJ/" | sftp -P 3322 -i /root/.ssh/rsi-sftp-pri upload_user@18.210.x.x
echo "put /data/rsi/mi/void.2024-06-11.csv /ON/" | sftp -P 3322 -i /root/.ssh/rsi-sftp-pri upload_user@18.210.x.x
echo "put /data/rsi/mi/void.2024-06-11.csv /PA/" | sftp -P 3322 -i /root/.ssh/rsi-sftp-pri upload_user@18.210.x.x
echo "put /data/rsi/mi/void.2024-06-11.csv /WV/" | sftp -P 3322 -i /root/.ssh/rsi-sftp-pri upload_user@18.210.x.x

/data/rsi/mi 为本地路径
/NJ/ 为sftp中的路径
通过echo后避免了交互式,达到自动上传目的。

2024-05-29
发表者 Venus
zabbix6.4配置执行远程命令已关闭评论

zabbix6.4配置执行远程命令

在zabbix6.4版本中(其它版本未测),动作中的操作默认是 “发送消息” ,没有以前版本中执行”远程命令”的选项。


此版本的配置方式发生变化,需要先在 “告警” – “脚本” 中创建脚本。
名称:脚本名,可以中文。
范围:动作操作
类型:脚本
执行在:zabbix客户端
命令:即要执行的命令,比如:

sudo date > /tmp/stat.txt
sudo netstat -tnlp >> /tmp/stat.txt
whoami >> /tmp/stat.txt
sudo docker start rgs

某些命令可能需要sudo权限,需要提前在agent机器上配置好sudoers,这里测试直接给最高。

[root@localhost etc]# cat /etc/sudoers | grep zabbix
zabbix ALL=(ALL) NOPASSWD:ALL

当添加完脚本后,在动作中,操作 里就有了下拉列表,可以选择刚添加的脚本。

# agent配置
在zabbix_agentd.conf中添加配置,允许执行命令。

AllowKey=system.run[*]

重启zabbix agent。

如果不配置,在执行远程命令时会提示 Unsupported item key

正常执行:

2024-05-09
发表者 Venus
rsyslog通过发送者来源ip区分日志路径已关闭评论

rsyslog通过发送者来源ip区分日志路径

[root@localhost ~]# cat /etc/rsyslog.conf | grep -Ev "^#|^$"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

# 定义一个模版
$template IpTemplate,"/var/log/usg/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log"
:fromhost-ip, !isequal, "127.0.0.1" ?IpTemplate
& ~  # &符号表示已经匹配处理的内容,~符号表示再也不进行其余处理

这样客户端发送过来的日志,rsyslog会根据源ip创建一个文件夹来保存日志。

测试:
通过logger命令测试发送日志
机器1:
logger -n 192.168.6.205 -p user.info "from server 1"

机器2:
logger -n 192.168.6.205 -p user.info "from server 2"

适合多个网络设备集中收集日志。

2024-05-09
发表者 Venus
华为usg6000防火墙发送日志到rsyslog已关闭评论

华为usg6000防火墙发送日志到rsyslog

日志服务器:192.168.6.205

# rsyslog配置
[root@localhost log]# cat /etc/rsyslog.conf | grep -Ev "^#|^$"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$ModLoad imudp # 开启udp接收
$UDPServerRun 514 # udp端口
$ModLoad imtcp # 开启tcp接收
$InputTCPServerRun 514 # tcp端口
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
local6.*						                        /var/log/usg6000.log # usg设备发送过来的设施代码为local6,将所有日志级别(.*)写到配置的日志路径
# 重启rsyslog
[root@localhost log]# systemctl restart rsyslog
# usg配置
[USG6300]info-center enable 

[USG6300]info-center source default channel 2 log level informational 

[USG6300]info-center loghost 192.168.6.205 facility local6 port 514 channel 2 language English source-ip 192.168.12.45
Warning: There is security risk as this operation enables a non secure syslog protocol.

facility 为对应 rsyslog 中的设施代码,usg中支持0-7
[USG6300]info-center loghost 192.168.6.205 facility ?
  local0  Logging host facility 
  local1  Logging host facility 
  local2  Logging host facility 
  local3  Logging host facility 
  local4  Logging host facility 
  local5  Logging host facility 
  local6  Logging host facility 
  local7  Logging host facility 
# rsyslog配置发送者白名单,允许来源ip
$AllowedSender UDP, 192.168.222.10/24, 10.0.0.0/8
# 通过shell命令测试发送日志消息
logger -n 192.168.6.205 -p user.info "aaaaaaaaaaaa"