CentOS 下的安全策略-防火墙 iptables 配置, fail2ban 配置

如今很多个人服务器都是云服务器, 比如阿里云, 腾讯云, AWS 等等. 他们也提供了自己的安全策略, 但是免费的功能很有限制. 所以自己动手吧, 丰衣足食:

CentOS 安全

安全 = 最小的权限 + 最少的服务.

新系统会有很多的用户以及用户分组, 建议注释掉(不删除的原因是如果有需要可以重新打开).

特别提醒: 修改任何文件, 请备份, 比如: cp /etc/passwd /etc/passwd.back

用户和用户组

vi /etc/passwd

前面加上#, 注释掉以下用户:

adm lp sync shutdown halt uucp operator games gopher ftp

vi /etc/group

注释掉以下用户组:

adm lp uucp games dip

系统服务

用下面的命令关闭不用的系统服务, 以及取消开机启动,( serviceName 替换为要关闭的服务名称)

service {serviceName} stop chkconfig {serviceName} off

不需要的系统服务有这些:

acpid 电源进阶设定, Laptop 上使用的

autofs 自动挂在档案系统

bluetooth 蓝牙服务

cpuspeed 空竹 cpu 速度的服务, 可以省电

cpus 常用 unix 打印系统, 使之支援印表机

ip6tables 禁止 IPV6

(你可以使用 service {serviceName} start chkconfig {serviceName} on 恢复)

用户权限

chmod -R 700 /etc/rc.d/init.d/* 禁止非 root用户使用init.d下面的命令(默认是777权限)

用chattr +i {feilName} 给下面的文件加上不可更改的属性

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow

/etc/services

(可以用 -i 取消锁定的设置, lsattr {fileName} 可以查看文件属性)

文件权限

.bash_history 文件可以记录操作日志, 攻击者往往会删除或者重定向到空文件,用下面的命令可以防止操作:

chattr +a .bash_history

chattr +i .bash_history

下面的文件是我们常用的命令, 也是攻击者最爱替换的命令, 防止他们更改,

chmod 700 {fileName} 更改以下文件权限 (括号内是原有的权限):

 

/usr/bin/vim

/bin/netstat

/usr/bin/tail

/usr/bin/less

/usr/bin/head

/bin/cat

/bin/uname

/bin/ping

(上面这些文件原有的系统权限是 755)

/usr/bin

(上面这些文件原有的系统权限是 555)

最后 chmod 500 /bin/ps 这个文件原有系统权限也是755

禁止危险操作

vi /etc/inittab

注释掉下面这一行, 可以防止 Ctrl + Alt + Del重启

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

禁止升级系统内核

vi /etc/yum.conf

在[main]的最后添加 exclude=kernel*

(使用 yum 升级的时候可以手动加上, 防止升级内核 yum –exclude=kernel* update)

cat /etc/issue 查看系统版本

uname -a 查看内核版本

chkconfig –list yum-updatesd 查看系统状态 (centos 自动更新)

yum-updatesd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

可以用 service yum-updatesd stop 关闭自动升级

chkconfig yum-updatesd off 关闭开机启动

其他 

vi /etc/inittab

注释掉不需要的多余的虚拟控制台, 比如

#6:2345:respawn:/sbin/mingetty tty6

vi /etc/profile

找到 HISTSIZE 可以更改 history命令记录数

禁止服务器被 ping:

vi /etc/rc.d/rc.local 在最末尾加上下面这一行即可:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

( 0 表示允许 1表示禁止)

防火墙iptables 配置

假如我们允许自己ping别人,但是别人ping自己ping不通如何实现呢?
分析:对于ping这个协议,进来的为8(ping),出去的为0(响应).我们为了达到目的,需要8出去,允许0进来

在出去的端口上:iptables -A OUTPUT -p icmp –icmp-type 8 -j ACCEPT
在进来的端口上:iptables -A INPUT -p icmp –icmp-type 0 -j ACCEPT

小扩展:对于127.0.0.1比较特殊,我们需要明确定义它
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

废话不多说, 直接贴上我自己的配置:
vi /etc/sysconfig/iptables

*filter
#进入全部拒绝
:INPUT DROP [0:0]
#网口转发全部拒绝 
:FORWARD DROP [0:0]
#出去全部允许
:OUTPUT ACCEPT [0:0]
#开启ssh进入,22端口
-A INPUT -p tcp --dport 22 -j ACCEPT
#开启web服务器进入,80端口,443端口
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
#开启MongoDB服务器进入,27017端口(允许指定ip,网段访问)
-A INPUT -p tcp -s 222.211.94.0/24 --dport 27017 -j ACCEPT
#开启Redis服务器进入,6001,6002,6003端口
-A INPUT -m iprange --src-range 222.211.94.210-222.211.94.214 -p tcp --dport 6001 -j ACCEPT
-A INPUT -m iprange --src-range 222.211.94.210-222.211.94.214 -p tcp --dport 6002 -j ACCEPT
-A INPUT -m iprange --src-range 222.211.94.210-222.211.94.214 -p tcp --dport 6003 -j ACCEPT
#开启NodeJS服务器进入,18080端口
-A INPUT -m iprange --src-range 222.211.94.210-222.211.94.214 -p tcp --dport 18080 -j ACCEPT
#开启Socket服务器进入,4399端口
-A INPUT -p tcp --dport 4399 -j ACCEPT
#DNS服务,53端口
-A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
#防止有些不安全的端口,如特洛伊木马
-A OUTPUT -p tcp --sport 31337 -j DROP
-A OUTPUT -p tcp --dport 31337 -j DROP
-A OUTPUT -p tcp --sport 31335 -j DROP
-A OUTPUT -p tcp --dport 31335 -j DROP
-A OUTPUT -p tcp --sport 27444 -j DROP
-A OUTPUT -p tcp --dport 27444 -j DROP
-A OUTPUT -p tcp --sport 27665 -j DROP
-A OUTPUT -p tcp --dport 27665 -j DROP
-A OUTPUT -p tcp --sport 20034 -j DROP
-A OUTPUT -p tcp --dport 20034 -j DROP
-A OUTPUT -p tcp --sport 9704 -j DROP
-A OUTPUT -p tcp --dport 9704 -j DROP
-A OUTPUT -p tcp --sport 2049 -j DROP
-A OUTPUT -p tcp --dport 2049 -j DROP
#丢弃坏的TCP包
-A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
#处理IP碎片数量,防止攻击,允许每秒100个
-A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
#设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
-A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
#drop非法连接
-A INPUT -m state --state INVALID -j DROP
-A OUTPUT -m state --state INVALID -j DROP
-A FORWARD -m state --state INVALID -j DROP
#允许已经建立的 和 相关的 连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#防止DDOS攻击
-A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
-A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#防CC攻击
#单个IP最大并发连接数为30
-I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 30 -j REJECT
#单个IP在60秒内允许建立的连接数为60个
-A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 60 -j REJECT

#允许本机被ping

-A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

COMMIT

Fail2ban 配置

fail2ban 是一个监控日志, 并条件过滤后, 对访问 IP 进行限制等操作的工具, 常用来监控 Nginx 日志/ 系统登录日志, 把非法访问的 IP 拉黑

安装

yum install fail2ban logwatch gadmin -y

关键文件列表:

/etc/fail2ban/fail2ban.conf 主要配置文件

/etc/fail2ban/jail.conf 阻挡设定文件

/etc/fail2ban/filter.d/ 过滤规则目录

/etc/fail2ban/action.d/ 检查到条件对象后的操作目录

如果没有发现 fail2ban 的安装包, 在/etc/yum.repos.d/CentOS-Base.repo 文件最后加入

[atrpms]

name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms

baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable

gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms

gpgcheck=1

enabled=1

vi /etc/fail2ban/fail2ban.conf:

logtarget = SYSLOG -> logtarget = /var/log/fail2ban.log

vi /etc/fail2ban/jail.conf

更改 ssh 处 email 设置

增加 (注意替换{}内容}):

[nginx-{yourRuleName}]

enabled = true

port = http,http

filter = nginx-{yourRuleName}

action = iptables[name=nginx{yourRuleName}, port=http, protocol=tcp]

sendmail-whois[name=nginx{yourRuleName}, dest={yourEmail}, sender=fail2ban@example.com]

logpath = /var/log/nginx/access.log

maxretry = 10

findtime = 60

bantime = 3600

vi /etc/fail2ban/filter.d/nginx-{yourRuleName}.conf

写入你想监控的关键 url:

[Definition]

failregex = ^<HOST>.*GET {someURL}*$

            ^<HOST>.*POST {someURL}.*$

            ^<HOST>.*HTTP\/1.1.*405.*$

            ^<HOST>.*HTTP\/1.1.*404.*$

#failregex = <HOST> -.*- .*HTTP/1.* .* .*$

ignoreregex =

最后 service fail2ban restart 就可以了

1人评论了“CentOS 下的安全策略-防火墙 iptables 配置, fail2ban 配置”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to Top