通过iptables设置防火墙
```
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#设置网卡
wk="eth1"
# 1. 清除规则
iptables -F
iptables -X
iptables -Z
# 2. 设定政策
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# 3~5. 制订各项规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $wk -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $wk -m state --state INVALID -j DROP
#samba服务
iptables -A INPUT -i $wk -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -i $wk -p tcp --dport 445 -j ACCEPT
iptables -A INPUT -i $wk -p udp --dport 137:138 -j ACCEPT
#vsftp服务
iptables -A INPUT -i $wk -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -i $wk -p tcp --dport 1024:65535 -j ACCEPT
#iptables -A INPUT -i $wk -s 192.168.1.0/24 -j ACCEPT
```
# 查看防火墙规则
`# iptables [-t tables] [-L] [-nv]`
选项与参数:
> -t :后面接table ,例如nat或filter,若省略此项目,则使用预设的filter
> -L :列出目前的table的规则
> -n :不进行IP 与HOSTNAME 的反查,显示速度会快很多!
> -v :列出更多的相关信息
# 清除规则
`# iptables [-t tables] [-FXZ]`
选项与参数:
> -F :清除所有的已订定的规则;
> -X :杀掉所有使用者"自订" 的chain;
> -Z :将所有的chain 的计数与流量统计都归零
# 定义预设政策(policy)
`# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]`
选项与参数:
> -P :定义政策( Policy )。注意,这个P为大写啊!
> ACCEPT :该封包可接受
> DROP :该封包直接丢弃,不会让client 端知道为何被丢弃。
范例:将本机的INPUT设定为DROP ,其他设定为ACCEPT
```
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -t nat -P PREROUTING ACCEPT
# iptables -t nat -P POSTROUTING ACCEPT
# iptables -t nat -P INPUT ACCEPT
# iptables -t nat -P OUTPUT ACCEPT
```
**nat表不用于过滤,所以不能设置为DROP**
# 4.定义规则
`# iptables [-AI链名] [-io网络界面] [-p协议] [-s来源IP/网域] [-sport 端口范围] [-d目标IP/网域] [-dport 端口范围] -j [ACCEPT'DROP'REJECT'LOG]`
选项与参数:
```
-AI链名:规则的"插入"或"增加"
-A:新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,使用-A就可以加上第五条规则!
-I:插入一条规则。如果没有指定此规则的顺序,预设是插入变成第一条规则。
例如原本有四条规则,使用-I则该规则变成第一条,而原本四条变成2~5号
链:有INPUT,OUTPUT,FORWARD等,此链名称又与-io有关,请看底下。
-io网卡:设定封包进出的规范
-i:封包所进入的那个网卡,例如eth0,lo等网卡。需与INPUT链配合;
-o:封包所传出的那个网卡,需与OUTPUT链配合;
-p协议:设定此规则适用于哪种封包格式
主要的封包格式有:tcp,udp,icmp及all。
-s来源IP/网域:设定此规则之封包的来源项目,可指定单纯的IP或包括网域,例如:
IP :192.168.0.100
网域:192.168.0.0/24,192.168.0.0/255.255.255.0均可。
若规范为『不许』时,则加上!即可,例如:
-s!192.168.100.0/24表示不许192.168.100.0/24封包来源;
-d目标IP/网域:同-s,只不过这里指的是目标的IP或网域。
--sport 来源端口范围。例如 1024:65535
--dport 目标端口范围
-j:后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)
```
`# iptables -A INPUT [-m state] [--state状态]`
选项与参数:
```
-m:一些iptables的外挂模块,主要常见的有:
state:状态模块
mac:网络卡硬件地址(hardware address)
--state:一些封包的状态,主要有:
INVALID:无效的封包,例如数据破损的封包状态
ESTABLISHED:已经联机成功的联机状态;
NEW:想要新建立联机的封包状态;
RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关
```
例:1. 只要已建立或相关封包就予以通过,只要是不合法封包就丢弃
```
# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -m state --state INVALID -j DROP
```
2. 对MAC地址为aa:bb:cc:dd:ee:ff主机开放其连接
`# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd :ee:ff -j ACCEPT`
选项与参数:--mac-source:就是来源主机的MAC
# ICMP 封包规则:针对是否回应ping 来设计
通常我们会把ICMP type 8 (echo request)去掉而已,让远端主机不知道我们是否存在,也不会接受ping的回应。
`# iptables -A INPUT [-p icmp] [--icmp-type类型] -j ACCEPT`
选项与参数:
> --icmp-type :后面必须要接ICMP 的封包类型,也可以使用代号,
> 例如8 代表echo request 的意思。
例:让0,3,4,11,12,14,16,18的ICMP type可以进入本机:
```
#!/bin/bash
icmp_type="0 3 4 11 12 14 16 18"
for typeicmp in $icmp_type
do
iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
done
```
- 共 0 条回复
- 需要登录 后方可回复, 如果你还没有账号请点击这里注册。
wiseAI
✨ 梦初醒 茅塞开
- 不经他人苦,莫劝他人善。
- 能量足,心态稳,温和坚定可以忍。
- 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
- 要么忙于生存,要么赶紧去死!
- 内心强大到混蛋,比什么都好!
- 规范流程比制定制度更重要!
-
立志需要高远,但不能急功近利;
行动需要迅速,却不可贪图速成。 - 不要强求人品,要设计高效的机制。
-
你弱的时候,身边都是鸡零狗碎;
你强的时候,身边都是风和日丽。 - 机制比人品更可靠,契约比感情更可靠。
- 合作不意味着没有冲突,却是控制冲突的最好方法。
- 误解是人生常态,理解本是稀缺的例外。
- 成功和不成功之间,只差一次坚持!
- 祁连卧北雪,大漠壮雄关。
- 利益顺序,过程公开,机会均等,付出回报。
