Linux中Iptable防火墙规则的应用

在没有硬件防火墙的前提下,Linux系统也提供了很完善的防火墙策略Iptable,同样能胜任防火墙的策略,但由于规则负责的原因很少被使用。我总结一下iptable的使用方法。

通常防火墙策略配置文件所在的路径为/etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Wed Apr  8 13:50:49 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [43:5250]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 0.0.0.0/24 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 20000:20500 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Apr  8 13:50:49 2015

也就是所可以通过在配置文件中直接添加策略来使防火墙策略生效。

防火墙另外一种方式是通过命令行添加策略。如果一开始不懂可以通过iptables --help 来查看如何使用

1、清空存在的策略
当你开始创建新的策略,你可能想清除所有的默认策略,和存在的策略,可以这么做:

iptables -F  或者iptables --flush

2、设置默认策略
默认链策略是ACCEPT,改变所有的链策略为DROP:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

3、增加策略

因为防火墙策略读取顺序至上而下,所以一定要注意策略添加顺序,如果顺序不对,也可以插入策略

iptables -L -n --line-number
iptables -A INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

4、阻止一个指定的ip

BLOCK_THIS_IP=“x.x.x.x"
iptables -A INPUT -s ”$BLOCK_THIS_IP“ -j DROP
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

5、允许SSH
允许所有通过eth0接口使用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

6、允许某个网段通过ssh连接

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

7、允许http和https
允许所有进来的web流量:http协议的80端口

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

允许所有进来的web流量:https协议的443端口

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

8、多个策略联合一起
允许ssh,http,https:

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

9、允许SSH连接其他主机

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10、允许SSH连接指定的网段

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

11、允许https出去

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

12、对web请求做负载均衡(每三个包,均衡到指定服务器,需要扩展iptables)

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

13、允许ping

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

14、允许ping远程

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

15、允许本地回环

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

16、允许内网访问外部网络
这个例子eth1 连接外部网络,eth0连接内部网络

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

17、允许DNS出去

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

18、允许NIS连接
NIS端口是动态的,当ypbind启动时它分配端口。
首先运行 rpcinfo -p 显示得到端口号,这个例子使用端口850,853。

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

上面的例子当ypbind重新启动时将失效,有2种解决方案:
(1)分配nis服务静态ip(2) 使用精妙的脚本
19、允许指定网段连接Rsync

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

20、允许mysql从指定的网段连接

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

21、允许sendmail或者postfix

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

22、允许IMAP和IMAPS

IMAP:
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
IMAPS:
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

23、允许POP3和POP3S

POP3:
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
POP3S:
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

24、预防DOS攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

-m : 使用iptables扩展
--limit 25/minute : 限制分钟连接请求数
--limit-burst:触发阀值,一次涌入数据包数量
25、端口转发
来自442的都转到22端口

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

你还必须明确允许442端口

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

26、包丢弃日志
你也许想查看所有丢弃包的日志。
首先创建一个新链叫 LOGGING

iptables -N LOGGING

确保所有的连接跳到LOGGING

iptables -A INPUT -j LOGGING

记录这些包通过自定义名字 "log-prefix"

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped:" --log-level 7

最后丢弃这些数据包

tables -A LOGGING -j DROP

详细内容可参考:

http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html

时间: 2024-07-28 20:27:08

Linux中Iptable防火墙规则的应用的相关文章

LINUX中IPTABLES防火墙使用

对于有公网IP的生产环境VPS,仅仅开放需要的端口,即采用ACL来控制IP和端口(Access Control List). 这里可以使用Linux防火墙netfilter的用户态工具 iptables有4种表:raw-->mangle(修改报文原数据)-->nat(定义地址转换)-->filter(定义允许或者不允许的规则) 每个表可以配置多个链: 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT 对于nat来讲一般也只能做在3个链上:PREROU

Linux中在防火墙中开启80端口的例子

linux如果刚安装好防火墙时我们常用的端口是没有增加的,也就是说不能访问,那么要怎么把常用端口增加到防火墙通过状态呢,下面我们以80端口为例子吧. 最近自己在学习Linux.搭建一个LNMP环境.在测试时一切都好.然后重启Linux后.再次访问网站无法打开.最终原因是在防火墙中没有加入 80 端口的规则.具体方法如下: 在CentOS下配置iptables防火墙,是非常必要的.来我们学习如何配置!,其它版本一下: 1.打开iptables的配置文件:  代码如下 复制代码 vi /etc/sy

CentOS linux关闭iptables防火墙(Linux中的防火墙叫iptables)

linux服务器下防火墙为iptables组件,在安装一些软件的时候,iptables防火墙会阻止我们一些必要的连接. 查看iptables状态:service iptables status iptables开机自动启动: 开启: chkconfig iptables on 关闭: chkconfig iptables off iptables关闭服务: 开启: service iptables start 关闭: service iptables stop 重启防火墙服务:service i

在linux中关闭防火墙

1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables start 关闭: service iptables stop service iptables status可以查看到iptables服务的当前状态.但是即使服务运行了,防火墙也不一定起作用,你还得看防火墙规则的设置 iptables -L  

Openstack 中的防火墙规则分析

上周花了几天研究了一下Openstack的Security Group防火墙规则,总结下上周的成果. 一.介绍下我的环境. 操作系统:RHEL6.4+Openstack官方内核 Openstack版本:Havana 网络模式:ML2+Linuxbridge 租户网络:VLAN 二.Iptables 流向 INPUT neutron-linuxbri-INPUT neutron-linuxbri-o45d1d6e0-d neutron-linuxbri-s45d1d6e0-d neutron-li

Linux中的防火墙----iptables

防火墙,它是一种位于内部网络与外部网络之间的网络安全系统.一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过. 防火墙根据主要的功能可分为网络层防火墙.应用层防火墙.数据库防火墙. 网络层防火墙主要是根据网络层.传输层的封包的属性来制定防火墙的规则,主要依据是源IP和目的IP地址,源端口和目的端口 防火墙借由监测所有的封包并找出不符规则的内容,可以防范电脑蠕虫或是木马程序的快速蔓延. 数据库防火墙是一款基于数据库协议分析与控制技术的数据库安全防护系统.基于主动防御机制,实现数据库

Linux中iptables防火墙指定端口范围

我需要700至800之间的端口都能tcp访问 代码如下 复制代码 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 700 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 701 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp

在linux中查看防火墙当前的状态

一.linux查看防火墙当前的状态 1)查看防火墙状态:/etc/init.d/iptables status暂时关闭防火墙:/etc/init.d/iptables stop禁止防火墙在系统启动时启动/sbin/chkconfig --level 2345 iptables off重启iptables: /etc/init.d/iptables restart 二.重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 或者 /sb

解读linux中用户密码规则及忘记root口令的破解(思路)

linux当中,用户名和密码表对应关系放在/etc/passwd中,如: root:x:0:0:root:/root:/bin/bash 格式代表意义分别为 用户名:密码:用户id:组id:用户描述 /root代表用户目录 /bin/bash为用户使用的shell :为分隔符 其中密码x已经隐去,放在shadow文件当中 由于root密码不经常用到,有时管理员会忘记root密码,这时可以将设备重置为single,即单用户模式,登陆后,将passwd文件root用户配置文件的x屏蔽掉,即: roo