- A+
这篇文章是为《用fail2ban 实现动态防火墙防暴力破解》服务的。链接地址:
从CentOS7(RHEL7)开始,官方的标准防火墙设置软件从iptables变更为firewalld。 因此,为了使Fail2ban与iptables联动,需禁用自带的firewalld服务,同时安装iptables服务。
1.查看防火墙状态
- [root@kvmtest ~]# systemctl status firewalld
- ● firewalld.service - firewalld - dynamic firewall daemon
- Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
- Active: active (running) since 六 2020-12-26 09:26:03 CST; 8s ago
- Docs: man:firewalld(1)
- Main PID: 3611 (firewalld)
- Tasks: 2
- CGroup: /system.slice/firewalld.service
- └─3611 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete FORWARD --destination 192.168.122.0/24 --out-interface vir...hat chain?).
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete FORWARD --source 192.168.122.0/24 --in-interface virbr0 --...hat chain?).
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete FORWARD --in-interface virbr0 --out-interface virbr0 --jum...hat chain?).
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete FORWARD --out-interface virbr0 --jump REJECT' failed: ipta...y that name.
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete FORWARD --in-interface virbr0 --jump REJECT' failed: iptab...y that name.
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete INPUT --in-interface virbr0 --protocol udp --destination-p...hat chain?).
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete INPUT --in-interface virbr0 --protocol tcp --destination-p...hat chain?).
- 12月 26 09:26:03 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete OUTPUT --out-interface virbr0 --protocol udp --destination...hat chain?).
- 12月 26 09:26:04 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete INPUT --in-interface virbr0 --protocol udp --destination-p...hat chain?).
- 12月 26 09:26:04 kvmtest firewalld[3611]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --delete INPUT --in-interface virbr0 --protocol tcp --destination-p...hat chain?).
- Hint: Some lines were ellipsized, use -l to show in full.
- [root@kvmtest ~]#
2.关闭防火墙禁用服务
- [root@kvmtest ~]# systemctl stop firewalld
- [root@kvmtest ~]# systemctl mask firewalld
- Created symlink from /etc/systemd/system/firewalld.service to /dev/null.
- [root@kvmtest ~]#
3.安装iptables
- [root@kvmtest ~]# yum install -y iptables
- [root@kvmtest ~]# yum update iptables
- [root@kvmtest ~]# yum install iptables-services
4.修改/etc/rsyslog.conf文件
为了记录iptables防火墙丢弃的数据包到日志文件,还需修改/etc/rsyslog.conf文件。
增加kern.* /var/log/iptables.log
- # Log all kernel messages to the console.
- # Logging much else clutters up the screen.
- #kern.* /dev/console
- kern.* /var/log/iptables.log
然后重启rsyslog服务
- [root@kvmtest ~]# systemctl restart rsyslog
- [root@kvmtest ~]#
同时,要对日志文件每隔一段时间(一周)进行切割,所以需要编辑/etc/logrotate.d/syslog文件。
- [root@kvmtest ~]# vim /etc/logrotate.d/syslog
- /var/log/cron
- /var/log/maillog
- /var/log/messages
- /var/log/secure
- /var/log/spooler
- /var/log/iptables.log
- {
- missingok
- sharedscripts
- postrotate
- /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
- endscript
- }
5.规则设定
以下是一份完整的iptables脚本
- iptables -P INPUT ACCEPT
- iptables -F
- iptables -X
- iptables -Z
- iptables -A INPUT -i lo -j ACCEPT
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- iptables -A INPUT -p tcp -j LOG --log-prefix "iptables denied"
- iptables -P INPUT DROP
- iptables -P OUTPUT ACCEPT
- iptables -P FORWARD ACCEPT
6.重启防火墙
- [root@kvmtest ~]# service iptables save
- iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
- [root@kvmtest ~]# systemctl restart iptables
- [root@kvmtest ~]#
7.查看iptables规则
- [root@kvmtest ~]# iptables -L -n
- Chain INPUT (policy DROP)
- target prot opt source destination
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
- LOG tcp -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "iptables denied"
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- [root@kvmtest ~]#
8.补充
关于上面的解释
iptables -P INPUT ACCEPT
表示先允许所有的输入通过防火墙,以防远程连接断开。
iptables -F
表示清空所有默认规则。
iptables -X
表示清空所有自定义规则。
iptables -Z
表示将所有计数器归0。
iptables -A INPUT -i lo -j ACCEPT
表示允许来自于lo接口(本地访问)的数据包
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
表示开放22端口(SSH)。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
表示开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
表示开放443端口(HTTPS)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
表示允许接受本机请求之后的返回数据。
iptables -A INPUT -p tcp -j LOG --log-prefix "iptables denied"
表示所有被丢弃的包都会被记录到/var/log/iptables.log文件中,且每条记录会以”iptables denied”作为前缀。
iptables -P INPUT DROP
表示其他入站一律丢弃
iptables -P OUTPUT ACCEPT
表示所有出站一律通过
iptables -P FORWARD DROP
表示所有转发一律通过
9.设定其他规则
如果要添加可信任网段:192.168.0.1/24,接受其所有请求。
iptables -A INPUT -s 192.168.0.1/24 -j ACCEPT
如果要添加可信任ip:192.168.0.1,接受其所有TCP请求。
iptables -A INPUT -p tcp -s 192.168.0.1 -j ACCEPT
如果要添加可信任ip:192.168.0.1,接受其对某个端口:3306的所有TCP请求。
iptables -I INPUT -p tcp -s 192.168.0.1 --dport 3306 -j ACCEPT
如果要封停一个IP:192.168.0.1。
iptables -I INPUT -s 192.168.0.1 -j DROP