分类:Linux

Linux

CentOS 6.9开启iptables的日志实现调试

No Comments Linux

系统日志配置在CentOS 5上叫syslog,而在CentOS 6上叫rsyslog(增强版的syslog),CentOS 5上的配置文件在/etc/syslog.conf下,而CentOS 6在/etc/rsyslog.conf下。

 

说明:

1、如果从外网请求到内网,那么将从头走到尾,经过上图的每一个点。

2、如果是本机请求本机,那么将从local process开始往下执行;打比方nat来说,如果请求本机的转发规则时,那么经历的阶段就只能从OUTPUT链开始,不会经过PREROUTING链。

日志调试的思路:

1、先在指定的表和链增加日志的输出。

2、指定日志的级别以及日志的前缀,注意,前缀非常重要,可以加快问题的分析。

3、最后就是使用ping或者crul进行访问测试,观察日志。

4、iptables是按顺序执行的,但是如果在某一处地方跳转了之后以下的规则就不会再执行,这一个可以日志打点后再慢慢观察发现。

日志文件的配置:

1、在rsyslog.conf添加配置

/etc/rsyslog.conf中添加不同的日志级别

kern.warning     /var/log/iptables.log
kern.debug       /var/log/iptables.log
kern.info        /var/log/iptables.log
------中间广告---------

不过推荐全部日志都记录:

kern.*     /var/log/iptables.log

重启日志配置:

/etc/init.d/rsyslogd restart

如果不进行配置,那么这些日志会记录到/var/log/messages中,当然,在/var/log/kern.log也可以找得到。

iptables日志打点配置:

比如下面针对nat表的POSTROUTING链进行日志打点

iptables -t nat -A POSTROUTING -d 192.168.0.61 -p tcp --dport 9000 -j LOG --log-prefix "*** nat-POSTROUTING ***" --log-level warning

–log-prefix:日志前缀

–log-level:日志级别

 

Jan 18 03:46:08 linux1 kernel: *** 2222 ***IN=eth3 OUT= MAC=00:0c:29:0b:0e:1a:00:0c:29:20:77:96:08:00 SRC=192.168.41.138 DST=192.168.41.137 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=10757 DF PROTO=TCP SPT=34187 DPT=2222 WINDOW=14600 RES=0x00 SYN URGP=0

Jan 18 03:46:09 linux1 kernel: *** 2222 ***IN=eth3 OUT= MAC=00:0c:29:0b:0e:1a:00:0c:29:20:77:96:08:00 SRC=192.168.41.138 DST=192.168.41.137 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=10758 DF PROTO=TCP SPT=34187 DPT=2222 WINDOW=14600 RES=0x00 SYN URGP=0

 

详细配置说明参考:https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#LOGTARGET

通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作

No Comments Linux
1、登录主机,如果是普通账户先切换至root账号
su root
2编缉/etc/hosts.allow文件
vi /etc/hosts.allow 

允许内容

书写格式(改成自自需要的IP或IP段)

ssh允许单个ip

sshd:192.168.220.1

ssh允许ip段

sshd:192.168.220.

telnet允许单个ip

in.telnetd:192.168.220.1

telnet允许ip段

in.telnetd:192.168.221.

以ssh允许192.168.220.1和telnet允许192.168.220网段为例,具体在/etc/hosts.allow加入内容如下:

3、编辑/etc/hosts.deny文件
vi /etc/hosts.deny

在文件中加入:

sshd:ALL
in.telnetd:ALL

具体在/etc/hosts.deny加入内容如下:

4、保存文件退出编缉后,重启ssh服务telnet服务可选
service sshd  restart
service  xinetd  restart

说明:

1.一个IP请求连入,linux的检查策略是先看/etc/hosts.allow中是否允许,如果允许直接放行;如果没有,则再看/etc/hosts.deny中是否禁止,如果禁止那么就禁止连入。

2.实验发现对/etc/hosts.allow和/etc/hosts.deny的配置不用重启就立即生效,但不管重启不重启当前已有会话都不会受影响;也就是说对之前已经连入的,即便IP已配置为禁止登录会话仍不会强制断开。不过不知是否所有linux都一样,由此第四步标为可选。

3.网上发现有些教程写成不是sshd而是in.sshd不是in.telnetd而是telnetd的,个人觉得应该是独立启的不用加in.托管于xinetd的需要加in.

https://www.cnblogs.com/lsdb/p/7095288.html

Linux 启动或禁止用户或 IP 通过 SSH 登录

No Comments Linux

限制用户 SSH 登录


1.只允许指定用户进行登录(白名单):

在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers 选项,(配置完成需要重启 SSHD 服务)格式如下:

#AllowUsers 为新建值

AllowUsers    aliyun test@192.168.1.1      #多用户空格隔开       
# 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。

2.只拒绝指定用户进行登录(黑名单):

在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,(配置完成需要重启SSHD服务)格式如下:  

DenyUsers    zhangsan aliyun       #多用户空格隔开        
# 拒绝 zhangsan、aliyun 帐户通过 SSH 登录系统

限制 IP SSH 登录


除了可以禁止某个用户登录,我们还可以针对固定的IP进行禁止登录,linux 服务器通过设置 /etc/hosts.allow 和 /etc/hosts.deny 这个两个文件,可以限制或者允许某个或者某段IP地址远程 SSH 登录服务器.方法比较简单,具体如下:

1. vim /etc/hosts.allow, 添加

sshd:192.168.0.1:allow  #允许 192.168.0.1 这个 IP 地址 ssh 登录
sshd:192.168.0.1/24:allow #允许 192.168.0.1/24 这段 IP 地址的用户登录

2.vim /etc/hosts.allow,添加

sshd:ALL # 拒绝全部的 ssh 登录 

hosts.allow 和hosts.deny 两个文件同时设置规则的时候,hosts.allow 文件中的规则优先级高,按照此方法设置后服务器只允许 192.168.0.1 这个 IP 地址的 ssh 登录,其它的 IP 都会拒绝。

linux实现DNS轮询实现负载平衡

No Comments Linux

 

DNS 轮询机制会受到多方面的影响,如:A记录的TTL时间长短的影响;别的 DNS 服务器 Cache 的影响;windows 客户端也有一个DNS Cache。这些都会影响 DNS 轮询的效果。因此 DNS 的轮询机制并不能做为一个 load balancing的解决方案,只能作为一个 load distribution 方案。
 

 

不过有一个参数你可以试试看是否能调整一下轮询的效果:
在 named.conf 中可以设置 bind 的 round-robin 的给出结果的顺序:
options {
rrset-order { order random; };
};

rrset-order 支持三个参数:fixed, random, cyclic 。
fix 会将多个A记录按配置文件的顺序固定给出
random 会随机给出
cyclic 会循环给出.
———————
作者:websinesafe
来源:CSDN
原文:https://blog.csdn.net/websinesafe/article/details/80546659
版权声明:本文为博主原创文章,转载请附上博文链接!

解决ssh登录慢,等待时间长的问题

No Comments Linux

有时候在ssh远程登录到其他主机上时发现登录时间太长,经过亲自测试,发现主要有两个问题会导致ssh登录慢:

1.使用了dns反查,这样的话当ssh某个IP时,系统会试图通过DNS反查相对应的域名,如果DNS中没有这个IP的域名解析,则会等到DNS查询超时才会进行下一步,消耗很长时间。

修改方式:

使用root权限修改ssh的配置文件,vim /etc/ssh/sshd_config

增加一行记录:UseDNS no

 

重启

nginx 升级报错ngx_http_geoip_module.so

No Comments Linux

 

 

nginx –t

 

报错
nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so" version 1012002 instead of 1014001 in /usr/share/nginx/modules/mod-http-geoip.conf:1

解决方案 1

卸载 再安装

yum remove nginx
yum update nginx
yum install -y nginx
systemctl start nginx
systemctl enable nginx

解决方案二

 

sudo yum remove nginx-mod*

 

sudo yum install nginx-module-*

 

sudo yum search nginx-module

 

sudo systemctl restart nginx

 

 

yum search nginx-module
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* epel: mirror.ehost.vn
========================================================== N/S matched: nginx-module ==========================================================
nginx-module-geoip-debuginfo.x86_64 : Debug information for package nginx-module-geoip
nginx-module-image-filter-debuginfo.x86_64 : Debug information for package nginx-module-image-filter
nginx-module-njs-debuginfo.x86_64 : Debug information for package nginx-module-njs
nginx-module-perl-debuginfo.x86_64 : Debug information for package nginx-module-perl
nginx-module-xslt-debuginfo.x86_64 : Debug information for package nginx-module-xslt
nginx-module-geoip.x86_64 : nginx GeoIP dynamic modules
nginx-module-image-filter.x86_64 : nginx image filter dynamic module
nginx-module-njs.x86_64 : nginx njs dynamic modules
nginx-module-perl.x86_64 : nginx Perl dynamic module
nginx-module-xslt.x86_64 : nginx xslt dynamic module

一看必会系列:nginx http跳转到https

No Comments Linux
  1. Setup HTTPS on Nginx
  2. Optimize HTTPS on Nginx and get an A+ score on the SSLlabs test.
  3. Optionally, set up HTTP Public Key Pinning (HPKP)
  4. Redirect all HTTP traffic to HTTPS in your Nginx config:
    默认服务器写法
  5. server {
    	listen 80 default_server;
    	listen [::]:80 default_server;
    	server_name _;
    	return 301 https://$host$request_uri;
    }
 
具体服务器写法
server {
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name example.com www.example.com;
	return 301 https://$server_name$request_uri;
}

nginx 官方源 2018

No Comments Linux
Pre-Built Packages for Stable version

To set up the yum repository for RHEL/CentOS, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
Replace “OS with “rhel” or centos”, depending on the distribution used, and “OSRELEASE” with “6 or “7”, for 6.x or 7.x versions, respectively.enabled=1
 
举例

# nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

服务器异常java.io.IOException: Too many open files(系统最大文件打开数限制)

No Comments Linux

 

最终方案还是得从程序端解决

 

以下是临时解决方案

 

后台服务器(Linux) 在转音源的时候 报java.io.IOException: Too many open files
在网上查了一些资料 记录如下:
打开的文件过多,一般来说是由于应用程序对资源使用不当造成,比如没有及时关闭Socket或数据库连接等。但也可能应用确实需要打开比较多的文件句柄,而系统本身的设置限制了这一数量。

异常 1
Java.NET.SocketException: Too many open files

    at java.net.PlainSocketImpl.accept(Compiled Code) 
    at java.Net.ServerSocket.implAccept(Compiled Code) 
    at java.net.ServerSocket.accept(Compiled Code) 
    at weblogic.t3.srvr.ListenThread.run(Compiled Code)

异常 2
java.io.IOException:打开的文件过多

    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.(UNIXProcess.java:54)
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.(UNIXProcess.java:54)
    at java.lang.Runtime.execInternal(Native Method)
    at java.lang.Runtime.exec(Runtime.java:551)
    at java.lang.Runtime.exec(Runtime.java:477)
    at java.lang.Runtime.exec(Runtime.java:443)

第一个异常在错误影响到基础 TCP 协议时抛出,而第二个异常则在错误影响到 I/O 操作时抛出。

文件打开数过多最坏的情况可以使系统崩溃,到时候只能是重起服务器了。

原因:

操作系统的中打开文件的最大句柄数受限所致,常常发生在很多个并发用户访问服务器的时候.因为为了执行每个用户的应用服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄的缺乏.

解决:

  • 尽量把类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄.
  • java的垃圾回收不能关闭网络连接打开的文件句柄,如果没有执行close()(例如:java.net.Socket.close())则文件句柄将一直存在,而不能被关闭.你也可以考虑设置socket的最大打开数来控制这个问题.
  • 对操作系统做相关的设置,增加最大文件句柄数量。
    1. Linux
      在 Linux内核2.4.x中需要修改源代码,然后重新编译内核才生效。编辑Linux内核源代码中的 include/linux/fs.h文件,将 NR_FILE 由8192改为65536,将NR_RESERVED_FILES 由10 改为 128。编辑fs/inode.c 文件将MAX_INODE 由16384改为262144。或者编辑 /etc/sysctl.conf  文件增加两行 fs.file-max = 65536 和 fs.inode-max = 262144 。一般情况下,系统最大打开文件数比较合理的设置为每4M物理内存256,比如256M.可以用lsof -p <pid of process>看打开的文件句柄数.
    2. Windows
      最大文件句柄是16,384,你在任务管理器的性能这一项中可以看到当前打开的句柄数.

服务器端修改:

查看系统允许打开的最大文件数

#cat /proc/sys/fs/file-max

查看每个用户允许打开的最大文件数

ulimit -a

发现系统默认的是open files (-n) 1024,问题就出现在这里。

在系统文件/etc/security/limits.conf中修改这个数量限制,

在文件中加入内容:

* soft nofile 65536 
* hard nofile 65536

注意: 怎么样才能生效,不需要重启服务器

1. 用户环境  退出再进入就生效

2.进程   重启即先效

例:

cat /proc/117190/limits |grep open
Max open files            55555                55555                files     原来是4096现在是55555.重启服务即可

另外方法:
1.使用ps -ef |grep java   (java代表你程序,查看你程序进程) 查看你的进程ID,记录ID号,假设进程ID为12
2.使用:lsof -p 12 | wc -l    查看当前进程id为12的 文件操作状况
    执行该命令出现文件使用情况为 1052
3.使用命令:ulimit -a   查看每个用户允许打开的最大文件数
    发现系统默认的是open files (-n) 1024,问题就出现在这里。
4.然后执行:ulimit -n 4096

     将open files (-n) 1024 设置成open files (-n) 4096

这样就增大了用户允许打开的最大文件数

 

 

==============增加详解

 

soft nproc: 可打开的文件描述符的最大数(软限制)

hard nproc: 可打开的文件描述符的最大数(硬限制)

soft nofile:单个用户可用的最大进程数量(软限制)

hard nofile:单个用户可用的最大进程数量(硬限制)

*             代表针对所有用户
noproc     是代表最大进程数
nofile     是代表最大文件打开数

cat >>/etc/security/limits.conf<<eof
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
eof

type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 – 就表明同时设置了 soft 和 hard 的值。
resource:
core – 限制内核文件的大小
date – 最大数据大小
fsize – 最大文件大小
memlock – 最大锁定内存地址空间
nofile – 打开文件的最大数目
rss – 最大持久设置大小
stack – 最大栈大小
cpu – 以分钟为单位的最多 CPU 时间
noproc – 进程的最大数目
as – 地址空间限制
maxlogins – 此用户允许登录的最大数目

 

#=============新增

—- 查看Linux系统所有进程情况

  1. # top

—- 查看Linux系统某个应用的进程PID

  1. # ps aux| grep mysql

—- 查看Linux系统某个进程打开的文件句柄数量

  1. # lsof -n | grep 5950 -c
  2. 212

—- 查看Linux系统所有进程以及各进程打开的文件句柄数量

  1. # lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr
  2. 212  131133

      第一列是打开的句柄数,第二列是进程号

 

#========新增

too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。