安いVPSなどを借りて、普段はSSHだけ解放しといて、SSH以外のポートは自宅(社内)からのみアクセスできるようにしたいと思いました。

アクセス元のIPが固定であれば特に問題ないのですが、動的に割り当てられる環境だと毎回変わってしまうので、SSHの環境変数を利用して、SSHログイン後に実行するとフィルターが解除されるような次のスクリプトを作ってみました。

#!/bin/bash
IP=`env | grep SSH_CLIENT | sed 's/SSH_CLIENT=\([0-9\.]*\) .*/\1/'`
sudo sed -i'.old' -e "/--dport 80/c\-A INPUT -m state --state NEW -m tcp -p tcp -s ${IP} --dport 80 -j ACCEPT" /etc/sysconfig/iptables
sudo service iptables restart
SSHでログインした後で実行すると、環境変数を参照して「--dport 80」の記述をログイン元のIPからのみHTTPを解放するように変更します。そのため、事前に「--dport 80」に関する何らかの記述がないとエラーになるかもしれません。

その他のポートも解放したければsedの行を増せば良いと思います。