iptables防火墙详解(一)
--
防火墙
常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网......
iptables
firewalld http://www.netfilter.org/ netfilter / iptables --iptables 的全名 2.4版本内核后都集成有这个组件 # yum install iptables\* # rpm -qa |grep iptables
iptables-services-1.4.21-17.el7.x86_64
iptables-utils-1.4.21-17.el7.x86_64
iptables-devel-1.4.21-17.el7.x86_64
iptables-1.4.21-17.el7.x86_64 # systemctl start iptables.service
# systemctl status iptables.service
iptables 基本概念
四张表: 表里有链 (chain ) filter: 用来进行包过滤: INPUT OUTPUT FORWARD
nat: 用来网络地址转换: network address translation ,允许一个内网地址块,通过NAT转换成公网IP,实现对公网的访问,解决IP地址不足
PREROUTING INPUT POSTROUTING OUTPUT
mangle :用来对数据包标记
PREROUTING INPUT OUTPUT FORWARD POSTROUTING
raw:对原始数据包的处理
PREROUTING OUTPUT Incoming / \ Outgoing
-->[Routing ]--->|FORWARD|------->
[Decision] \_____/ ^
| |
| ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
----> Local Process ----
iptables
-A 增加一条规则,后接链名,默认是加到规则的最后面
-D 删除
-L 列出规则
-n 以数值显示
-I 在最前面插入规则
-v 显示统计数据,与-L一起用,看到的信息更多
-F 清空规则
-z 清空计数器
-x 清空自定义链
-t 后接表名
-P policy,默认策略
-p protocol,后接协议名
--dport 目标端口
--sport 源端口
-d destination,目标地址
-s source,源地址
-i 接网卡接口, 进入的网卡接口
-o 接网卡接口, 出去的网卡接口
-j 后接动作 动作的分类: ACCEPT 接收数据包
DROP 丢弃数据包
REJECT 拒绝数据包,和DROP的区别就是REJECT会返回错误信息,DROP不会
MASQUEREAD IP地址伪装,使用NAT转换成外网IP,可以PPP拔号(外网IP不固定情况)
SNAT 源地址转换,它与MASQUEREAD的区别是SNAT是接一个固定IP
DNAT 目标地址转换
LOG 记录日志 例1,列规则
iptables -L --默认看的就是filter表
iptables -L -t filter
iptables -L -t nat
iptables -L -t mangle
iptables -L -t raw # iptables -t filter -F
# iptables -t nat -F
# iptables -t mangle -F --这三张表有些默认的规则,我们把规则都清掉 例2,控制ping 172.16.25.0/24网段ping本机,会被拒绝(客户端会收到拒绝信息)
# iptables -t filter -A INPUT -p icmp -s 172.16.25.0/24 -j REJECT
# iptables -t filter -D INPUT -p icmp -s 172.16.25.0/24 -j REJECT --删除上一条规则 # iptables -t filter -A INPUT -p icmp -s 172.16.25.0/24 -j DROP
# iptables -t filter -D INPUT -p icmp -s 172.16.25.0/24 -j DROP # iptables -t filter -A OUTPUT -p icmp -d 172.16.25.0/24 -j REJECT
# iptables -t filter -D OUTPUT -p icmp -d 172.16.25.0/24 -j REJECT # iptables -t filter -A OUTPUT -p icmp -d 172.16.25.0/24 -j DROP
# iptables -t filter -D OUTPUT -p icmp -d 172.16.25.0/24 -j DROP --上面四种方法都可以控制拒绝172.16.25.0/24网段ping本机 # iptables -t filter -A INPUT -p icmp -j REJECT --如果不写-s或-d,默认代表所有人 扩展
我想实现所有人都ping不通我,但是172.16.25.X(X你自定义)这个IP能ping通我 --提示:iptables的匹配规则:读取的顺序是从上往下一条一条匹配,匹配一条就不继续往下匹配,都没有匹配,则最后匹配默认策略 # iptables -t filter -A INPUT -p icmp -j REJECT
# iptables -t filter -A INPUT -p icmp -s 172.16.25.X -j ACCEPT
--此写法错误的 # iptables -t filter -A INPUT -p icmp -j REJECT
# iptables -t filter -I INPUT -p icmp -s 172.16.25.X -j ACCEPT
--正确写法,把第二条加到第一条前面 # iptables -t filter -I INPUT 2 -p icmp -s 172.16.25.X -j ACCEPT
--链后面接数字2,表示插入到原来第二条的上面,成为新的第2条 删除的方法:
方法一:
# iptables -t filter -D INPUT -s 172.16.25.X -p icmp -j ACCEPT
--加的时候怎么写,删除时就要怎么写 A 参数换成 D就可以
方法二;
# iptables -L -n --line
# iptables -D INPUT 2
--在规则比较多或者不好写规则的情况下,可以先用--line或者--line-number列出行号,再用行号删除 方法三:
# iptables -F
--直接清空filter表的所有规则 iptables -X
iptables -Z --清除计数器,自定义链 修改操作:
# iptables -t filter -R INPUT 3 -p icmp -s 172.16.25.248 -j ACCEPT
--把filter表INPUT链第三行,修改成上面的命令的内容 例3,规则的保存与还原
# iptables-save > /etc/sysconfig/iptables --将当前规则保存到这个文件,文件可以自定义 # iptables-restore < /etc/sysconfig/iptables --把保存的规则还原回去 --/etc/sysconfig/iptables文件为默认保存文件,重启iptables服务会默认把此文件里的规则还原。当然也可以手工保存到另一个文件,就需要iptables-restore手工还原了。 如果要永久保留此规则,则先iptables-save > /etc/sysconfig/iptables保存,再# systemctl enable iptables.service做成开机自动启动就可以了 如果你想做成开机自动空规则(没有任何iptables策略),你可以把/etc/sysconfig/iptables保存为空规则,然后systemctl enable iptables.service 例4,每个链的默认策略的修改
# iptables -P INPUT DROP --INPUT键默认策略改为DROP,改回来把DROP换成ACCEPT就行了
# iptables -P OUTPUT DROP --OUTPUT键默认策略改为DROP 例5,实现允许ssh过来(代表本机为服务器身份),ssh出去(代表本机为客户端身份),别的任何访问都拒绝 (要求,INPUT和OUTPUT双链默认策略都为DROP)
172.16.25.2 172.16.25.3 OUTPUT INPUT
客户端 随机端口 ---》 服务器 22
(1024-65535)
客户端 随机端口 《--- 服务器 22
INPUT OUTPUT
服务器
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 22 -s 172.16.25.2 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 172.16.25.2 -j ACCEPT 客户端
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A OUTPUT -p tcp --dport 22 -d 172.16.25.3 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -s 172.16.25.3 -j ACCEPT 例6,
把上面的例子基础上再加http服务(tcp的80端口),怎么做?
答案:和上面做法一样,把22换成80就ok了
http tcp 80
https tcp 443 例7,
在上面的基础上再加上允许别人访问本台服务器的DNS
只需要做udp的53端口就可以了,不用写tcp 53(因为tcp 53主要是用于主从DNS服务器同步的)
一些特殊的写法
连续端口或多端口写法
iptables -A INPUT -p tcp --dport 1:1000 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 25,110 -j ACCEPT 硬件地址
iptables -A INPUT -m mac --mac-source 00:23:CD:95:DA:0B -p all --dport 80 -j ACCEPT 例8
samba
139 445 例9, 邮件服务器
smtp 25 pop3 110 imap 143
smtps 465 pop3s 995 imaps 993
----- 公司邮件服务器-----
| |
| |
张三(发信人) 李四(收信人)
8888@qq.com 9999@qq.com 网易邮件服务器 ----------腾讯邮件服务器
| |
| |
张三(发信人) 李四(收信人)
zhangsan@126.com 9999@qq.com # iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -A INPUT -p tcp -m multiport --dport 25,110,143 -s 172.16.25.0/24 -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --sport 25,110,143 -d 172.16.25.0/24 -j ACCEPT 例10 dhcp
iptables 对dhcp端口控制无效
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层 例11
nfs
--因为nfs用到rpc调用,端口不固定,所以需要把端口给固定起来.nis服务也会用到rpc调用,也需要做端口绑定
vim /etc/sysconfig/nfs --在此文件里加上下面四句
LOCKD_TCPPORT=3000
LOCKD_UDPPORT=3000
MOUNTD_PORT=3001
STATD_PORT=3002 /etc/init.d/nfs restart
/etc/init.d/rpcbind restart --这里先把默认策略改成ACCEPT,再启动就可以启动起来,然后再把默认策略改回成DROP,再继续做下面的实验 netstat -ntl |grep 300 去查看,看到rpc.的守护进程的端口为自己绑定的端口 iptables -A INPUT -p tcp --dport 3000:3002 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3000:3002 -j ACCEPT
iptables -A INPUT -p udp --dport 3000:3002 -j ACCEPT
iptables -A OUTPUT -p udp --sport 3000:3002 -j ACCEPT 还要加上2049(nfs)和111(rpcbind)的端口的规则 iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 2049 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT
iptables -A OUTPUT -p udp --sport 2049 -j ACCEPT iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A OUTPUT -p udp --sport 111 -j ACCEPT --现在就可以用另一台机showmount -e 查看并进行挂载了 --练习:把上面的3000,3001,3002,2049,111合起来来做
# iptables -A INPUT -p tcp -m multiport --dport 111,2049,3000,3001,3002 -j ACCEPT
# iptables -A INPUT -p udp -m multiport --dport 111,2049,3000,3001,3002 -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --sport 111,2049,3000,3001,3002 -j ACCEPT
# iptables -A OUTPUT -p udp -m multiport --sport 111,2049,3000,3001,3002 -j ACCEPT 例12: yum
视你做的yum类型而定
file
ftp
http 例13
mysql
3306 例14
rsync
873
还加一个22 例15
vnc
5900 例16:
telent
23 例17:
tftp
69 例18:
rsyslog远程日志 tcp/udp 514
练习:
ftp实现双链拒绝的情况下,客户端通过主动和被动都能访问进来
服务器端准备:
# yum install vsftpd -y # vim /etc/vsftpd/vsftpd.conf --直接在配置文件最后加上这两句就可以
pasv_min_port=3000
pasv_max_port=3005 # systemctl restart vsftpd
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP 客户端测试方法:
1,命令连接测试,能成功连接上就表示命令端口连接没问题
# ftp 172.16.25.3(服务器的ip)
2,数据传输测试,用上面的命令登录成功后,在客户端使用passive指令转换你的主动和被动模式,
(服务器端不用转换,因为服务器端默认就是主动和被动都支持的)
然后使用ls指令能看到里面的pub子目录就表示数据传输OK了(因为默认是登录到服务器的/var/ftp/目录,里面有一个pub子目录) ftp有主动和被动的连接两种
1,为什么有主动和被动两种连接方式呢?
因为这是一种比较古老的设计方式,它是假设客户端用户有防火墙并且还不会配置防火墙的情况下,才设计出两种模式。
防火墙默认只会拒绝进来的包,而不会拒绝出去或出去回来的包。
2,一般用主动好还是被动好?
用被动比较常见,(原因参考问题一)
3,主动和被动在使用时的区别?
没有防火墙,那么使用起来没什么区别,只是底层传输包的方式不一样
有防火墙,那么防火墙的规则写法也不一样 主动:
server client 20 21 n m
<-------------
-------------->
---------------------------------------->
<--------------------------------------- iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT 被动:
server client
随机端口 21 n m
3000-3005 <---------------
---------------->
<--------------------------------------------
---------------------------------------------> iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000:3005 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3000:3005 -j ACCEPT ================================================================================
rhel7和centos7的新防火墙软件 firewalld (但仍然可以使用iptables)
官网地址
http://www.firewalld.org/
# yum install firewalld firewall-config
# systemctl restart firewalld --启动服务
# systemctl status firewalld --确认状态
# systemctl enable firewalld --设为开机自动启动(可选) 概念一:
Zone 简单来说就是防火墙方案,就是一套规则集,你可以切换使用哪一个zone # firewall-cmd --get-zones --查看现在有哪些zone
work drop internal external trusted home dmz public block drop:拒绝所有外部连接请求。
block:拒绝所有外部连接(with an icmp-host-prohibited message for IPv4 and icmp6-adm-prohibited for IPv6),允许内部发起的连接
public:适用公共环境,拒绝所有外部连接请求,但指定外部连接可以进入
external:特别适用路由器启用了伪装功能的外部网。拒绝所有外部连接请求,只能接收经过选择的连接。
dmz:用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。(受限制的公共连接可以进入)
work:适用于工作网络环境,概念和workgoup一样,也是指定的外部连接允许用于工作区。
home:类似家庭组,用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接
internal:用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接
trusted:可接受所有的网络连接。(最不安全) # firewall-cmd --get-default-zone --查看当前使用的zone
public
# firewall-cmd --set-default-zone=work
# firewall-cmd --set-default-zone=public --修改当前使用的zone
# firewall-cmd --list-all --查看当前使用的zone的规则集
# firewall-cmd --zone=work --list-all --指定查看work这个zone的规则集
概念二:
网卡接口
# firewall-cmd --zone=public --add-interface=eth0 --指定网卡加入到哪个zone
# firewall-cmd --get-zone-of-interface=eth0 --查看网卡加入到哪个zone 概念三:
port,service 分别表示端口和服务
# firewall-cmd --add-port=80/tcp --允许tcp的80端口进来的通迅(类似iptables的INPUT)
# firewall-cmd --remove-port=80/tcp --删除上面的规则
# firewall-cmd --add-service=http --允许http服务进来的通迅(不用管它是什么端口,只记住服务就好了)
# firewall-cmd --remove-service=http
# firewall-cmd --add-service=ftp --允许ftp服务进来的通迅(无论主动还是被动都可以,这样就把iptables的写法简单化了)
# firewall-cmd --remove-service=ftp 概念四:
rich-rule复杂规则
# firewall-cmd --add-rich-rule="rule family="ipv4" source address=172.16.25.1 service name="ssh" accept" 下面两条合起来实现允许所有人访问我的http,但drop掉172.16.25.1的访问我的http的包
# firewall-cmd --add-service=http
# firewall-cmd --add-rich-rule="rule family="ipv4" source address=172.16.25.1 service name="http" drop" 概念五:
关于立即生效与永久生效的讨论
上面加端口或加服务规则,是立即生效,但重启不生效(可以使用firewall-cmd --reload来装载保存的规则)
# firewall-cmd --permanent --add-service=ftp --加了一个--permanent参数后,立即不生效,需要reload后才能生效 实际写规则时,建议直接写(不加--permanent参数),所有规则写完,测试完成后,再使用# firewall-cmd --runtime-to-permanent全部转成permanent规则 概念六:
panic模式
# firewall-cmd --panic-on
# firewall-cmd --panic-off 概念七:
图形配置
# firewall-config
iptables防火墙详解(一)的更多相关文章
- iptables防火墙详解
iptables常用命令 iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig ...
- Linux iptables 防火墙详解
0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些 ...
- iptables 防火墙详解
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...
- iptables防火墙详解(二)
-- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有11种之多(课后可以自己去读一下相关知识) 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及I ...
- iptables防火墙详解(三)
linux 高级路由 策略路由(mangle表) lartc(linux advanced routing and traffic control) http://www.lartc.org # rp ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
- linux下IPTABLES配置详解 (防火墙命令)
linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- CentOS 6.5 iptables原理详解以及功能说明
CentOS 6.5 iptables原理详解以及功能说明 来源 https://blog.51cto.com/tanxw/1389114 前言 iptables其实就是Linux下的一个开源的信息过 ...
随机推荐
- C#复习笔记(4)--C#3:革新写代码的方式(扩展方法)
扩展方法 扩展方法有以下几个需求: 你想为一个类型添加一些 成员: 你不需要为类型的实例添加任何更多的数据: 你不能改变类型本身, 因为是别人的代码. 对于C#1和C#2中的静态方法,扩展方法是一种更 ...
- 为什么说Java中只有值传递(转载)
出处:https://www.hollischuang.com/archives/2275 关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同, ...
- [转帖]linux 清空history以及记录原理
linux 清空history以及记录原理 自己的linux 里面总是一堆 乱七八槽输错的命令 用这个办法 可以清空 linux的内容. 清爽一些. 1.当前session执行的命令,放置缓存中,执行 ...
- Eclipse的一个“bug”
标题之所以打上双引号,是因为暂时不知道怎么确定. 一个 .java文件里有两个类:public Bath:Soap.它们都有一个main()方法. 从命令行单独访问任意一个类的main()方法,都没毛 ...
- hive聚合函数和表生成函数
explode生成单独的一行
- java学习之—递归实现二分查找法
/** * 递归实现二分查找法 * Create by Administrator * 2018/6/21 0021 * 上午 11:25 **/ class OrdArray{ private lo ...
- 进程有一个全局变量i,还有有两个线程。i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?
转自https://blog.csdn.net/biubiu741/article/details/77990592 i++不是原子操作,也就是说,它不是单独一条指令,而是3条指令: 1.从内存中把i ...
- 简单比较init-method,afterPropertiesSet和BeanPostProcessor
一.简单介绍 1.init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置.init-method需要在applicationContext.xml配置文档中bean的 ...
- shit vue & shit iview
shit vue & shit iview <Switch> !== <i-switch> https://www.iviewui.com/components/swi ...
- Spring Boot基础:Spring Boot简介与快速搭建(1)
1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Spring Boot默认使用tomca ...