目录
iptables (语法规则)
-A:添加规则到链的末尾。
-N:重命名自定义链
-D:删除链中指定的规则。
-X: 删除自定义链
-F:清除所有规则。
-I:在链的开头插入规则。
-L:列出当前的规则。
-P:设置默认策略(ACCEPT、DROP--》无回复、REJECT--》有回复,LOG(日志))。
-s:指定源IP地址或IP地址范围。
-d:指定目标IP地址或IP地址范围。
--sport:指定源端口号。
--dport:指定目标端口号。
-i:指定输入接口。
-o:指定输出接口。
-p:指定协议(tcp、udp、icmp等)。
-j:指定动作(ACCEPT、DROP、REJECT、LOG等)。
-t:指定表名(filter、nat、mangle等)。
iptables是一个应用工具,给内核里的netfilter传递参数的工具 --》传递参数的工具
人 ---》参数---》iptables ---》netfilter --》对数据进行限制
[root@feng netfilter]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@feng netfilter]# iptables -L
#日志等级 数字越小越紧急 0-7 LOG --log-level 4
$iptables -t filter -A SCLOG -p icmp -j LOG --log-lever 4 --log-prefix "**sanchaung-icmp"
$iptables -A INPUT -s 181.12.13.14 -p tcp --dport 80,443,22 -j DROP
#将INPUT链上的默认规则设置为DROP
$iptables -P INPUT DROP
#新建自定义链SCLOG
$iptables -t filter -N SCLOG
#将INPUT链把流量引导SCLOG自定义链
$iptables -t filter -I INPUT -p tcp -j SCLOG
[root@wangyalin-hunan-changsha iptables]# iptables-
iptables-restore iptables-save iptables-xml
iptables-save 可以保存当前的iptables的一些表和规则链
##恢复之前的iptables服务
[root@wangyalin-hunan-changsha iptables]# iptables-restore </iptables/rules.txt
##导入模块
[root@wangyalin-hunan-changsha ~]# modprobe ip_nat_ftp
#查看模块
[root@wangyalin-hunan-changsha ~]# lsmod |egrep nat
iptables 里的4表5链
规则表
具有某一类相似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的“表”中
规则表是规则链的集合
默认的4个规则表(默认顺序)
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)(不指定表明默认是filter)
入链出链图
表--》链--》规则
数据包经过本机的(仅仅转发)看PRERO UTING链--经过FORWARD
数据包进入本机的(进入数据)主要看INPUT链(需要看四表)
一般不看OUTPT 或者POSTROUTING
[root@feng netfilter]# iptables -t nat -L
自定义链是如何使用的?
[root@hunan-sc ~]# iptables -t filter -N sanchuang
[root@hunan-sc ~]# iptables -A sanchuang -p tcp --dport 2233 -j DROP
[root@hunan-sc ~]# iptables -A INPUT -p tcp -j sanchuang
sanchuang --》拜码头 --》INPUT
[root@hunan-sc ~]# mkdir /iptables
[root@hunan-sc ~]# cd /iptables/
[root@hunan-sc iptables]#
[root@hunan-sc iptables]# vim clear_iptables_rules.sh
[root@hunan-sc iptables]# cat clear_iptables_rules.sh
#!/bin/bash
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -P INPUT ACCEPT
创建计划任务,每分钟清除防火墙规则
[root@hunan-sc iptables]# crontab -e
crontab: installing new crontab
[root@hunan-sc iptables]# crontab -l
*/1 * * * * bash /iptables/clear_iptables_rules.sh
[root@hunan-sc iptables]#
#自启动防火墙 /etc/rc/rc.local
[root@jumpserver rc.d]# cat rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
bash /iptables/iptables-rules.sh
LOG 可以启动抓包的作用
/var/log/messages 默认会记录日志的地方
[root@hunan-sc ~]# iptables -I INPUT -p icmp -j LOG --log-level 4 --log-prefix 'sanchuang'
[root@hunan-sc ~]# tail -f /var/log/messages
Dec 12 11:55:25 hunan-sc kernel: sanchuangIN=ens33 OUT= MAC=00:0c:29:3a:53:75:00:0c:29:53:5f:9f:08:00 SRC=192.168.5.254 DST=192.168.5.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39813 DF PROTO=ICMP TYPE=8 CODE=0 ID=6571 SEQ=1
Dec 12 11:55:26 hunan-sc kernel: sanchuangIN=ens33 OUT= MAC=00:0c:29:3a:53:75:00:0c:29:53:5f:9f:08:00 SRC=192.168.5.254 DST=192.168.5.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=40368 DF PROTO=ICMP TYPE=8 CODE=0 ID=6571 SEQ=2
[root@hunan-sc iptables]# cat iptables_rules.sh
#!/bin/bash
#清除原来的表的规则链里的规则
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -P INPUT ACCEPT
/usr/sbin/iptables -X SCLOG
iptables="/usr/sbin/iptables"
#开放的端口
$iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$iptables -A INPUT -p udp --dport 53 -j ACCEPT
$iptables -A INPUT -p tcp -m multiport --dport 443,22,3306,21,20 -j ACCEPT
$iptables -A INPUT -p icmp -j ACCEPT
$iptables -A INPUT -s 123.12.1.0/24 -j DROP
$iptables -A INPUT -s 181.12.13.14 -p tcp -m multiport --dport 80,443,22 -j DROP
$iptables -P INPUT DROP
#创建自定义的链,并且添加规则
$iptables -t filter -N SCLOG
$iptables -t filter -A SCLOG -p tcp -j LOG --log-level 4 --log-prefix " **sanchuang-tcp** "
$iptables -t filter -A SCLOG -p udp -j LOG --log-level 4 --log-prefix " **sanchuang-udp** "
$iptables -t filter -A SCLOG -p icmp -j LOG --log-level 4 --log-prefix " **sanchuang-icmp** "
#从INPUT链将流量引到SCLOG自定义链
$iptables -t filter -I INPUT -p tcp -j SCLOG
$iptables -t filter -I INPUT -p udp -j SCLOG
$iptables -t filter -I INPUT -p icmp -j SCLOG
firewalld 如何添加规则?
1.zone的概念
查看zones
2.开放端口
3.开放服务
永久开放
firewalld
是在iptables的基础上进行了改良的传参工具,更加好用。
iptables理解为一个函数
firewalld 理解为一个类/库,里面可以有很多的函数
人 ---》参数---》firewalld ---》netfilter --》对数据进行限制
service firewalld restart
[root@feng netfilter]# firewall-cmd --add-port=80/tcp
在firewalld服务里开放80端口,tcp的协议
[root@feng netfilter]# firewall-cmd --list-all
[root@feng netfilter]#
firewalld 如何添加规则?
1.zone的概念
查看zones
2.开放端口
3.开放服务
永久开放
临时开放
4.重载规则
5.查看规则
firewalld的介绍
firewalld防火墙是centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。
支持IPv4、IPv6防火墙设置以及以太网桥
支持服务或应用程序直接添加防火墙规则接口
拥有两种配置模式:临时模式、永久模式
firewalld和iptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfilter网络过滤子系统(属于内核态)来实现包过滤防火墙功能。
firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具。
3.2 firewalld防火墙定义了9个区域(zone)
区域 作用
trusted(信任区域) 允许所有的传入流量。
public(公共区域) 允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
external(外部区域) 允许与ssh预定义服务匹配的传入流量其余均拒绝。
home(家庭区域) 允许与ssh、mdns、samba-client或dhcpv6-client预定义服务匹配的传入流量,其他均拒绝。
internal(内部区域) 默认值与home区域相同。
work(工作区域) 允许与ssh、dhcpv6-client预定义服务匹配的传入流量,其他均拒绝
dmz(隔离区域也称非军事区域) 允许与ssh预定义服务匹配的传入流量,其他均拒绝。
block(限制区域) 拒绝所有传入流量。
firewalld区域介绍
最终一个区域的安全程度是取决于管理员在此区域中设置的规则。
区域如同进入主机的安全门,每个区域都具有不同限制程度的规则,只会允许符合规则的流量传入。
可以根据网络规模,使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口。
默认情况下,public区域是默认区域,包含所有接口(网卡)。
firewalld命令
[root@hunan-sc zones]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
[root@hunan-sc zones]#
[root@hunan-sc zones]# firewall-cmd --get-default-zone
public
[root@hunan-sc zones]#
# systemctl status firewalld
# systemctl start firewalld
# systemctl enable firewalld
# 显示所有可用区域
# firewall-cmd --get-zones
# 显示当前默认区域
# firewall-cmd --get-default-zone
# 查看默认区域设置
# firewall-cmd --list-all
# 为指定区域删除允许访问的服务
# firewall-cmd --zone=public --remove-service=http
# 为指定区域添加允许访问的服务
# firewall-cmd --zone=public --add-service=http
# 设置默认区域
# firewall-cmd --set-default-zone=public
# 显示当前使用的区域和对应网卡
# firewall-cmd --get-active-zones
# 显示指定接口绑定的区域
# firewall-cmd --get-zone-of-interface=ens33
# 为指定接口绑定区域
# firewall-cmd --zone=dmz --add-interface=ens37
# 为指定的区域更改绑定的网络接口
# firewall-cmd --zone=dmz --change-interface=ens33
# 为指定的区域删除绑定的网络接口
# firewall-cmd --zone=dmz --remove-interface=ens37
# 查看指定的区域设置
# firewall-cmd --zone=dmz --list-all
# 显示指定区域可以访问的服务
# firewall-cmd --zone=public --list-services
# 显示系统预定义的服务名
# firewall-cmd --get-service
# 添加多个服务
# firewall-cmd --zone=public --add-services={http,https,redis,ssh}
# 永久生效,运行时配置结束后统一执行
# firewall-cmd --runtime-to-permanent
# 永久生效,需要在设置时加--permanent选项,但是并不是运行时生效,需要重启启动firewalld或者重
reload
# firewall-cmd --permanent --zone=public --add-services=http
# firewall-cmd --reload 或者 systemctl restart firewalld
# 显示指定域中允许访问的端口
# firewall-cmd --zone=public --list-port
# 位指定域中添加允许访问的端口
# firewall-cmd --zone=public --add-port=22/tcp --add-port=80-100/tcp
#位指定域中删除允许访问的端口
# firewall-cmd --zone=public --remove-port=22/tcp --remove-port=80-100/tcp
firewalld 端口映射
# 设置禁止来源IP为192.168.100.134的ip地址访问
# firewall-cmd --add-source=192.168.100.134/24 --zone=drop --类似于iptables中
DROP
# firewall-cmd --add-source=192.168.100.134/24 --zone=block --类似于iptables中
REJECT
# 设置允许来源IP为192.168.100.134的ip地址访问
# firewall-cmd --add-source=192.168.100.134/24 --zone=trusted
# 地址转发端口映射
# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
#firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.100.134
(在访问添加了这个规则的ip的数据包会转发到192.168.100.134的80端口)
[root@hunan-sc ~]# firewall-cmd --add-service=http
success
[root@hunan-sc ~]
http 服务默认的端口号就是80
https 默认的端口号就是443
临时添加
[root@hunan-sc ~]# firewall-cmd --add-port=443/tcp
success
[root@hunan-sc ~]# firewall-cmd --add-port=80/tcp
success
[root@hunan-sc ~]# firewall-cmd --reload 重载firewalld的规则
success
[root@hunan-sc ~]#
[root@hunan-sc ~]# firewall-cmd --add-port=80/tcp --permanent 永久添加规则
success
permanent 永久的
[root@hunan-sc ~]# firewall-cmd --reload 重载规则
success
[root@hunan-sc ~]# firewall-cmd --list-all
[root@hunan-sc ~]# firewall-cmd --remove-port=80/tcp --permanent
success
#重载firewalld
[root@hunan-sc ~]# firewall-cmd --reload
success