Linux下的防火墙iptables

Linux下的防火墙iptables,第1张

#屏蔽指定ip
#iptables -A INPUT -p tcp -s 192168101 -j DROP
#减少不安全的端口连接
#iptables -A OUTPUT -p tcp --sport 31337 -j DROP
#iptables -A OUTPUT -p tcp --dport 31337 -j DROP
#允许某个IP远程连接
#iptables -A INPUT -s 192168101 -p tcp --dport 22 -jACCEPT
#允许某个网段的IP远程连接
iptables -A INPUT -s 192168100/24 -p tcp --dport 22 -jACCEPT

参考iptables配置

1首先介绍一下指令和相关配置文件
启动指令:service
iptables
start
重启指令:service
iptables
restart
关闭指令:service
iptables
stop
然后是相关配置:/etc/sysconfig/iptables
如何 *** 作该配置呢?
vim
/etc/sysconfig/iptables
然后进去修改即可,修改完了怎么办?这里很多人会想到/etc/rcd/initd/iptables
save指令,但是一旦你这么干了你刚才的修改内容就白做了。。。
具体方法是:
只修改/etc/sysconfig/iptables
使其生效的办法是修改好后先service
iptables
restart,然后才调用/etc/rcd/initd/iptables
save,
因为/etc/rcd/initd/iptables
save会在iptables服务启动时重新加载,要是在重启之前直接先调用了/etc/rcd/initd/iptables
save那么你
的/etc/sysconfig/iptables
配置就回滚到上次启动服务的配置了,这点必须注意!!!
2下面介绍一些指令用法(主要还是man iptables看下相关资料才行)
-A:指定链名
-p:指定协议类型
-d:指定目标地址
--dport:指定目标端口(destination
port
目的端口)
--sport:指定源端口(source
port
源端口)
-j:指定动作类型
3如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:
例如我给SSH加放行的语句:
添加input记录:
iptables
-A
INPUT
-p
tcp
--dport
22
-j
ACCEPT
添加output记录:
iptables
-A
OUTPUT
-p
tcp
--sport
22
-j
ACCEPT
最后注意需要再执行一下
/etc/initd/iptables
save,这样这两条语句就保存到刚才那个/etc/sysconfig/iptables
文件中了。
4接下来说明一下步骤,如果机器不在我身边,我只能SSH进去做iptables规则,那么我必须注意每一步,千万别搞错了,否则就SSH链接不上都有可能!
首先要做的是给咱的SSH进行ACCEPT配置,以免直接无法连接的情况发生:
1如果SSH端口是22(这里不建议用默认端口最好改掉SSH端口)
iptables
-A
INPUT
-p
tcp
--dport
22
-j
ACCEPT
iptables
-A
OUTPUT
-p
tcp
--sport
22
-j
ACCEPT
注意要/etc/rcd/initd/iptables
save,以下每一步都最好执行一遍此语句,以下不再累述。
2vim
/etc/sysconfig/iptables确定是否已经加入配置,可以的话执行service
iptables
restart重启后生效
3下面是很危险的 *** 作,如果你第一步没做就会直接可能导致你连不上SSH,此步骤前切记执行第一步!!!
iptables
-P
INPUT
DROP

iptables
-P
OUTPUT
DROP

iptables
-P
FORWARD
DROP
这个步骤是把所有不符合自己配置的规则ACCEPT的连接全部DROP掉,执行完以后如果咱SSH还没掉,那么谢天谢地,安全了,重启下iptables后继续下面的配置!
4下面咱就不细说了,具体就是看自己服务器要开放哪些端口或者是要访问哪些端口来做具体的配置,下面是我自己的机器的配置:
/etc/sysconfig/iptables文件配置如下:
#
Generated
by
iptables-save
v147
on
Fri
Mar
2
19:59:43
2012
filter
:INPUT
DROP
[0:0]
:FORWARD
DROP
[0:0]
:OUTPUT
DROP
[8:496]
-A
INPUT
-m
state
--state
RELATED,ESTABLISHED
-j
ACCEPT
#ping使用的端口
-A
INPUT
-p
icmp
-j
ACCEPT
-A
INPUT
-i
lo
-j
ACCEPT
-A
INPUT
-s
127001/32
-d
127001/32
-j
ACCEPT
-A
INPUT
-s
1921682200/32
-d
1921682200/32
-j
ACCEPT
#允许服务器自己的SSH(对外部请求来说服务器是目标所以使用--dport)
-A
INPUT
-p
tcp
-m
tcp
--dport
22
-j
ACCEPT
#80端口不用说了吧,服务器网站访问端口
-A
INPUT
-p
tcp
-m
tcp
--dport
80
-j
ACCEPT
-A
INPUT
-p
tcp
-m
tcp
--dport
3306
-j
ACCEPT
-A
INPUT
-p
tcp
-m
tcp
--dport
11211
-j
ACCEPT
-A
INPUT
-p
tcp
-m
tcp
--dport
11212
-j
ACCEPT
-A
FORWARD
-j
REJECT
--reject-with
icmp-host-prohibited
#53端口是DNS相关,TCP和UDP都要配置
-A
INPUT
-p
tcp
-m
tcp
--dport
53
-j
ACCEPT
-A
INPUT
-p
udp
-m
udp
--dport
53
-j
ACCEPT
#ping使用的端口
-A
OUTPUT
-p
icmp
-j
ACCEPT
-A
OUTPUT
-s
127001/32
-d
127001/32
-j
ACCEPT
-A
OUTPUT
-s
1921682200/32
-d
1921682200/32
-j
ACCEPT
#允许服务器SSH到其他机器(使用外部端口就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
22
-j
ACCEPT
#允许服务器自己的SSH(自已为源输出就使用--sport)
-A
OUTPUT
-p
tcp
-m
tcp
--sport
22
-j
ACCEPT
#访问外部网站80端口(使用外部端口就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
80
-j
ACCEPT
#如果服务器需要访问外部网站,那么OUTPUT也需要配置53端口(使用外部端口就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
53
-j
ACCEPT
-A
OUTPUT
-p
udp
-m
udp
--dport
53
-j
ACCEPT
#如果有访问外部邮箱,那么打开邮箱相关端口(使用外部端口就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
465
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--dport
25
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--dport
110
-j
ACCEPT
#服务器网站访问端口(自已为源输出就使用--sport)
-A
OUTPUT
-p
tcp
-m
tcp
--sport
80
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--sport
3306
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--sport
11211
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--sport
11212
-j
ACCEPT
COMMIT
#
Completed
on
Fri
Mar
2
19:59:43
2012
5可能有时候需要删除规则,最简单就是修改一下/etc/sysconfig/iptables然后service iptables restart,最后/etc/rcd/initd/iptables save即可。
当然也可以使用指令完成:
在网上找了一下,删除规则的方法:
语法是:
iptables
-D
chain
rulenum
[options]
其中:
chain
是链的意思,就是INPUT
FORWARD
之类的
rulenum
是规则的编号。从1
开始。可以使用
--line-numbers
列出规则的编号

所以,例如上面要删除一个INPUT链的规则的话可以这样:iptables
-D
INPUT
3
意思是删除第3条规则。
还有第二种方法。第二种办法是
-A
命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。也就是说,你如何用iptables
-A
语句定义了一个规则,则删除此规则时就用
-D
来代替-
A
其余的都不变即可。
======================
说一下上面的
--line-numbers
选项,如下面的命令:
iptables
-L
INPUT
--line-numbers
列出INPUT
链所有的规则
num
target
prot
opt
source
destination

1
REJECT
tcp
--
anywhere
anywhere
tcp
dpt:microsoft-ds
reject-with
icmp-port-unreachable
2
REJECT
tcp
--
anywhere
anywhere
tcp
dpt:135
reject-with
icmp-port-unreachable
3
REJECT
tcp
--
anywhere
anywhere
tcp
dpt:netbios-ssn
reject-with
icmp-port-unreachable


删除指定行规则:
[root@localhost
rcd]#
iptables
-D
INPUT
4
6最后补充一下,如果想针对某IP进行单独开放端口可以如下配置:
如果我需要对内网某机器单独开放mysql端口,应该如下配置:
iptables
-A
INPUT
-s
19216826
-p
tcp
-m
tcp
--dport
3306
-j
ACCEPT
iptables
-A
OUTPUT
-s
19216826
-p
tcp
-m
tcp
--sport
3306
-j
ACCEPT
7彻底禁止某IP访问:
#屏蔽单个IP的命令是
iptables
-I
INPUT
-s
1234567
-j
DROP
#封整个段即从123001到123255255254的命令
iptables
-I
INPUT
-s
123000/8
-j
DROP
#封IP段即从1234501到12345255254的命令
iptables
-I
INPUT
-s
1244500/16
-j
DROP
#封IP段即从1234561到123456254的命令是
iptables
-I
INPUT
-s
1234560/24
-j
DROP
指令I是insert指令
但是该指令会insert在正确位置并不像A指令看你自己的排序位置,因此用屏蔽因为必须在一开始就要加载屏蔽IP,所以必须使用I命令加载,然后注意执行/etc/rcd/initd/iptables
save进行保存后重启服务即可

Iptable -A Input -p Tcp -d 自己的IP地址 b --dPort 端口 -J Reject
RedHat机器
cat /etc/sysconfig/iptables
filter
:INPUT ACCEPT [10276:1578052]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13784:16761487]
-A INPUT -s 10000/255000 -i eth1 -j DROP
-A INPUT -s 1721600/25524000 -j DROP
-A INPUT -s 19216800/25525500 -i eth1 -j DROP #eth1 is interface to internet
# anti Sync Flood
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
# anti some port scan
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
# anti ping of death
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
COMMIT
chkconfig iptables on
以后每次启动iptables就会自动读取配置文件(/etc/sysconfig/iptables)
自动启动
或者是/etc/rcd/initd/iptables start手工启动
/etc/rcd/initd/iptables stop手工停止
在LINUX下架设防火墙
linuxbird
随着Internet的普及,人们的日常工作与之的关系也越来紧密,因而越来越多的单位为员工开设了Internet的代理上网服务。但当一个企业的内部网络接上Internet之后,企业的内部资源就象待卖的羔羊一样,面临任人宰割的危险,因而系统的安全除了考虑计算机病毒、系统的健壮性等内部原因之外,更主要的是防止非法用户通过Internet的入侵。而目前防止的措施主要是靠防火墙的技术完成。
一、什么是防火墙
防火墙(firewall)是指一个由软件或和硬件设备组合而成,处于企业或网络群体计算机与外界通道(Internet)之间,限制外界用户对内部网络访问及管理内部用户访问外界网络的权限。主要是控制对受保护的网络(即网点)的往返访问,逼使各连接点的通过能得到检查和评估。
从诞生到现在,防火墙已经历了四个发展阶段:基于路由器的防火墙、用户化的防火墙工具套、建立在通用 *** 作系统上的防火墙、具有安全 *** 作系统的防火墙。目前防火墙供应商提供的大部分都是具有安全 *** 作系统的软硬件结合的防火墙,象NETEYE、NETSCREEN、TALENTIT等。在LINUX *** 作系统上的防火墙软件也很多,除了下面要专门介绍的IPCHAINS外,还有很多,如:Sinus Firewall、Jfwadmin等。
目前的防火墙从结构上讲,可分为两种:
1) 代理主机结构
内部网络<----->代理网关(Proxy Gateway)<----->Internet
2) 路由器加过滤器结构
内部网络<----->过滤器(Filter)<---->路由器(Router)<---->Internet
二、用IPCHAINS构建局域网防火墙的原理
其实从本质上讲,用IPCHAINS构建局域网防火墙也是一种C/S模式的交互式的应用。一般服务器提供某特定功能的服务总是由特定的后台程序提供的。在TCP/IP网络中,常常把这个特定的服务绑定到特定的TCP或UDP端口。之后,该后台程序就不断地监听(listen)该端口,一旦接收到符合条件的客户端请求,该服务进行TCP握手后就同客户端建立一个连接,响应客户请求。与此同时,再产生一个该绑定的拷贝,继续监听客户端的请求。
IPCHAINS就是这样的一个SERVER。对内部网通往Intenet的请求,或从外部通往内部网的请求,都进行监听、检查、评估、转发、拒绝等动作。
常用的服务、协议与默认端口。
服务类型 协议 端口
>

1、查看防火墙状态 /etc/initd/iptables/status。

2、关闭防火墙:/etc/initd/iptables/stop(这是临时关闭,关闭的是当前运行的防火墙,重启之后防火墙又会启动,因为它是开机自启动的)。

3、查看是否关闭成功。

4、改为开机不启动:chkconfig iptables off 。

5、再次查看开机启动状态,检验是否配置成功。

6、重启电脑,查看防火墙启动状态 。

linux下要使用iptables限制只有指定的ip才能访问本机则需要先设置一个默认的规则
iptables有默认的规则,它可以适用于所有的访问
因为只有指定或特定的ip地址才能访问本机
所以可以将默认的规则设置为所有访问全部阻止(当然这里需要注意下,如果你要设置的机器是在远端,比如vps则需要注意在设置默认规则的同时要将与该服务器链接的ip添加进白名单,否则在设置完默认阻止后你也无法访问这台服务器,也无法再进行 *** 作了,我们可以使用分号;或者&&来在同一个命令行下来完成默认阻止和将自己的ip添加进白名单,假如你的ip地址为1234则可以这样输入iptables -P INPUT DROP;iptables -A INPUT -s 1234 -p tcp -j ACCEPT,或者也可以指定一个端口)
设置默认规则后则可以添加白名单了
比如允许2345访问则可以
iptables -A INPUT -s 2345 -p tcp -j ACCEPT
如果要限定的不是整个服务器而只是该服务器中的某个服务
比如web服务(一般端口在80,>你得看看 linux IPtales 学习之路, 好多配置的命令
1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。
下面是命令实现:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
再用命令 iptables -L -n 查看 是否设置好, 好看到全部 DROP 了
这样的设置好了,我们只是临时的, 重启服务器还是会恢复原来没有设置的状态
还要使用 service iptables save 进行保存
看到信息 firewall rules 防火墙的规则 其实就是保存在 /etc/sysconfig/iptables
可以打开文件查看 vi /etc/sysconfig/iptables
2、
下面我只打开22端口,看我是如何 *** 作的,就是下面2个语句
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
再查看下 iptables -L -n 是否添加上去, 看到添加了
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0000/0 0000/0 tcp dpt:22
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0000/0 0000/0 tcp spt:22
现在Linux服务器只打开了22端口,用puttyexe测试一下是否可以链接上去。
可以链接上去了,说明没有问题。
最后别忘记了保存 对防火墙的设置
通过命令:service iptables save 进行保存
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
针对这2条命令进行一些讲解吧
-A 参数就看成是添加一条 INPUT 的规则
-p 指定是什么协议 我们常用的tcp 协议,当然也有udp 例如53端口的DNS
到时我们要配置DNS用到53端口 大家就会发现使用udp协议的
而 --dport 就是目标端口 当数据从外部进入服务器为目标端口
反之 数据从服务器出去 则为数据源端口 使用 --sport
-j 就是指定是 ACCEPT 接收 或者 DROP 不接收


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/12634651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存