Linux的防火墙iptables配置示例
注:内容来自网络
一、关闭防火墙
1、重启后永久性生效:
开启:chkconfig iptables on
关闭:chkconfig iptables off
2、即时生效,重启后失效:
开启:service iptables start
关闭:service iptables stop
在开启了防火墙时,做如下设置,开启相关端口,修改 /etc/sysconfig/iptables 文件,添加以下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙
备注:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,
正确的应该是添加到默认的22端口这条规则的下面
二、关闭SELinux
vim /etc/selinux/config # 改为 SELINUX=disabled
# 保存退出,重启服务器
--------------------------------------------------------------------------------------------------------------------------------------------------
以root权限运行下面的命令:
# iptables -L -n -v 
参数说明:
-L:列出规则。
-v:显示详细信息。此选项会显示接口名称、规则选项和TOS掩码,以及封包和字节计数。
-n:以数字形式显示IP地址和端口,不使用DNS解析。
如果希望输出的结果中显示行号,可以运行:
# iptables -L -n -v --line-nmubers 
这样,就可以按照行号在防火墙中添加、删除规则。
要显示输入或输出链规则,可以运行:
# iptables -L INPUT -n -v  
# iptables -L OUTPUT -n -v --line-numbers 
2.停止、开启和重启防火墙
如果你使用的是RHEL/Fedora/CentOS系统,可以运行:
# service iptables stop  
# service iptables start  
# service iptables restart 
我们也可以使用iptables命令停止防火墙并删除所有规则:
# iptables -F  
# iptables -X  
# iptables -t nat -F  
# iptables -t nat -X  
# iptables -t mangle -F  
# iptables -t mangle -X  
# iptables -P INPUT ACCEPT  
# iptables -P OUTPUT ACCEPT  
# iptables -P FORWARD ACCEPT 
参数说明:
-F:删除所有的规则
-X:删除链
-t table_name:匹配表(称为nat或mangle)
-P:设置默认策略(如DROP、REJECT或ACCEPT)
3.删除防火墙规则
以带行号的形式显示已有的防火墙规则,请运行:
# iptables -L INPUT -n --line-numbers  
# iptables -L OUTPUT -n --line-numbers  
# iptables -L OUTPUT -n --line-numbers | less  
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1 
下面我们使用行号删除规则:
# iptables -D INPUT 4 
将IP地址202.54.1.1从规则中删除:
# iptables -D INPUT -s 202.54.1.1 -j DROP 
参数说明:
-D:从选择的链中删除一条或多条规则
4.插入防火墙规则
首先运行下面的命令:
# iptables -L INPUT -n --line-numbers 
得到运行结果:
Chain INPUT (policy DROP)  
num  target    prot opt source     destination  
1   DROP      all  --  202.54.1.1  0.0.0.0/0  
2   ACCEPT    all  --  0.0.0.0/0    0.0.0.0/0 
在行1和行2之间插入规则:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP 
查看更新后的规则,会发现插入成功,下面是示例:
Chain INPUT (policy DROP)  
Num  target    prot opt source    destination     
1     DROP    all  --  202.54.1.1  0.0.0.0/0  
2     DROP    all  --  202.54.1.2  0.0.0.0/0  
3     ACCEPT  all  --  0.0.0.0/0    0.0.0.0/0 
5.保存防火墙规则
在RHEL/Fedora/CentOS Linux下,可以使用下面的命令保存防火墙规则:
# service iptables save 
在其它Linux发行版(如Ubuntu)上,可以使用iptables-save命令保存防火墙规则:
# iptables-save > /root/my.active.firewall.rules  
# cat /root/my.active.firewall.rules 
6.重新加载防火墙规则
我们可以使用iptables-restore命令重新加载使用iptables-save命令保存的防火墙规则:
# iptables-restore < /root/my.active.firewall.rules 
我们还可以利用这种特性来快速部署防火墙规则。
7.设置默认防火墙策略
我们首先来配置一个防火墙策略,它默认丢弃所有的网络数据包:
# iptables -P INPUT DROP  
# iptables -P OUTPUT DROP  
# iptables -P FORWARD DROP  
# iptables -L -v -n 
#连接失败,因为防火墙丢弃所有的网络数据包  
# ping cyberciti.biz  
# wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2 
在此基础上,我们只关闭入站连接:
# iptables -P INPUT DROP  
# iptables -P FORWARD DROP  
# iptables -P OUTPUT ACCEPT  
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT  
# iptables -L -v -n  
#ping和wget可以正常工作  
# ping cyberciti.biz  
# wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2 
8.在公网网络接口上停用私有网络地址
我们可以从公网网络接口上删除私有IPv4网段,以防止IP欺骗。运行下面的命令,没有源路由地址的数据包会被丢弃:
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP  
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 
下面是私有网络IPv4地址范围,请确认在公网接口予以屏蔽:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (多播 D)
240.0.0.0/5 (E)
127.0.0.0/8 (回环)
9.屏蔽IP地址访问
如果我们想屏蔽一个IP地址,比如1.2.3.4,可以运行:
# iptables -A INPUT -s 1.2.3.4 -j DROP  
# iptables -A INPUT -s 192.168.0.0/24 -j DROP 
10.屏蔽入栈端口请求
如果我们想80端口上屏蔽所有的服务请求,可以运行:
# iptables -A INPUT -p tcp --dport 80 -j DROP  
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP 
只想屏蔽IP地址1.2.3.4对80端口的请求,可以运行:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP  
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP 
11.屏蔽出栈IP地址
现在我们来演示如何屏蔽对主机名和IP地址的出栈访问。
首先,我们来获取一个域名的IP地址:
# host -t a cyberciti.biz 
输出示例:
cyberciti.biz has address 75.126.153.206 
要屏蔽访问域名cyberciti.biz的网络数据包,可以运行:
# iptables -A OUTPUT -d 75.126.153.206 -j DROP 
下面是使用子网掩码的示例:
# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP  
# iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP 
下面我们以屏蔽facebook.com为例,进行说明。首先,我们需要facebook的所有IP地址:
# host -t a www.facebook.com 
示例输出:
www.facebook.com has address 69.171.228.40 
找出IP地址69.171.228.40的CIDR:
# whois 69.171.228.40 | grep CIDR 
示例输出:
CIDR:69.171.224.0/19 
现在我们来阻止对facebook.com的访问:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP 
我们也可以直接屏蔽域名:
# iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP  
# iptables -A OUTPUT -p tcp -d facebook.com -j DROP 
12.记录并丢弃数据包
在公网网络接口上记录并丢弃IP地址欺骗数据包:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "  
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 
默认情况下日志记录在/var/log/messages文件中:
# tail -f /var/log/messages  
# grep --color 'IP SPOOF' /var/log/messages 
我们还可以用-m参数对日志记录进行限制,以防止日志文件过度膨胀。
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "  
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 
13.根据MAC地址允许或阻止数据包的传入
我们可以根据MAC地址允许或阻止数据包的传入:
# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP 
14.屏蔽ICMP ping请求
我们可以通过允许下面的命令屏蔽ping请求:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP  
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP 
也可以按照特定的网段和主机限制ping请求:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT 
以下命令只接受受限制的ping请求:
#假定默认INPUT策略为丢弃数据包  
# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT  
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT  
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT  
#所有的服务器都对ping请求作出应答  
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT 
15.开启端口序列
下面的命令可以允许7000到7010范围内的TCP端口访问:
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT 
16.允许一系列IP地址访问
下面的命令可以允许IP地址范围
#运行IP地址范围192.168.1.100 到192.168.1.200 访问80端口  
# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT  
#NAT示例  
# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25 
17.建立连接并重启防火墙
当重启iptables服务时,它会断开所有已建立的连接。这是因为在重启防火墙时,会卸载IPTABLES_MODULES_UNLOAD模块。
要解决这个问题,可以编辑/etc/sysconfig/iptables-config
IPTABLES_MODULES_UNLOAD = no 
18.使用Crit日志级别
# iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit 
19.屏蔽或开启常见端口
屏蔽或开启常用的TCP、UDP端口:
#可以使用DROP替换ACCEPT,实现端口屏蔽。  
#打开22端口(SSH)  
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT  
#打开TCP/UDP631端口(打印服务)  
# iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT  
# iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT  
# 打开123端口,允许局域网用户进行NTP时间同步  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT  
#打开25端口(SMTP)  
# iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT  
# 打开DNS端口  
# iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT  
# iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT  
#打开http/https端口  
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT  
# iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT  
#打开TCP110端口(POP3)  
# iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT  
#打开TCP143端口  
# iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT  
#为局域网用户开启Samba访问  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT  
#为局域网用户开启代理服务器访问  
# iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT  
#为局域网用户开启MySQL访问  
# iptables -I INPUT -p tcp --dport 3306 -j ACCEPT 
20.限制客户端IP的并发连接数
我们可以使用connlimit模块限制客户端IP的并发连接数。下面的命令允许每个客户端只能并发3个ssh连接:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT 
设置HTTP并发连接为20个:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP 
参数说明:
--connlimit-above 3:连接数超过3个自动匹配
--connlimit-mask 24:子网掩码匹配
更好的使用iptables
首先,我们要学会查看man手册:
$ man iptables 
 我们还可以这样查看帮助:
# iptables -h 
我们还可以查看特定命令的帮助:
# iptables -j DROP -h 
测试防火墙
测试端口是否开放:
# netstat -tulpn 
测试TCP 80端口是否开放:
# netstat -tulpn | grep :80 
如果80端口未开放,请确保启动Apache服务器:
# service httpd start 
并确保打开iptables防火墙80端口:
# iptables -L INPUT -v -n | grep 80 
如果80端口没有开放,可以运行下面的命令:
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT  
# service iptables save 
下面使用telnet命令测试是否可以连接到80端口:
$ telnet www.cyberciti.biz 80 
下面是示例输出:
Trying 75.126.153.206...  
Connected to www.cyberciti.biz.  
Escape character is '^]'.  
^]  
telnet> quit  
Connection closed. 
最后,我们也推荐使用嗅探工具(如tcpdump、ngrep)对防火墙设置进行测试。
以上只是一些基本的防火墙配置策略,如果你想构造更复杂的防火墙策略,需要对TCP/IP和Linux内核配置文件sysctl.conf进行更深入的学习。(张志平/编译)
原文链接:Linux: 20 Iptables Examples For New SysAdmins
Linux的防火墙iptables配置示例的更多相关文章
- Android Linux自带iptables配置IP访问规则
		利用Linux自带iptables配置IP访问规则,即可做到防火墙效果 
- [转] Linux下防火墙iptables用法规则详及其防火墙配置
		from: http://www.cnblogs.com/yi-meng/p/3213925.html 备注: 排版还不错,建议看以上的链接. iptables规则 规则--顾名思义就是规矩和原则,和 ... 
- Linux下防火墙iptables用法规则详及其防火墙配置
		转:http://www.linuxidc.com/Linux/2012-08/67952.htm iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国法,家有家规 ... 
- 【iptables】linux网络防火墙-iptables基础详解(重要)
		一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ... 
- 转:linux关闭防火墙iptables
		ref:https://jingyan.baidu.com/article/066074d64f433ec3c21cb000.html Linux系统下面自带了防火墙iptables,iptables ... 
- Linux操作系统下IPTables配置方法详解
		如果你的IPTABLES基础知识还不了解,建议先去看看. 们来配置一个filter表的防火墙 1.查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Cha ... 
- linux下防火墙iptables原理及使用
		iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ... 
- Linux操作系统下IPTables配置
		filter表的防火墙 1.查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target pro ... 
- ubuntu中防火墙iptables配置
		特别说明:此文章完全转载于https://www.cnblogs.com/EasonJim/p/6851007.html 1.查看系统是否安装防火墙 root@localhost:/usr# whic ... 
随机推荐
- Django基础(二)—— models
			六:Models示例 Django本身提供了非常强大易使用的ORM组件,并且支持多种数据库. 配置连接数据文件 在自己创建的project 目录下编辑settings.py DATABASES = { ... 
- throw和throws的区别和联系
			突然发现今天诗兴大发,看来又得写点内容了. throw和throws对于Java程序员而言它们真的不是很陌生.但对于我这样的选手而言一提到它们的区别和联系就蒙圈了... 为了以后不蒙圈,今天就研究一下 ... 
- Python 下载图片的几种方法
			import osos.makedirs('./image/', exist_ok=True)IMAGE_URL = "http://image.nationalgeographic.com ... 
- 2015.1.4 判断鼠标点击DataGridView的第几行还是空白处
			public int GetRowIndexAt(int mouseLocation_Y) { if (dvaw.FirstDisplayedScrollingRowIndex < 0) { r ... 
- 12-15winform--窗体
			一.窗体:有许多控件组成,空间本身就是类对象: 1)每一个控件都有自己的属性和方法. 2)控件的方法叫做事件: 3)同一命名空间下的项目文件是一个整体文件.设计器的代码(类文件)在“解决方案管理器”- ... 
- leetcode458
			原本没有思路,参考了网上的解题思路,自己独立完成了代码. int poorPigs(int buckets, int minutesToDie, int minutesToTest) { ; ; wh ... 
- Navicat断网时连不上数据库
			最近安装了破解的Navicat,在有网的条件下可以连接本地安装的MySQL数据库,但断网之后就不可以,如下: 于是上网查资料,发现原因为: localhost可以看成是一个域名,在一大部分情况下,它能 ... 
- IDEA中Git实战
			工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 场景三:小 ... 
- Velocity加载模版文件
			一.类路径 加载classpath目录下的vm文件,或者maven项目的resources路径下 Properties p = new Properties(); p.put("file.r ... 
- [hadoop入门]mapper与reducer(word_count计数demo)
			1.mapper #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words = line.sp ... 
