iptables
iptables是linux自带的防火墙,用起来很方便,但是debian使用的时候,会引发一些列错误,如--dport
它会认为是unknown option
https://unix.stackexchange.com/questions/548819/iptables-returning-unknown-option-dport-error
iptables 简单粗暴,命令一经配置不用重启或其他操作,立即生效, 类似还有ip6tables
你可以先在terminal里做测试,再将配置写在/etc/rc.local
里,开机自动生效
4表5链
- 4表:
filter
,nat
,mangle
,raw
- 5链:
INPUT
,OUTPUT
,PREROUTING
,POSTROUTING
,FORWARD
filter起筛选作用,就是让哪个端口开放,让哪个ip进来,让哪个ip不进来;nat做转发和端口映射;后面2个用的不多,mangle做硬件用的
增删改查
# 增
# -A, --append chain rule-specification
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT (p: protocol, dprot: destination port)
# -I, --insert chain [rulenum] rule-specification
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT (默认增加到第一行)
# 删
# -D, --delete chain rule-specification
# -D, --delete chain rulenum
sudo iptables -D INPUT 1 (删除filter表中INPUT链中的第一条配置)
# 改 -R, --replace chain rulenum rule-specification
sudo iptables -R INPUT 7 -p tcp --dport 80 -j ACCEPT
sudo iptables -R INPUT 7 -p tcp --dport 80 -j DROP
sudo iptables -R INPUT 7 -p tcp --dport 80 -j REJECT
# 查 -L, --list [chain] iptables的匹配机制是从上到下依次执行
sudo iptables -L # 等价于 sudo iptables -t filter -L (默认指定的是filter表)
更多操作说明请使用man iptables
配置iptables和Fail2Ban
Ubuntu默认安装是没有开启任何防火墙的,为了服务器的安全,建议大家安装启用防火墙设置,这里推荐使用iptables防火墙.如果mysql启本地使用,可以不用打开3306端口.
suo apt-get install iptables
增强安全等级,imooc有专门的讲师在讲这个,推荐看下这个博客
升级ubuntu
sudo apt-get && sudo apt-get upgrade
输入对应的登录账号密码
清空所有的防火墙规则
sudo iptables -F
配置防火墙,切记英文输入法(就连逗号都能报错)
sudo vi /etc/iptables.up.rules
*filter
# allow all connections
# 允许所有建立起来的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow out traffic
# 允许所有出去的流量
-A OUTPUT -j ACCEPT
# allow http https
# 允许https这种协议下的连接,允许80端口流量的进出
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp --dport 2015 -j ACCEPT
# allow ssh port login
# 开启39999端口,如果没修改端口,则这里是22
# 允许被ping到,方便检测服务器是否被宕机,或者某个机房的网络不通,光缆被拉断等
-A INPUT -p tcp -m state --state NEW --dport 39999 -j ACCEPT
# allow shadowsocks
-A INPUT -p tcp -m state --state NEW --dport 10086 -j ACCEPT
# allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# drop incoming sensitive connections
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
# 当某台服务器在60s访问超过150,就认为是恶意的,拦截掉
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
# log denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
# reject all other inbound
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
保存,退出
告诉iptables配置文件在哪里
sudo iptables-restore < /etc/iptables.up.rules
开启防火墙
ubuntu上查看防火墙有没激活
sudo ufw status
如果没激活,则要激活
sudo ufw enable
y
sudo ufw status
创建shell脚本,让开机自动启动
实际生活中也有停机的情况,停机则防火墙就关了
sudo vi /etc/network/if-up.d/iptables.up.rules
#!/bin/sh
告诉linux这是一个可执行的脚本
#!/bin/sh
iptables-restore /etc/iptables.up.rules
保存退出
给权限
sudo chmod +x /etc/network/if-up.d/iptables.up.rules
好了这样就配置好了iptables
现在来说说Fail2Ban
sudo apt-get install fail2ban
y
打开配置为见
sudo vi /etc/fail2ban/jail.conf
找到bantime 设置为3600
destemail 改成自己的邮箱
action = %(action_mw)s
顺便可以看看ssh的配置,当然不用改
保存,退出
查看fail2ban有没有运行
sudo service fail2ban status
停止
sudo service fail2ban stop
开启
sudo service fail2ban start