【Linux命令】centos防火墙使用和配置
目录
Linux中的防火墙(iptables,firewalld,ip6tables,ebtables)。这些软件本身并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样,真正利用规则进行过滤是由内核的netfilter完成的。CentOS7默认采用的是firewalld管理netfilter子系统,底层调用的仍然是iptables命令。不同的防火墙软件相互间存在冲突,使用某个时应禁用其他的。
防火墙:管理流经网络数据的一种封。(外部数据不能随意出入内网,内部数据已随便出入内网,保护资源,防止入侵)
一、firewalld防火墙
1.1 firewalld基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
禁止开机启动 : systemctl disable firewalld
开机自启 : systemctl enable firewalld
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
或systemctl list-unit-files rpcbind* | grep enabled
查看启动失败的服务列表:systemctl is-failed firewalld
PS:systemctl start/stop/enable/disable/status/is-active 服务名称 //systemctl服务管理命令
1.2 firewalld-cm基本使用
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
1.3 常用参数使用
# 开启指定端口
# firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,不加此参数重启后失效) # 重新载入
# firewall-cmd --reload # 查看
# firewall-cmd --zone=public --query-port=80/tcp # 删除端口
# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 调整默认策略(默认拒绝所有访问,改成允许所有访问):
# firewall-cmd --permanent --zone=public --set-target=ACCEPT # 重新载入
#firewall-cmd --reload # 对某个IP开放多个端口:
# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="ip地址" port protocol="tcp" port="1:65535" accept" # firewall-cmd --reload
二、iptables防火墙
表:filter过滤
Nat做nat
链:INPUT位于filter表,匹配目的ip本机的数据
OUTPUT流出(一般不设置)
FORWARD转发访问,位于filter表,穿越本机的数据包
PREROUTING位于nat表,修改目的地址DNAT
POSTROUTING位于nat表,修改源地址SNAT
2.1 iptables服务管理
service iptables start|stop|restart|status service iptables save //定义的所有内容,在重启时都会失效。调用save命令可以把规则保存到文件/etc/sysconfig/iptables中。
iptables-save //保存规则
iptables-restore //加载规则。开机的时候,会自动加载/etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables2 //加载自定义的规则文件 //iptables服务配置文件: /etc/sysconfig/iptables-config
//iptables规则文件: /etc/sysconfig/iptables echo "">/proc/sys/net/ipv4/ip_forward //打开iptables转发:
2.2 iptables命令参数
1)省缺表名为filter。命令中用到的序号(RULENUM)都基于1。
iptables [-t TABLE] COMMAND [CHAIN] [CRETIRIA]... [-j ACTION]
iptables -t 表名 操作命令 链名 约束条件 -j 动作
COMMAND参数选项:
-A|--append CHAIN //链尾添加新规则
-D|--delete CHAIN [RULENUM] //删除链中规则,按需序号或内容确定要删除的规则
-I|--insert CHAIN [RULENUM] //在链中插入一条新的规则,默认插在开头
-R|--replace CHAIN RULENUM //替换、修改一条规则,按序号或内容确定
-L|--list [CHAIN [RULENUM]] //列出指定链或所有链中指定规则或所有规则
-S|--list-urles [CHAIN [RULENUM]] //显示链中规则
-F|--flush [CHAIN] //清空指定链或所有链中规则
-Z|--zero [CHAIN [RULENUM]] //重置指定链或所有链的计数器(匹配的数据包数和流量字节数)
-N|--new-chain CHAIN //新建自定义规则链
-X|--delete-cahin [CHAIN] //删除指定表中用户自定义的规则链
-E|--rename-chain OLDCHAIN NEWCHAIN //重命名链,移动任何引用
-P|-policy CHAIN TARGET //设置链的默认策略,数据包未匹配任意一条规则就按此策略处理
CRETIRIA 条件匹配:
分为基本匹配和扩展匹配,扩展匹配又分为隐式匹配和显示匹配
1)基本匹配
-p|--proto PROTO //按协议匹配,如tcp、udp、icmp,all表示所有协议。 (/etc/protocols中的协议名)
-s|--source ADDRESS[/mask]... //按数据包的源地址匹配,可使用IP地址、网络地址、主机名、域名
-d|--destination ADDRESS[/mask]... //按目标地址匹配,可使用IP地址、网络地址、主机名、域名
-i|--in-interface INPUTNAME[ +] //按入站接口(网卡)名匹配,+用于通配。如 eth0, eth+ 。一般用在INPUT和PREROUTING链
-o|--out-interface OUTPUTNAME[+] //按出站接口(网卡)名匹配,+用于通配。如 eth0, eth+ 。一般用在OUTPUT和POSTROUTING链 可使用 ! 可以否定一个子句,如-p !tcp
2)扩展匹配
-m|--match MATCHTYPE EXTENSIONMATCH... //扩展匹配,可能加载extension
如: -p tcp -m tcp --dport 隐式扩展匹配(对-p PROTO的扩展,或者说是-p PROTO的附加匹配条件)
-m PROTO 可以省略,所以叫隐式
-m tcp //-p tcp的扩展
--sport [!]N[:M] //源端口, 服务名、端口、端口范围。
--dport [!]N[:M] //目标端口,服务名、端口、端口范围
--tcp-flags CHECKFLAGS FLAGSOFTRUE //TCP标志位:SYN(同步),ACK(应答),RST(重置),FIN(结束),URG(紧急),PSH(强迫推送)。多个标志位逗号分隔。
//CHECKFLAGS为要检查的标志位,FLAGSOFTRUE为必须为1的标志位(其余的应该为0)
--syn //第一次握手。 等效于 --tcpflags syn,ack,fin,rst syn 四个标志中只有syn为1
-m udp //-p udp的扩展
--sport N[-M]
--dport N[-M]
-m icmp //隐含条件为-p icmp
--icmp-type N //8:echo-request 0:echo-reply # 显示扩展
-m state
--state //连接状态检测,NEW,ESTABLISHED,RELATED,INVALID
-m multiport
--source-ports PORT[,PORT]...|N:M //多个源端口,多个端口用逗号分隔,
--destination-ports PORT[,PORT]...|N:M //多个目的端口
--ports //多个端口,每个包的源端口和目的端口相同才会匹配
-m limit
--limit N/UNIT //速率,如3/minute, 1/s, n/second , n/day
--limit-burst N //峰值速率,如100,表示最大不能超过100个数据包
-m connlimit
--connlimit-above N //多于n个,前面加!取反
-m iprange
--src-range IP-IP
--dst-range IP-IP
-m mac
--mac-source //mac地址限制,不能用在OUTPUT和POSTROUTING规则链上,因为封包要送到网卡后,才能由网卡驱动程序透过ARP 通讯协议查出目的地的MAC 地址
-m string
--algo [bm|kmp] //匹配算法
--string "PATTERN" //匹配字符模式
-m recent
--name //设定列表名称,默认为DEFAULT
--rsource //源地址
--rdest //目的地址
--set //添加源地址的包到列表中
--update //每次建立连接都更新列表
--rcheck //检查地址是否在列表
--seconds //指定时间。必须与--rcheck或--update配合使用
--hitcount //命中次数。必须和--rcheck或--update配合使用
--remove //在列表中删除地址
-m time
--timestart h:mm
--timestop hh:mm
--days DAYS //Mon,Tue,Wed,Thu,Fri,Sat,Sun; 逗号分隔
-m mark
--mark N //是否包含标记号N
-m owner
--uid-owner //用来匹配来自本机的封包,是否为某特定使用者所产生的,可以避免服务器使用root或其它身分将敏感数据传送出
--gid-owner O //用来匹配来自本机的封包,是否为某特定使用者群组所产生的
--pid-owner //用来匹配来自本机的封包,是否为某特定进程所产生的
--sid-owner //用来匹配来自本机的封包,是否为某特定连接(Session ID)的响应封包
ACTION 目标策略(TARGET):
-j|--jump TARGET //跳转到目标规则,可能加载target extension
-g|--goto CHAIN //跳转到指定链,不再返回 ACCEPT 规则验证通过,不再检查当前链的后续规则,直接跳到下一个规则链。
DROP 直接丢弃数据包,不给任何回应。中断过滤。
REJECT 拒绝数据包通过,会返回响应信息。中断过滤。
--reject-with tcp-reset|port-unreachable|echo-reply
LOG 在/var/log/messages文件中记录日志,然后将数据包传递给下一条规则。详细位置可查看/etc/syslog.conf配置文件
--log-prefix "INPUT packets"
ULOG 更广范围的日志记录信息
QUEUE 防火墙将数据包移交到用户空间,通过一个内核模块把包交给本地用户程序。中断过滤。
RETURN 防火墙停止执行当前链中的后续规则,并返回到调用链。主要用在自定义链中。
custom_chain 转向自定义规则链
DNAT 目标地址转换,改变数据包的目标地址。外网访问内网资源,主要用在PREROUTING。完成后跳到下一个规则链
--to-destination ADDRESS[-ADDRESS][:PORT[-PORT]]
SNAT 源地址转换,改变数据包的源地址。内网访问外网资源。主机的IP地址必须是静态的,主要用在POSTROUTING。完成后跳到下一个规则链。
--to-source ADDRESS[-ADDRESS][:PORT[-PORT]]
MASQUERADE 源地址伪装,用于主机IP是ISP动态分配的情况,会从网卡读取主机IP。直接跳到下一个规则链。
--to-ports -
REDIRECT 数据包重定向,主要是端口重定向,把包分流。处理完成后继续匹配其他规则。能会用这个功能来迫使站点上的所有Web流量都通过一个Web高速缓存,比如Squid。
--to-ports
MARK 打防火墙标记。继续匹配规则。
--set-mark
MIRROR 发送包之前交换IP源和目的地址,将数据包返回。中断过滤。
辅助选项:
-t|--table TABLE //指定操作的表,默认的表为filter
-n|--numeric //用数字形式显示地址和端口,显示主机IP地址而不是主机名
-x|--exact //计数器显示精确值,不做单位换算
-v|--verbose (x3) //查看规则列表时,显示更详细的信息
-line-numbers //查看规则表时,显示在链中的序号
-V|--version
-h|--help
[option] --help //查看特定选项的帮助,如iptables -p icmp --help --fragment -f //match second or further fragments only
--modprobe=<command> //try to insert modules using this command
--set-counters PKTS BYTES //set the counter during insert/append
state TCP链接状态
- NEW 第一次握手,要起始一个连接(重设连接或将连接重导向)
- ESTABLISHED 数据包属于某个已经建立的连接。第二次和第三次握手 (ack=1)
- INVALID 数据包的连接编号(Session ID)无法辨识或编号不正确。如SYN=1 ACK=1 RST=1
- RELATED 表示该封包是属于某个已经建立的连接,所建立的新连接。如有些服务使用两个相关的端口,如FTP,21和20端口一去一回,FTP数据传输(上传/下载)还会使用特殊的端口
只允许NEW和ESTABLISHED进,只允许ESTABLISHED出可以阻止反弹式木马。
实例:
虚拟机上设置ip网卡地址:
设置桥接到真机,真机做客户端
# 删除iptables现有规则
iptables -F # 查看iptables规则
iptables -L [-v[vv] -n]
iptables -t filter -L INPUT
iptables -L -n --line-numbers # 拒绝所有INPUT链的规则(注意,运行这个语句,会造成ssh连接不上,如果没有保存,重启服务器,下面的语句就不会生效了)
iptables -t filter -A INPUT -j DROP # 在INPUT链尾添加一条规则
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # 在INPUT链中插入为第2条规则(INPUT后可接数字,删除的时候也可以接数字)
iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# 删除INPUT链中第2条规则
iptables -D INPUT 2 # 替换修改第三条规则
iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # 设置INPUT链的默认策略为DROP
iptables -P INPUT DROP # 允许远程主机进行SSH连接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # 允许本地主机进行SSH连接
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INTPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # 允许HTTP请求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # 限制ping 192.168.146.3主机的数据包数,平均2/s个,最多不能超过3个
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT #限制SSH连接速率(默认策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT # 防止syn攻击(限制syn的请求速度)
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP # 防止syn攻击(限制单个ip的最大syn连接数)
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP # 利用recent模块抵御DOS攻击(插入一条规则)
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH //单个IP最多连接3个会话
iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP //只要是新的连接请求,就把它加入到SSH列表中。5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。 iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP //防止单个IP访问量过大
iptables –A OUTPUT –m state --state NEW –j DROP //阻止反弹木马
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT //防止ping攻击 # 只允许自己ping别人,不允许别人ping自己
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 # SNAT 基于原地址转换。许多内网用户通过一个外网 口上网的情况。将我们内网的地址转换为一个外网的IP,共用外网IP访问外网资源。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1 # 当外网地址不是固定的时候。将外网地址换成 MASQUERADE(动态伪装):它可以实现自动读取外网网卡获取的IP地址。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE # DNAT 目标地址转换。目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2
开放指定端口:
-A和-I参数分别为添加到规则末尾和规则最前面。
#允许本地回环接口(即运行本机访问本机) -i指interface
iptables -A INPUT -i lo -j ACCEPT # 允许tcp状态已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许所有本机向外的访问
iptables -P INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT # 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.159.1.0/24 --dport 22 -j ACCEPT
PS:-s后可以跟IP段或指定IP地址 #允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT #禁止其他未允许的规则访问
iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT
屏蔽IP:
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
删除已有规则:
# 先查看规则列表
iptables -L -n --line-numbers # 比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 8
替换规则:
# 替换指定序号的规则
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
PS:也可以通过配置文件来添加规则,只需要将命令行的命令签名的iptables去掉即可
参考博客
https://www.cnblogs.com/hftian/p/8280841.html
https://www.cnblogs.com/shawhe/p/9485746.html
https://www.jianshu.com/p/83d971e74c31
【Linux命令】centos防火墙使用和配置的更多相关文章
- CentOS防火墙iptables的配置方法详解
CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助. iptables是与Linux ...
- 我用过的Linux命令--关闭防火墙
关闭防火墙: 防火墙的弄能是限制某一些端口的使用,可以通过linux命令关系它,相应的指令: 查看防火墙信息: #service iptables status 就能看到防火墙的状态: 关闭防火墙: ...
- Linux命令(七)——网络配置和网络通信
在使用网络前,需要对linux主机进行基本的网络配置,配置后可以使该主机能够同其他主机进行正常的通信. 一.网络配置 1.ifcfg-ethn网络配置文件 所有的网络接口配置文件均存放在/etc/sy ...
- 常用的Linux命令和Git的必要配置
常用的Linux命令平时一定要多使用这些基础的命令! 1.cd : 改变目录. 2.cd . . 回退到上一个目录,直接cd进入默认目录 3.pwd : 显示当前所在的目录路径. 4.ls(ll): ...
- Linux命令 — 设置或查看网络配置命令ifconfig
ifconfig命令用于设置或查看网络配置,包括IP地址.网络掩码.广播地址等.它是linux系统中,使用频率最高的关于网络方面的命令. 1. 命令介绍 命令格式: ifconfig [interfa ...
- Linux使用——Linux命令——CentOS7防火墙使用
注意:设置防火墙需要使用具有root权限的用户进入: CentOS 7.0默认使用的是firewall作为防火墙: CentOS 7.0使用systemctl来管理服务和程序,包括了service和c ...
- 【Linux】- CentOS 防火墙iptables和firewall
1 iptables防火墙 1.1 基本操作 # 查看防火墙状态 service iptables status # 停止防火墙 service iptables stop # 启动防火墙 s ...
- linux suse系统防火墙端口开放配置
1.切换到root用户下 2.进入到/etc/sysconfig/SuSEfirewall2 3.修改FW_SERVICES_EXT_TCP=" 22 80 8080 8081 8082 8 ...
- Linux:CentOS7防火墙 开放端口配置
查看已开放的端口 firewall-cmd --list-ports 开放端口(开放后需要要重启防火墙才生效) firewall-cmd --zone=public --add-port=3338/t ...
随机推荐
- centos7 配置阿里镜像
1. 备份原来的yum源 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.设置aliyun的y ...
- 电竞行业年轻新潮流yabo055解读亚博电竞3.0时代
据相关统计,目前我国电竞行业yabo055点康姆的电竞竞菜市场规模最少在百亿级别以上,这是在以前完全不能想象的.2018年,中国正式开始进入Gaming 3.0时代.想要投入电竞行业的人员越来越多,不 ...
- 03-MySQL安装与配置
一.安装MySQL 1.我的是centos8,因此命令为: sudo yum install mysql-server 2.安装完成后查看是否启动 ps aux|grep mysql 3.启动mysq ...
- SpringBoot与数据层
1.JDBC <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- python Json报错json.decoder.JSONDecodeError
近期工作中遇到一个问题,执行json.loads(json_data)时,在json_data中加上tab空格后就报错,不加则不报错 一.json.loads(json_data) 报错json.de ...
- spring = servlet + 依赖管理 + 业务逻辑
spring = servlet + 依赖管理 + 业务逻辑
- apt-get原理
apt-get 而这个步骤全要用户亲力亲为可能又有些麻烦,懒是科技发展的重要推动力.所以软件厂商自己编译好了很多二进制文件,只要系统和环境对应,下载之后就能直接安装. 但是如果下载了很多软件我想要管理 ...
- 数据显示按规格向datatable中增加空白记录
/// <summary> /// 按前台分页样式为datatable增加空行 /// </summary> /// <param name="gridPage ...
- 项目部署到Linux上遇到的坑
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.本地Navicat for MySQL无法连接至服务器(Centos 7 x86_64 bbr) 1045错误: 解决步骤: 1.查看用户名密 ...
- 微信小程序头像为什么是模糊的?小程序头像模糊怎么办?
「柒留言」更新的换国旗头像小功能,获取头像显示模糊... 1.头像模糊 国庆之前,更新了「柒留言」小程序加国旗头像的小功能,但是头像模糊这个坑我在发布新版之前还没解决. 一直以为是代码出了问题,各种搜 ...