实用防火墙(Iptables)脚本分析
实用防火墙(Iptables)脚本分析
——Redhat,CentOS,Ubuntu等常见Linux发行版中都会预装Iptables防火墙,大多数初学者设置起来由于对这款软件比较陌生,设置起来比较困难,下面这段脚本实现了修改变量的值就能轻松移植到自己的网络,同时对各段内容做了介绍。首先在/usr/bin下建立一个脚本名为firewall,设定可执行权限
#chmod +x /usr/bin/firewall
下面我最这个脚本的关键部分做一些说明:
——首先设定假设你想限制某IP(例如10.10.10.20),你只需将他们填入到BADIPS变量中,可以设定多个IP或网端,每个用空格分开.
BADIPS="10.10.10.20 10.1.14.0/24"
——接下来开始设定impossible_ips变量,例如设定三个私有iP的网段,前提是你的主机IP 不能在三个设定的网段范围之内,如果在设定范围内就要删除.
IMPOSSIBLE_IPS="10.0.0.0/8 172.16.0.0/12 192.168.0.0/16"
如果你的系统只是家用,单独上网,以下6行代码就无需设置。
1).IN_TCP_PORTALLOWED=""
2).IN_ICMP_ALLOWED=""
3).EGRESS="0"
4).OUT_TCP_PORTALLOWED=""
5).OUT_UDP_PORTALLOWED=""
6).OUT_ICMP_ALLOWED=""
——如果你架设了服务器就需要下面的设定,这里强调一下in_tcp_porallowed,in_udp_portallowed是变量,他的值设定常见网络服务的端口号;如果需要开放连续端口就需要使用“:”号,例如需要开放38000-38090之间的所有端口,只要进行如下设定:
in_tcp_portallowed=”38000:38090”
下面看个复杂的例子,
例1:
——假定SSH服务只允许200.100.10.10访问,而FTP服务之开放给192.168.20.0/24网段使用;SMTP则是出了10.10.10.20以外其余都可以访问:
In_tcp_portallowed=”ssh,200.100.10.10ftp,192.168.20.0/24smtp,!10.10.10.20”
例2:
——架设需要开放smtp,domain服务给所有IP使用,然后仅允许来自200.100.10.10和192.168.20.0/24的使用者使用ssh登陆服务器:
In_tcp_portallowed=”ssh,200.100.10.10 ssh,192.168.20.0/24 smtp domain”
案3:一个错误的案例
——有人想允许192.168.150.30对内网ssh服务器访问,但是除了192.168.20.10以外其他所有Ip都可以访问22端口,其余都阻断。他是这样写的:
In_tcp_portallowed=”ssh,192.168.150.30ssh,!192.168.20.10”
——我们可以看到虽然规则1限制了只有192.168.150.30可以访问 ssh服务器,但是规则2却反而将其开放给所有人,第一个规则等于摆设。
IN_TCP_PORTALLOWED="ssh,192.14.0.3 smtp domain http https"
In_icmp_allowed=”8,61.63.33.172”
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
egress这个设置表示是否限制对外的链接,值为0代表不限制,1代表限制对外链接。
OUT_TCP_PORTALLOWED="ssh smtp,root http https pop3"
#如果你希望记录所有被放火墙阻止的数据包,就需要将droplog的值设定为1,不过这样会使/var/log/messages日志容量上升
modprobe ip_tables 2>/dev/null
modprobe ip_conntrack 2>/dev/null
modprobe ip_conntrack_ftp 2>/dev/null
modprobe ip_conntrack_irc 2>/dev/null
echo -n "Initiating iptables..."
echo -n "Getting the DShield Block List..."
`lynx --dump http://feeds.dshield.org/block.txt | \
awk '/^[1-9]/ {print $1 "/" $3}'`"
开始IP 结束IP 网络号 ***数量 Name Country email
222.189.239.0222.189.239.255242054
195.178.109.0195.178.109.255241601PROVIDERRU[no email]
216.145.110.0216.145.110.255241355
193.219.163.0193.219.163.255241264LITNET-3LTdaiva@litnet.lt
221.6.51.0221.6.51.255241075CNll@jsnetcom.com
# 若你加上start参数,则将$skiptest变量置1,那么就会跳过测试模式,设定所有规则后不再清除。
[ "$1" = "start" ] && skiptest="1"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 3 > /proc/sys/net/ipv4/tcp_retries1
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1400 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
#设定input,output,forward的过滤规则,不符合规则的就会丢弃。
# 允许流经环路地址(loopback)的包通过,lo代表环路接口。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i ! lo -s 127.0.0.0/8 -j DROP
iptables -A OUTPUT -o ! lo -d 127.0.0.0/8 -j DROP
# 若droplog数值为1则记录所有badpkt链的数据包
iptables -A BADPKT -j LOG --log-prefix "** Firewall BADPKT **"
iptables -A INPUT -m state --state INVALID -j BADPKT
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j BADPKT
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADPKT
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j BADPKT
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j BADPKT
# 允许目的端口为53的UDP包通过,这样才能使用DNS查询。
iptables -A OUTPUT -p udp -m state --state NEW --dport 53 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 若droplog变量为1,则记录所有进入badip链的封包
iptables -A BADIP -j LOG --log-prefix "** Firewall BADIP **"
for ip in $BADIPS $IMPOSSIBLE_IPS ; do
iptables -A INPUT -s $ip -j BADIP
for i in $IN_TCP_PORTALLOWED ; do
[ -n "$2" ] && ipt_option="-s `echo $2 | sed 's/^!/! /'`"
iptables -A INPUT -p tcp $ipt_option --dport $port \
--syn -m state --state NEW -j ACCEPT
for i in $IN_UDP_PORTALLOWED ; do
[ -n "$2" ] && ipt_option="-s `echo $2 | sed 's/^!/! /'`"
iptables -A INPUT -p udp $ipt_option --dport $port \
-m state --state NEW -j ACCEPT
for i in $IN_ICMP_ALLOWED ; do
[ -n "$2" ] && ipt_option="-s `echo $2 | sed 's/^!/! /'`"
iptables -A INPUT -p icmp $ipt_option --icmp-type $type \
-m state --state NEW -j ACCEPT
for i in $OUT_TCP_PORTALLOWED ; do
[ -n "$2" ] && ipt_option="-d `echo $2 | sed 's/^!/! /'`"
[ -n "$3" ] && ipt_option="$ipt_option -m owner \
`echo $3 | sed 's/\([^!]\)/ --uid-owner \1/'`"
iptables -A OUTPUT -p tcp $ipt_option --dport $port \
--syn -m state --state NEW -j ACCEPT
for i in $OUT_UDP_PORTALLOWED ; do
[ -n "$2" ] && ipt_option="-d `echo $2 | sed 's/^!/! /'`"
[ -n "$3" ] && ipt_option="$ipt_option -m owner \
`echo $3 | sed 's/\([^!]\)/ --uid-owner \1/'`"
iptables -A OUTPUT -p udp $ipt_option --dport $port \
-m state --state NEW -j ACCEPT
for i in $OUT_ICMP_ALLOWED ; do
[ -n "$2" ] && ipt_option="-d `echo $2 | sed 's/^!/! /'`"
[ -n "$3" ] && ipt_option="$ipt_option -m owner \
`echo $3 | sed 's/\([^!]\)/ --uid-owner \1/'`"
iptables -A OUTPUT -p icmp $ipt_option --icmp-type $type \
-m state --state NEW -j ACCEPT
if [ ! "$EGRESS" = "1" ]; then
iptables -A OUTPUT -m state --state NEW -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "** Firewall DROP **"
iptables -A OUTPUT -j LOG --log-prefix "** Firewall DROP **"
iptables -A FORWARD -j LOG --log-prefix "** Firewall DROP **"
# 5秒后自动清除iptables规则,这样可以避免锁住自己。
if [ "$skiptest" = "1" ]; then exit ;fi
echo -n "All chains will be cleaned after 5 sec."
i=1; while [ "$i" -le "5" ]; do
实用防火墙(Iptables)脚本分析相关推荐
- linux通过防火墙iptables做隔离端口的脚本
通过防火墙iptables做隔离端口的脚本 vi iptables_fix.sh #!/bin/bash #备份旧的规则 iptables-save > "/opt/firewall- ...
- linux下防火墙iptables用法规则详解
linux下防火墙iptables用法规则详解 分享者: du52.com 邮件: wangaibo168@163.com 主页: http://www.du52.com linux下防火墙iptab ...
- Linux下防火墙iptables用法规则详及其防火墙配置
原博主文章更美丽: http://www.cnblogs.com/yi-meng/p/3213925.html iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国 ...
- Linux防火墙iptables学习
http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...
- 万字讲解OpenWrt防火墙iptables,并使用UCI配置防火墙
一.防火墙简介 "防火墙"(Firewall)术语来自建筑设计领域,是指用来起分割作用的墙,当某一部分 着火时可以减缓或保护其他部分免受火灾影响.在计算机网络中,防火墙是在两个或多 ...
- linux防火墙ip黑名单,【转】Linux防火墙(iptables)之黑名单
iptables删除规则 So if you would like to delete second rule : iptables -D INPUT 2 ---------------------- ...
- linux 防火墙iptables简明教程
前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...
- 共创Linux防火墙,Linux防火墙iptables简明教程
前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...
- 编写iptables脚本实现IP地址、端口过滤
实验案例:公司使用一台运行RHEL5系统的服务器作为网关,分别连接三个网络,其中LAN1为普通员工电脑所在的局域网,LAN2为DNS缓存服务器所在的局域网.eth0通过10M光纤接入Internet. ...
最新文章
- python判断集合为空
- 010_CSS后代选择器
- 01-简述cache的基本概念和使用场景
- (二)深度学习数据处理-----图片数据处理
- python树的实现_Python实现简单字典树的方法
- GUN ARM汇编中标号的引用在汇编和C语言中区别(monitor_flash_len = _bss_start - _armboot_start;)
- 微型计算机原理与接口技术 王建国,微型计算机原理与接口技术课后习题答案及部分定义总结(王建国主编)...
- cocos creator 多张图片 椭圆运动_信阳液位测量图片
- 大数据分析给企业带来哪些挑战
- window.open ()的用法
- 手动搭建Kubernetes1.8高可用集群(6)calico
- 我的NAS安装之旅(1)——硬件和软件选型篇
- 数商云供应链集采管理系统解决方案:产品特色、功能、架构全解析
- 银行电话营销数据分析
- Gradient vanishing and explosion
- 海信75E5K怎么样 海信75E5K和75E5H区别 哪个好
- java 计算个人所得税
- 计算机网络自顶向下方法华为路由器配置OSPFv3路由协议实现端到端的通信
- 深入理解设计模式-抽象工厂模式
- 微信小程序发布上线流程
热门文章
- 霍金临终论文公开:揭秘沉入黑洞的信息去向
- 全球研发投入榜:中国第二逼近美国,以色列最下血本 | 联合国数据
- 这个深度学习Model Zoo,真的有点像动物园? | 来自一只新加坡蓝精灵
- 李飞飞CVPR最新论文 | 「文本转图」效果优化可多一步:物体关系描述
- 加州出台严格无人车路测新政:要求各公司尽快申请部署许可
- 360分拆计划生变,临时剥离四大业务
- iOS - Swift 与 Objective-C 互相操作
- MariaDB数据库介绍之一、备份(mysqldump、lvm2快照、xtrabackup)
- PHP的单引号和双引号
- Graphics.TranslateTransform设置旋转角度不起作用?